openplanr 1.25.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +78 -0
- package/CONTRIBUTING.md +33 -0
- package/README.md +154 -131
- package/dist/cli/commands/artifact.d.ts.map +1 -1
- package/dist/cli/commands/artifact.js +214 -30
- package/dist/cli/commands/artifact.js.map +1 -1
- package/dist/cli/commands/backlog.d.ts +1 -21
- package/dist/cli/commands/backlog.d.ts.map +1 -1
- package/dist/cli/commands/backlog.js +1 -428
- package/dist/cli/commands/backlog.js.map +1 -1
- package/dist/cli/commands/company.d.ts +3 -0
- package/dist/cli/commands/company.d.ts.map +1 -0
- package/dist/cli/commands/company.js +173 -0
- package/dist/cli/commands/company.js.map +1 -0
- package/dist/cli/commands/config-deterministic.d.ts +3 -0
- package/dist/cli/commands/config-deterministic.d.ts.map +1 -0
- package/dist/cli/commands/config-deterministic.js +88 -0
- package/dist/cli/commands/config-deterministic.js.map +1 -0
- package/dist/cli/commands/dashboard.d.ts +3 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -0
- package/dist/cli/commands/dashboard.js +36 -0
- package/dist/cli/commands/dashboard.js.map +1 -0
- package/dist/cli/commands/diagram/index.d.ts +3 -0
- package/dist/cli/commands/diagram/index.d.ts.map +1 -0
- package/dist/cli/commands/diagram/index.js +73 -0
- package/dist/cli/commands/diagram/index.js.map +1 -0
- package/dist/cli/commands/diagram/presentation.d.ts +4 -0
- package/dist/cli/commands/diagram/presentation.d.ts.map +1 -0
- package/dist/cli/commands/diagram/presentation.js +38 -0
- package/dist/cli/commands/diagram/presentation.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +1 -11
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/epic.d.ts +1 -9
- package/dist/cli/commands/epic.d.ts.map +1 -1
- package/dist/cli/commands/epic.js +1 -259
- package/dist/cli/commands/epic.js.map +1 -1
- package/dist/cli/commands/feature.d.ts +1 -8
- package/dist/cli/commands/feature.d.ts.map +1 -1
- package/dist/cli/commands/feature.js +1 -220
- package/dist/cli/commands/feature.js.map +1 -1
- package/dist/cli/commands/groups/delivery.d.ts +3 -0
- package/dist/cli/commands/groups/delivery.d.ts.map +1 -0
- package/dist/cli/commands/groups/delivery.js +13 -0
- package/dist/cli/commands/groups/delivery.js.map +1 -0
- package/dist/cli/commands/groups/foundation.d.ts +3 -0
- package/dist/cli/commands/groups/foundation.d.ts.map +1 -0
- package/dist/cli/commands/groups/foundation.js +11 -0
- package/dist/cli/commands/groups/foundation.js.map +1 -0
- package/dist/cli/commands/groups/intelligence.d.ts +3 -0
- package/dist/cli/commands/groups/intelligence.d.ts.map +1 -0
- package/dist/cli/commands/groups/intelligence.js +19 -0
- package/dist/cli/commands/groups/intelligence.js.map +1 -0
- package/dist/cli/commands/groups/operations.d.ts +3 -0
- package/dist/cli/commands/groups/operations.d.ts.map +1 -0
- package/dist/cli/commands/groups/operations.js +17 -0
- package/dist/cli/commands/groups/operations.js.map +1 -0
- package/dist/cli/commands/groups/planning.d.ts +3 -0
- package/dist/cli/commands/groups/planning.d.ts.map +1 -0
- package/dist/cli/commands/groups/planning.js +25 -0
- package/dist/cli/commands/groups/planning.js.map +1 -0
- package/dist/cli/commands/index.d.ts +4 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +14 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init-deterministic.d.ts +3 -0
- package/dist/cli/commands/init-deterministic.d.ts.map +1 -0
- package/dist/cli/commands/init-deterministic.js +40 -0
- package/dist/cli/commands/init-deterministic.js.map +1 -0
- package/dist/cli/commands/land.d.ts +15 -0
- package/dist/cli/commands/land.d.ts.map +1 -0
- package/dist/cli/commands/land.js +176 -0
- package/dist/cli/commands/land.js.map +1 -0
- package/dist/cli/commands/operate/input.d.ts +54 -0
- package/dist/cli/commands/operate/input.d.ts.map +1 -0
- package/dist/cli/commands/operate/input.js +98 -0
- package/dist/cli/commands/operate/input.js.map +1 -0
- package/dist/cli/commands/operate/registrars/assignments.d.ts +5 -0
- package/dist/cli/commands/operate/registrars/assignments.d.ts.map +1 -0
- package/dist/cli/commands/operate/registrars/assignments.js +167 -0
- package/dist/cli/commands/operate/registrars/assignments.js.map +1 -0
- package/dist/cli/commands/operate/registrars/catalog.d.ts +4 -0
- package/dist/cli/commands/operate/registrars/catalog.d.ts.map +1 -0
- package/dist/cli/commands/operate/registrars/catalog.js +12 -0
- package/dist/cli/commands/operate/registrars/catalog.js.map +1 -0
- package/dist/cli/commands/operate/registrars/contracts.d.ts +41 -0
- package/dist/cli/commands/operate/registrars/contracts.d.ts.map +1 -0
- package/dist/cli/commands/operate/registrars/contracts.js +2 -0
- package/dist/cli/commands/operate/registrars/contracts.js.map +1 -0
- package/dist/cli/commands/operate/registrars/dashboard.d.ts +4 -0
- package/dist/cli/commands/operate/registrars/dashboard.d.ts.map +1 -0
- package/dist/cli/commands/operate/registrars/dashboard.js +26 -0
- package/dist/cli/commands/operate/registrars/dashboard.js.map +1 -0
- package/dist/cli/commands/operate/registrars/dispatch.d.ts +7 -0
- package/dist/cli/commands/operate/registrars/dispatch.d.ts.map +1 -0
- package/dist/cli/commands/operate/registrars/dispatch.js +55 -0
- package/dist/cli/commands/operate/registrars/dispatch.js.map +1 -0
- package/dist/cli/commands/operate/registrars/experience.d.ts +4 -0
- package/dist/cli/commands/operate/registrars/experience.d.ts.map +1 -0
- package/dist/cli/commands/operate/registrars/experience.js +93 -0
- package/dist/cli/commands/operate/registrars/experience.js.map +1 -0
- package/dist/cli/commands/operate/registrars/index.d.ts +5 -0
- package/dist/cli/commands/operate/registrars/index.d.ts.map +1 -0
- package/dist/cli/commands/operate/registrars/index.js +28 -0
- package/dist/cli/commands/operate/registrars/index.js.map +1 -0
- package/dist/cli/commands/operate/registrars/lifecycle.d.ts +4 -0
- package/dist/cli/commands/operate/registrars/lifecycle.d.ts.map +1 -0
- package/dist/cli/commands/operate/registrars/lifecycle.js +46 -0
- package/dist/cli/commands/operate/registrars/lifecycle.js.map +1 -0
- package/dist/cli/commands/operate/registrars/measurement.d.ts +4 -0
- package/dist/cli/commands/operate/registrars/measurement.d.ts.map +1 -0
- package/dist/cli/commands/operate/registrars/measurement.js +122 -0
- package/dist/cli/commands/operate/registrars/measurement.js.map +1 -0
- package/dist/cli/commands/operate/registrars/note-validation.d.ts +6 -0
- package/dist/cli/commands/operate/registrars/note-validation.d.ts.map +1 -0
- package/dist/cli/commands/operate/registrars/note-validation.js +103 -0
- package/dist/cli/commands/operate/registrars/note-validation.js.map +1 -0
- package/dist/cli/commands/operate/registrars/planning.d.ts +4 -0
- package/dist/cli/commands/operate/registrars/planning.d.ts.map +1 -0
- package/dist/cli/commands/operate/registrars/planning.js +41 -0
- package/dist/cli/commands/operate/registrars/planning.js.map +1 -0
- package/dist/cli/commands/operate/registrars/recovery.d.ts +4 -0
- package/dist/cli/commands/operate/registrars/recovery.d.ts.map +1 -0
- package/dist/cli/commands/operate/registrars/recovery.js +65 -0
- package/dist/cli/commands/operate/registrars/recovery.js.map +1 -0
- package/dist/cli/commands/operate/registrars/reviews.d.ts +4 -0
- package/dist/cli/commands/operate/registrars/reviews.d.ts.map +1 -0
- package/dist/cli/commands/operate/registrars/reviews.js +83 -0
- package/dist/cli/commands/operate/registrars/reviews.js.map +1 -0
- package/dist/cli/commands/operate/registration.d.ts +4 -0
- package/dist/cli/commands/operate/registration.d.ts.map +1 -0
- package/dist/cli/commands/operate/registration.js +3 -0
- package/dist/cli/commands/operate/registration.js.map +1 -0
- package/dist/cli/commands/operate/render.d.ts +19 -0
- package/dist/cli/commands/operate/render.d.ts.map +1 -0
- package/dist/cli/commands/operate/render.js +201 -0
- package/dist/cli/commands/operate/render.js.map +1 -0
- package/dist/cli/commands/operate.d.ts +58 -13
- package/dist/cli/commands/operate.d.ts.map +1 -1
- package/dist/cli/commands/operate.js +169 -984
- package/dist/cli/commands/operate.js.map +1 -1
- package/dist/cli/commands/planning-artifacts.d.ts +10 -0
- package/dist/cli/commands/planning-artifacts.d.ts.map +1 -0
- package/dist/cli/commands/planning-artifacts.js +350 -0
- package/dist/cli/commands/planning-artifacts.js.map +1 -0
- package/dist/cli/commands/quick/interaction.d.ts +8 -0
- package/dist/cli/commands/quick/interaction.d.ts.map +1 -0
- package/dist/cli/commands/quick/interaction.js +8 -0
- package/dist/cli/commands/quick/interaction.js.map +1 -0
- package/dist/cli/commands/quick/project.d.ts +8 -0
- package/dist/cli/commands/quick/project.d.ts.map +1 -0
- package/dist/cli/commands/quick/project.js +8 -0
- package/dist/cli/commands/quick/project.js.map +1 -0
- package/dist/cli/commands/quick.d.ts +1 -29
- package/dist/cli/commands/quick.d.ts.map +1 -1
- package/dist/cli/commands/quick.js +1 -337
- package/dist/cli/commands/quick.js.map +1 -1
- package/dist/cli/commands/rules.js +1 -1
- package/dist/cli/commands/rules.js.map +1 -1
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +40 -18
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/spec.d.ts +6 -4
- package/dist/cli/commands/spec.d.ts.map +1 -1
- package/dist/cli/commands/spec.js +166 -174
- package/dist/cli/commands/spec.js.map +1 -1
- package/dist/cli/commands/sprint.d.ts +1 -8
- package/dist/cli/commands/sprint.d.ts.map +1 -1
- package/dist/cli/commands/sprint.js +1 -522
- package/dist/cli/commands/sprint.js.map +1 -1
- package/dist/cli/commands/story/interaction.d.ts +7 -0
- package/dist/cli/commands/story/interaction.d.ts.map +1 -0
- package/dist/cli/commands/story/interaction.js +7 -0
- package/dist/cli/commands/story/interaction.js.map +1 -0
- package/dist/cli/commands/story/project.d.ts +10 -0
- package/dist/cli/commands/story/project.d.ts.map +1 -0
- package/dist/cli/commands/story/project.js +10 -0
- package/dist/cli/commands/story/project.js.map +1 -0
- package/dist/cli/commands/story.d.ts +1 -8
- package/dist/cli/commands/story.d.ts.map +1 -1
- package/dist/cli/commands/story.js +1 -358
- package/dist/cli/commands/story.js.map +1 -1
- package/dist/cli/commands/task.d.ts +1 -9
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +1 -351
- package/dist/cli/commands/task.js.map +1 -1
- package/dist/cli/error-boundary.d.ts +29 -0
- package/dist/cli/error-boundary.d.ts.map +1 -0
- package/dist/cli/error-boundary.js +103 -0
- package/dist/cli/error-boundary.js.map +1 -0
- package/dist/cli/helpers/bulk-checkbox-update.d.ts +1 -1
- package/dist/cli/helpers/bulk-checkbox-update.js +1 -1
- package/dist/cli/index.js +38 -113
- package/dist/cli/index.js.map +1 -1
- package/dist/dashboard/.vite/manifest.json +68 -0
- package/dist/dashboard/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/dist/dashboard/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/dist/dashboard/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/dist/dashboard/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/dist/dashboard/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
- package/dist/dashboard/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
- package/dist/dashboard/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
- package/dist/dashboard/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
- package/dist/dashboard/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
- package/dist/dashboard/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
- package/dist/dashboard/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/dist/dashboard/assets/index-Bk8DyO_2.css +1 -0
- package/dist/dashboard/assets/index-zeygL5iu.js +557 -0
- package/dist/dashboard/assets/index-zeygL5iu.js.map +1 -0
- package/dist/dashboard/dashboard-manifest.json +84 -0
- package/dist/dashboard/index.html +13 -0
- package/dist/generators/base-generator.d.ts +2 -0
- package/dist/generators/base-generator.d.ts.map +1 -1
- package/dist/generators/base-generator.js +8 -0
- package/dist/generators/base-generator.js.map +1 -1
- package/dist/generators/claude-generator.d.ts.map +1 -1
- package/dist/generators/claude-generator.js +12 -14
- package/dist/generators/claude-generator.js.map +1 -1
- package/dist/generators/codex-generator.d.ts.map +1 -1
- package/dist/generators/codex-generator.js +7 -7
- package/dist/generators/codex-generator.js.map +1 -1
- package/dist/generators/cursor-generator.d.ts.map +1 -1
- package/dist/generators/cursor-generator.js +11 -30
- package/dist/generators/cursor-generator.js.map +1 -1
- package/dist/models/schema.d.ts +0 -23
- package/dist/models/schema.d.ts.map +1 -1
- package/dist/models/schema.js +0 -7
- package/dist/models/schema.js.map +1 -1
- package/dist/models/types.d.ts +3 -14
- package/dist/models/types.d.ts.map +1 -1
- package/dist/services/artifact-pipeline-service.d.ts +99 -1
- package/dist/services/artifact-pipeline-service.d.ts.map +1 -1
- package/dist/services/artifact-pipeline-service.js +681 -4
- package/dist/services/artifact-pipeline-service.js.map +1 -1
- package/dist/services/canonical-json.d.ts +3 -0
- package/dist/services/canonical-json.d.ts.map +1 -0
- package/dist/services/canonical-json.js +71 -0
- package/dist/services/canonical-json.js.map +1 -0
- package/dist/services/claude-plugin-service.d.ts +6 -1
- package/dist/services/claude-plugin-service.d.ts.map +1 -1
- package/dist/services/claude-plugin-service.js +184 -12
- package/dist/services/claude-plugin-service.js.map +1 -1
- package/dist/services/codex-plugin-service.d.ts +30 -0
- package/dist/services/codex-plugin-service.d.ts.map +1 -0
- package/dist/services/codex-plugin-service.js +195 -0
- package/dist/services/codex-plugin-service.js.map +1 -0
- package/dist/services/company-auth-service.d.ts +70 -0
- package/dist/services/company-auth-service.d.ts.map +1 -0
- package/dist/services/company-auth-service.js +720 -0
- package/dist/services/company-auth-service.js.map +1 -0
- package/dist/services/company-auth-store.d.ts +22 -0
- package/dist/services/company-auth-store.d.ts.map +1 -0
- package/dist/services/company-auth-store.js +158 -0
- package/dist/services/company-auth-store.js.map +1 -0
- package/dist/services/company-common.d.ts +9 -0
- package/dist/services/company-common.d.ts.map +1 -0
- package/dist/services/company-common.js +35 -0
- package/dist/services/company-common.js.map +1 -0
- package/dist/services/company-sync-service.d.ts +214 -0
- package/dist/services/company-sync-service.d.ts.map +1 -0
- package/dist/services/company-sync-service.js +1299 -0
- package/dist/services/company-sync-service.js.map +1 -0
- package/dist/services/connectors/adapters/business-metrics.d.ts +5 -0
- package/dist/services/connectors/adapters/business-metrics.d.ts.map +1 -0
- package/dist/services/connectors/adapters/business-metrics.js +41 -0
- package/dist/services/connectors/adapters/business-metrics.js.map +1 -0
- package/dist/services/connectors/adapters/deployment-health.d.ts +18 -0
- package/dist/services/connectors/adapters/deployment-health.d.ts.map +1 -0
- package/dist/services/connectors/adapters/deployment-health.js +67 -0
- package/dist/services/connectors/adapters/deployment-health.js.map +1 -0
- package/dist/services/connectors/adapters/github.d.ts +5 -0
- package/dist/services/connectors/adapters/github.d.ts.map +1 -0
- package/dist/services/connectors/adapters/github.js +31 -0
- package/dist/services/connectors/adapters/github.js.map +1 -0
- package/dist/services/connectors/adapters/linear-jira.d.ts +5 -0
- package/dist/services/connectors/adapters/linear-jira.d.ts.map +1 -0
- package/dist/services/connectors/adapters/linear-jira.js +26 -0
- package/dist/services/connectors/adapters/linear-jira.js.map +1 -0
- package/dist/services/connectors/adapters/posthog.d.ts +5 -0
- package/dist/services/connectors/adapters/posthog.d.ts.map +1 -0
- package/dist/services/connectors/adapters/posthog.js +31 -0
- package/dist/services/connectors/adapters/posthog.js.map +1 -0
- package/dist/services/connectors/adapters/sentry.d.ts +5 -0
- package/dist/services/connectors/adapters/sentry.d.ts.map +1 -0
- package/dist/services/connectors/adapters/sentry.js +31 -0
- package/dist/services/connectors/adapters/sentry.js.map +1 -0
- package/dist/services/connectors/checkpoint-custody.d.ts +45 -0
- package/dist/services/connectors/checkpoint-custody.d.ts.map +1 -0
- package/dist/services/connectors/checkpoint-custody.js +496 -0
- package/dist/services/connectors/checkpoint-custody.js.map +1 -0
- package/dist/services/connectors/connector-registry.d.ts +144 -0
- package/dist/services/connectors/connector-registry.d.ts.map +1 -0
- package/dist/services/connectors/connector-registry.js +423 -0
- package/dist/services/connectors/connector-registry.js.map +1 -0
- package/dist/services/connectors/connector-runtime.d.ts +200 -0
- package/dist/services/connectors/connector-runtime.d.ts.map +1 -0
- package/dist/services/connectors/connector-runtime.js +1297 -0
- package/dist/services/connectors/connector-runtime.js.map +1 -0
- package/dist/services/connectors/credential-custody.d.ts +96 -0
- package/dist/services/connectors/credential-custody.d.ts.map +1 -0
- package/dist/services/connectors/credential-custody.js +390 -0
- package/dist/services/connectors/credential-custody.js.map +1 -0
- package/dist/services/credential-backends.d.ts +11 -1
- package/dist/services/credential-backends.d.ts.map +1 -1
- package/dist/services/credential-backends.js +104 -21
- package/dist/services/credential-backends.js.map +1 -1
- package/dist/services/credential-write-lock.d.ts +8 -0
- package/dist/services/credential-write-lock.d.ts.map +1 -0
- package/dist/services/credential-write-lock.js +104 -0
- package/dist/services/credential-write-lock.js.map +1 -0
- package/dist/services/credentials-service.d.ts +8 -2
- package/dist/services/credentials-service.d.ts.map +1 -1
- package/dist/services/credentials-service.js +66 -21
- package/dist/services/credentials-service.js.map +1 -1
- package/dist/services/deprecation-notices.d.ts +2 -2
- package/dist/services/deprecation-notices.d.ts.map +1 -1
- package/dist/services/deprecation-notices.js +2 -2
- package/dist/services/deprecation-notices.js.map +1 -1
- package/dist/services/design-artifact-service.d.ts +37 -0
- package/dist/services/design-artifact-service.d.ts.map +1 -0
- package/dist/services/design-artifact-service.js +94 -0
- package/dist/services/design-artifact-service.js.map +1 -0
- package/dist/services/diagram-artifact-service.d.ts +12 -0
- package/dist/services/diagram-artifact-service.d.ts.map +1 -0
- package/dist/services/diagram-artifact-service.js +41 -0
- package/dist/services/diagram-artifact-service.js.map +1 -0
- package/dist/services/diagram-pipeline-service.d.ts +125 -0
- package/dist/services/diagram-pipeline-service.d.ts.map +1 -0
- package/dist/services/diagram-pipeline-service.js +329 -0
- package/dist/services/diagram-pipeline-service.js.map +1 -0
- package/dist/services/gherkin-service.d.ts +3 -0
- package/dist/services/gherkin-service.d.ts.map +1 -0
- package/dist/services/gherkin-service.js +9 -0
- package/dist/services/gherkin-service.js.map +1 -0
- package/dist/services/graph-service.d.ts.map +1 -1
- package/dist/services/graph-service.js +6 -4
- package/dist/services/graph-service.js.map +1 -1
- package/dist/services/landing/landing-service.d.ts +42 -0
- package/dist/services/landing/landing-service.d.ts.map +1 -0
- package/dist/services/landing/landing-service.js +197 -0
- package/dist/services/landing/landing-service.js.map +1 -0
- package/dist/services/landing/operation-registry.d.ts +56 -0
- package/dist/services/landing/operation-registry.d.ts.map +1 -0
- package/dist/services/landing/operation-registry.js +165 -0
- package/dist/services/landing/operation-registry.js.map +1 -0
- package/dist/services/landing/receipt-custody.d.ts +48 -0
- package/dist/services/landing/receipt-custody.d.ts.map +1 -0
- package/dist/services/landing/receipt-custody.js +375 -0
- package/dist/services/landing/receipt-custody.js.map +1 -0
- package/dist/services/linear/constants.d.ts.map +1 -1
- package/dist/services/linear/constants.js +2 -6
- package/dist/services/linear/constants.js.map +1 -1
- package/dist/services/linear/task-status-aggregation.d.ts +1 -1
- package/dist/services/linear/task-status-aggregation.js +1 -1
- package/dist/services/linear-pull-service.d.ts.map +1 -1
- package/dist/services/linear-pull-service.js +7 -30
- package/dist/services/linear-pull-service.js.map +1 -1
- package/dist/services/linear-push-service.d.ts.map +1 -1
- package/dist/services/linear-push-service.js +4 -5
- package/dist/services/linear-push-service.js.map +1 -1
- package/dist/services/migration-registry.d.ts +0 -19
- package/dist/services/migration-registry.d.ts.map +1 -1
- package/dist/services/migration-registry.js +18 -32
- package/dist/services/migration-registry.js.map +1 -1
- package/dist/services/operate/assignment-lifecycle-service.d.ts +135 -0
- package/dist/services/operate/assignment-lifecycle-service.d.ts.map +1 -0
- package/dist/services/operate/assignment-lifecycle-service.js +113 -0
- package/dist/services/operate/assignment-lifecycle-service.js.map +1 -0
- package/dist/services/operate/assignment-packet-service.d.ts +79 -0
- package/dist/services/operate/assignment-packet-service.d.ts.map +1 -0
- package/dist/services/operate/assignment-packet-service.js +1030 -0
- package/dist/services/operate/assignment-packet-service.js.map +1 -0
- package/dist/services/operate/client/governance.d.ts +4 -0
- package/dist/services/operate/client/governance.d.ts.map +1 -0
- package/dist/services/operate/client/governance.js +3 -0
- package/dist/services/operate/client/governance.js.map +1 -0
- package/dist/services/operate/client/lifecycle.d.ts +18 -0
- package/dist/services/operate/client/lifecycle.d.ts.map +1 -0
- package/dist/services/operate/client/lifecycle.js +15 -0
- package/dist/services/operate/client/lifecycle.js.map +1 -0
- package/dist/services/operate/client/runtime.d.ts +13 -0
- package/dist/services/operate/client/runtime.d.ts.map +1 -0
- package/dist/services/operate/client/runtime.js +11 -0
- package/dist/services/operate/client/runtime.js.map +1 -0
- package/dist/services/operate/client-error.d.ts +9 -0
- package/dist/services/operate/client-error.d.ts.map +1 -0
- package/dist/services/operate/client-error.js +14 -0
- package/dist/services/operate/client-error.js.map +1 -0
- package/dist/services/operate/client.d.ts +415 -0
- package/dist/services/operate/client.d.ts.map +1 -0
- package/dist/services/operate/client.js +2432 -0
- package/dist/services/operate/client.js.map +1 -0
- package/dist/services/operate/command-gateway.d.ts +152 -0
- package/dist/services/operate/command-gateway.d.ts.map +1 -0
- package/dist/services/operate/command-gateway.js +883 -0
- package/dist/services/operate/command-gateway.js.map +1 -0
- package/dist/services/operate/composition.d.ts +421 -0
- package/dist/services/operate/composition.d.ts.map +1 -0
- package/dist/services/operate/composition.js +394 -0
- package/dist/services/operate/composition.js.map +1 -0
- package/dist/services/operate/cycle-lifecycle-service.d.ts +35 -0
- package/dist/services/operate/cycle-lifecycle-service.d.ts.map +1 -0
- package/dist/services/operate/cycle-lifecycle-service.js +427 -0
- package/dist/services/operate/cycle-lifecycle-service.js.map +1 -0
- package/dist/services/operate/delivery-evidence.d.ts +34 -0
- package/dist/services/operate/delivery-evidence.d.ts.map +1 -0
- package/dist/services/operate/delivery-evidence.js +666 -0
- package/dist/services/operate/delivery-evidence.js.map +1 -0
- package/dist/services/operate/domain-catalog-service.d.ts +24 -0
- package/dist/services/operate/domain-catalog-service.d.ts.map +1 -0
- package/dist/services/operate/domain-catalog-service.js +99 -0
- package/dist/services/operate/domain-catalog-service.js.map +1 -0
- package/dist/services/operate/experience-read-service.d.ts +64 -0
- package/dist/services/operate/experience-read-service.d.ts.map +1 -0
- package/dist/services/operate/experience-read-service.js +109 -0
- package/dist/services/operate/experience-read-service.js.map +1 -0
- package/dist/services/operate/governed-action-service.d.ts +80 -0
- package/dist/services/operate/governed-action-service.d.ts.map +1 -0
- package/dist/services/operate/governed-action-service.js +497 -0
- package/dist/services/operate/governed-action-service.js.map +1 -0
- package/dist/services/operate/identity-contract.d.ts +3 -0
- package/dist/services/operate/identity-contract.d.ts.map +1 -0
- package/dist/services/operate/identity-contract.js +6 -0
- package/dist/services/operate/identity-contract.js.map +1 -0
- package/dist/services/operate/measurement-schedule-service.d.ts +81 -0
- package/dist/services/operate/measurement-schedule-service.d.ts.map +1 -0
- package/dist/services/operate/measurement-schedule-service.js +461 -0
- package/dist/services/operate/measurement-schedule-service.js.map +1 -0
- package/dist/services/operate/path-custody.d.ts +16 -0
- package/dist/services/operate/path-custody.d.ts.map +1 -0
- package/dist/services/operate/path-custody.js +120 -0
- package/dist/services/operate/path-custody.js.map +1 -0
- package/dist/services/operate/pinned-legacy-replay-runner.d.ts +9 -0
- package/dist/services/operate/pinned-legacy-replay-runner.d.ts.map +1 -0
- package/dist/services/operate/pinned-legacy-replay-runner.js +441 -0
- package/dist/services/operate/pinned-legacy-replay-runner.js.map +1 -0
- package/dist/services/operate/planning-bridge.d.ts +28 -0
- package/dist/services/operate/planning-bridge.d.ts.map +1 -0
- package/dist/services/operate/planning-bridge.js +341 -0
- package/dist/services/operate/planning-bridge.js.map +1 -0
- package/dist/services/operate/planning-handoff-gateway.d.ts +47 -0
- package/dist/services/operate/planning-handoff-gateway.d.ts.map +1 -0
- package/dist/services/operate/planning-handoff-gateway.js +169 -0
- package/dist/services/operate/planning-handoff-gateway.js.map +1 -0
- package/dist/services/operate/planning-handoff-service.d.ts +38 -0
- package/dist/services/operate/planning-handoff-service.d.ts.map +1 -0
- package/dist/services/operate/planning-handoff-service.js +304 -0
- package/dist/services/operate/planning-handoff-service.js.map +1 -0
- package/dist/services/operate/project-transaction-lock.d.ts +6 -0
- package/dist/services/operate/project-transaction-lock.d.ts.map +1 -0
- package/dist/services/operate/project-transaction-lock.js +146 -0
- package/dist/services/operate/project-transaction-lock.js.map +1 -0
- package/dist/services/operate/recovery-service.d.ts +16 -0
- package/dist/services/operate/recovery-service.d.ts.map +1 -0
- package/dist/services/operate/recovery-service.js +59 -0
- package/dist/services/operate/recovery-service.js.map +1 -0
- package/dist/services/operate/replay-safe-retry-service.d.ts +21 -0
- package/dist/services/operate/replay-safe-retry-service.d.ts.map +1 -0
- package/dist/services/operate/replay-safe-retry-service.js +66 -0
- package/dist/services/operate/replay-safe-retry-service.js.map +1 -0
- package/dist/services/operate/repository-read-service.d.ts +13 -0
- package/dist/services/operate/repository-read-service.d.ts.map +1 -0
- package/dist/services/operate/repository-read-service.js +153 -0
- package/dist/services/operate/repository-read-service.js.map +1 -0
- package/dist/services/operate/review-lifecycle-service.d.ts +50 -0
- package/dist/services/operate/review-lifecycle-service.d.ts.map +1 -0
- package/dist/services/operate/review-lifecycle-service.js +63 -0
- package/dist/services/operate/review-lifecycle-service.js.map +1 -0
- package/dist/services/operate/review-read-gateway.d.ts +21 -0
- package/dist/services/operate/review-read-gateway.d.ts.map +1 -0
- package/dist/services/operate/review-read-gateway.js +119 -0
- package/dist/services/operate/review-read-gateway.js.map +1 -0
- package/dist/services/operate/screened-evidence-service.d.ts +24 -0
- package/dist/services/operate/screened-evidence-service.d.ts.map +1 -0
- package/dist/services/operate/screened-evidence-service.js +186 -0
- package/dist/services/operate/screened-evidence-service.js.map +1 -0
- package/dist/services/operate/search-hit-contract.d.ts +11 -0
- package/dist/services/operate/search-hit-contract.d.ts.map +1 -0
- package/dist/services/operate/search-hit-contract.js +29 -0
- package/dist/services/operate/search-hit-contract.js.map +1 -0
- package/dist/services/operate/session-capability.d.ts +61 -0
- package/dist/services/operate/session-capability.d.ts.map +1 -0
- package/dist/services/operate/session-capability.js +124 -0
- package/dist/services/operate/session-capability.js.map +1 -0
- package/dist/services/operate/spec-operating-origin-service.d.ts +60 -0
- package/dist/services/operate/spec-operating-origin-service.d.ts.map +1 -0
- package/dist/services/operate/spec-operating-origin-service.js +401 -0
- package/dist/services/operate/spec-operating-origin-service.js.map +1 -0
- package/dist/services/operate/storage-layout.d.ts +82 -0
- package/dist/services/operate/storage-layout.d.ts.map +1 -0
- package/dist/services/operate/storage-layout.js +1244 -0
- package/dist/services/operate/storage-layout.js.map +1 -0
- package/dist/services/operate/storage-migration-service.d.ts +15 -0
- package/dist/services/operate/storage-migration-service.d.ts.map +1 -0
- package/dist/services/operate/storage-migration-service.js +27 -0
- package/dist/services/operate/storage-migration-service.js.map +1 -0
- package/dist/services/operate/store.d.ts +132 -0
- package/dist/services/operate/store.d.ts.map +1 -0
- package/dist/services/operate/store.js +1344 -0
- package/dist/services/operate/store.js.map +1 -0
- package/dist/services/pipeline-package-service.d.ts +93 -2
- package/dist/services/pipeline-package-service.d.ts.map +1 -1
- package/dist/services/pipeline-package-service.js +867 -7
- package/dist/services/pipeline-package-service.js.map +1 -1
- package/dist/services/planning-id-service.d.ts +8 -0
- package/dist/services/planning-id-service.d.ts.map +1 -0
- package/dist/services/planning-id-service.js +114 -0
- package/dist/services/planning-id-service.js.map +1 -0
- package/dist/services/provenance-service.d.ts +33 -1
- package/dist/services/provenance-service.d.ts.map +1 -1
- package/dist/services/provenance-service.js +104 -8
- package/dist/services/provenance-service.js.map +1 -1
- package/dist/services/runtime-manager/doctor.d.ts +22 -0
- package/dist/services/runtime-manager/doctor.d.ts.map +1 -0
- package/dist/services/runtime-manager/doctor.js +74 -0
- package/dist/services/runtime-manager/doctor.js.map +1 -0
- package/dist/services/runtime-manager/global-state.d.ts +47 -0
- package/dist/services/runtime-manager/global-state.d.ts.map +1 -0
- package/dist/services/runtime-manager/global-state.js +59 -0
- package/dist/services/runtime-manager/global-state.js.map +1 -0
- package/dist/services/runtime-manager/install-plan.d.ts +37 -0
- package/dist/services/runtime-manager/install-plan.d.ts.map +1 -0
- package/dist/services/runtime-manager/install-plan.js +91 -0
- package/dist/services/runtime-manager/install-plan.js.map +1 -0
- package/dist/services/runtime-manager/inventory.d.ts +29 -0
- package/dist/services/runtime-manager/inventory.d.ts.map +1 -0
- package/dist/services/runtime-manager/inventory.js +46 -0
- package/dist/services/runtime-manager/inventory.js.map +1 -0
- package/dist/services/runtime-manager-service.d.ts +16 -71
- package/dist/services/runtime-manager-service.d.ts.map +1 -1
- package/dist/services/runtime-manager-service.js +1288 -505
- package/dist/services/runtime-manager-service.js.map +1 -1
- package/dist/services/spec-service.d.ts +213 -39
- package/dist/services/spec-service.d.ts.map +1 -1
- package/dist/services/spec-service.js +938 -171
- package/dist/services/spec-service.js.map +1 -1
- package/dist/services/template-service.d.ts.map +1 -1
- package/dist/services/template-service.js +1 -0
- package/dist/services/template-service.js.map +1 -1
- package/dist/templates/quick/quick-task.md.hbs +6 -0
- package/dist/templates/rules/claude/CLAUDE.md.hbs +3 -111
- package/dist/templates/rules/codex/AGENTS.md.hbs +2 -92
- package/dist/templates/rules/cursor/create-task-list.mdc.hbs +1 -1
- package/dist/templates/rules/cursor/implement-task-list.mdc.hbs +5 -83
- package/dist/templates/rules/cursor/openplanr.mdc.hbs +12 -0
- package/dist/templates/rules/shared/host-native-guidance.md.hbs +12 -0
- package/dist/templates/rules/shared/implementation-guidance.md.hbs +44 -0
- package/dist/templates/spec/spec-shaped.md.hbs +66 -22
- package/dist/templates/spec/spec.md.hbs +46 -23
- package/dist/templates/spec/story.md.hbs +15 -4
- package/dist/templates/spec/task.md.hbs +53 -5
- package/dist/utils/constants.d.ts +1 -1
- package/dist/utils/constants.js +1 -1
- package/dist/utils/logger.d.ts +0 -3
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +0 -6
- package/dist/utils/logger.js.map +1 -1
- package/docs/ARTIFACT_REVIEW.md +110 -0
- package/docs/CLI.md +1216 -0
- package/docs/CROSS_RUNTIME_SETUP.md +168 -0
- package/docs/TROUBLESHOOTING.md +227 -0
- package/lib/dashboard-verifier.d.mts +29 -0
- package/lib/dashboard-verifier.mjs +307 -0
- package/lib/host-packages/adapter-registry.json +44 -0
- package/lib/host-packages/claude/.claude-plugin/marketplace.json +20 -0
- package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +9 -0
- package/lib/host-packages/claude/openplanr/.openplanr-content.json +1179 -0
- package/lib/host-packages/claude/openplanr/agents/planr-backend.md +66 -0
- package/lib/host-packages/claude/openplanr/agents/planr-database.md +165 -0
- package/lib/host-packages/claude/openplanr/agents/planr-designer.md +57 -0
- package/lib/host-packages/claude/openplanr/agents/planr-devops.md +57 -0
- package/lib/host-packages/claude/openplanr/agents/planr-documentation.md +63 -0
- package/lib/host-packages/claude/openplanr/agents/planr-entity-scaffold.md +29 -0
- package/lib/host-packages/claude/openplanr/agents/planr-frontend.md +69 -0
- package/lib/host-packages/claude/openplanr/agents/planr-qa.md +162 -0
- package/lib/host-packages/claude/openplanr/agents/planr-specification.md +124 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/backend.md +93 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/designer.md +90 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/devops.md +55 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/doc-gen.md +67 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/frontend.md +94 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/qa.md +17 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/specification.md +111 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/contract-create-modify-preserve.md +17 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/design-craft-rubric.md +51 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/design-principles.md +43 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/design-spec-template.md +88 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/task-context-resolution.md +60 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/verification-and-recovery-backend.md +26 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/verification-and-recovery-frontend.md +27 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/backend.md +96 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/designer.md +83 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/devops.md +55 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/doc-gen.md +67 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/frontend.md +96 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/qa.md +17 -0
- package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/specification.md +112 -0
- package/lib/host-packages/claude/openplanr/references/pipeline/stacks/backend/nestjs.md +130 -0
- package/lib/host-packages/claude/openplanr/references/pipeline/stacks/database/mongodb.md +122 -0
- package/lib/host-packages/claude/openplanr/references/pipeline/stacks/database/prisma.md +155 -0
- package/lib/host-packages/claude/openplanr/references/pipeline/stacks/devops/docker-compose.md +140 -0
- package/lib/host-packages/claude/openplanr/references/pipeline/stacks/frontend/nextjs.md +123 -0
- package/lib/host-packages/claude/openplanr/skills/artifact/SKILL.md +54 -0
- package/lib/host-packages/claude/openplanr/skills/artifact/openplanr.skill.json +48 -0
- package/lib/host-packages/claude/openplanr/skills/artifact/references/company-review.md +18 -0
- package/lib/host-packages/claude/openplanr/skills/artifact/references/design-sharing.md +51 -0
- package/lib/host-packages/claude/openplanr/skills/browser-qa/SKILL.md +34 -0
- package/lib/host-packages/claude/openplanr/skills/browser-qa/openplanr.skill.json +26 -0
- package/lib/host-packages/claude/openplanr/skills/ceo-review/SKILL.md +47 -0
- package/lib/host-packages/claude/openplanr/skills/ceo-review/openplanr.skill.json +81 -0
- package/lib/host-packages/claude/openplanr/skills/ceo-review/references/operate-advisor-contract.md +111 -0
- package/lib/host-packages/claude/openplanr/skills/ceo-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/claude/openplanr/skills/ceo-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/claude/openplanr/skills/ceo-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/claude/openplanr/skills/ceo-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/claude/openplanr/skills/chair-review/SKILL.md +101 -0
- package/lib/host-packages/claude/openplanr/skills/chair-review/openplanr.skill.json +70 -0
- package/lib/host-packages/claude/openplanr/skills/chair-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/claude/openplanr/skills/chair-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/claude/openplanr/skills/chair-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/claude/openplanr/skills/chair-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/claude/openplanr/skills/challenger-review/SKILL.md +86 -0
- package/lib/host-packages/claude/openplanr/skills/challenger-review/openplanr.skill.json +70 -0
- package/lib/host-packages/claude/openplanr/skills/challenger-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/claude/openplanr/skills/challenger-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/claude/openplanr/skills/challenger-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/claude/openplanr/skills/challenger-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/claude/openplanr/skills/cmo-review/SKILL.md +46 -0
- package/lib/host-packages/claude/openplanr/skills/cmo-review/openplanr.skill.json +81 -0
- package/lib/host-packages/claude/openplanr/skills/cmo-review/references/operate-advisor-contract.md +111 -0
- package/lib/host-packages/claude/openplanr/skills/cmo-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/claude/openplanr/skills/cmo-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/claude/openplanr/skills/cmo-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/claude/openplanr/skills/cmo-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/claude/openplanr/skills/coo-review/SKILL.md +45 -0
- package/lib/host-packages/claude/openplanr/skills/coo-review/openplanr.skill.json +81 -0
- package/lib/host-packages/claude/openplanr/skills/coo-review/references/operate-advisor-contract.md +111 -0
- package/lib/host-packages/claude/openplanr/skills/coo-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/claude/openplanr/skills/coo-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/claude/openplanr/skills/coo-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/claude/openplanr/skills/coo-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/claude/openplanr/skills/cpo-review/SKILL.md +48 -0
- package/lib/host-packages/claude/openplanr/skills/cpo-review/openplanr.skill.json +81 -0
- package/lib/host-packages/claude/openplanr/skills/cpo-review/references/operate-advisor-contract.md +111 -0
- package/lib/host-packages/claude/openplanr/skills/cpo-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/claude/openplanr/skills/cpo-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/claude/openplanr/skills/cpo-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/claude/openplanr/skills/cpo-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/claude/openplanr/skills/cto-review/SKILL.md +47 -0
- package/lib/host-packages/claude/openplanr/skills/cto-review/openplanr.skill.json +81 -0
- package/lib/host-packages/claude/openplanr/skills/cto-review/references/operate-advisor-contract.md +111 -0
- package/lib/host-packages/claude/openplanr/skills/cto-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/claude/openplanr/skills/cto-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/claude/openplanr/skills/cto-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/claude/openplanr/skills/cto-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/claude/openplanr/skills/dashboard/SKILL.md +20 -0
- package/lib/host-packages/claude/openplanr/skills/dashboard/openplanr.skill.json +26 -0
- package/lib/host-packages/claude/openplanr/skills/design/SKILL.md +73 -0
- package/lib/host-packages/claude/openplanr/skills/design/openplanr.skill.json +466 -0
- package/lib/host-packages/claude/openplanr/skills/design/references/craft.md +68 -0
- package/lib/host-packages/claude/openplanr/skills/design/references/design-spec-template.md +88 -0
- package/lib/host-packages/claude/openplanr/skills/design/references/design-system.md +33 -0
- package/lib/host-packages/claude/openplanr/skills/design/references/discovery.md +53 -0
- package/lib/host-packages/claude/openplanr/skills/design/references/generation.md +105 -0
- package/lib/host-packages/claude/openplanr/skills/design/references/handoff.md +47 -0
- package/lib/host-packages/claude/openplanr/skills/design/references/review.md +88 -0
- package/lib/host-packages/claude/openplanr/skills/design/references/team-review.md +131 -0
- package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +93 -0
- package/lib/host-packages/claude/openplanr/skills/design/schemas/design-document.schema.json +306 -0
- package/lib/host-packages/claude/openplanr/skills/design/schemas/design-review-context.schema.json +191 -0
- package/lib/host-packages/claude/openplanr/skills/design/schemas/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/design.mjs +17323 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/notices/entities.txt +13 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/notices/parse5.txt +21 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/share.css +1 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/share.js +132 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/package.json +115 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/SKILL.md +58 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/openplanr.skill.json +466 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/craft.md +68 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/design-spec-template.md +88 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/design-system.md +33 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/discovery.md +53 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/generation.md +105 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/handoff.md +47 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/review.md +88 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/team-review.md +131 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +93 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/schemas/design-document.schema.json +306 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/schemas/design-review-context.schema.json +191 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/schemas/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design.mjs +17323 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/notices/entities.txt +13 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/notices/parse5.txt +21 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/share.css +1 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/share.js +132 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/package.json +115 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/SKILL.md +54 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/openplanr.skill.json +466 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/references/craft.md +68 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/references/design-spec-template.md +88 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/references/design-system.md +33 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/references/discovery.md +53 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/references/generation.md +105 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/references/handoff.md +47 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/references/review.md +88 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/references/team-review.md +131 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +93 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/schemas/design-document.schema.json +306 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/schemas/design-review-context.schema.json +191 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/schemas/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design.mjs +17323 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/notices/entities.txt +13 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/notices/parse5.txt +21 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/share.css +1 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/share.js +132 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/package.json +115 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
- package/lib/host-packages/claude/openplanr/skills/diagram/SKILL.md +65 -0
- package/lib/host-packages/claude/openplanr/skills/diagram/openplanr.skill.json +59 -0
- package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-document.md +86 -0
- package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-fidelity.md +19 -0
- package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-intent-to-ir.md +22 -0
- package/lib/host-packages/claude/openplanr/skills/doctor/SKILL.md +40 -0
- package/lib/host-packages/claude/openplanr/skills/doctor/openplanr.skill.json +37 -0
- package/lib/host-packages/claude/openplanr/skills/doctor/references/upgrade.md +106 -0
- package/lib/host-packages/claude/openplanr/skills/investigate/SKILL.md +31 -0
- package/lib/host-packages/claude/openplanr/skills/investigate/openplanr.skill.json +26 -0
- package/lib/host-packages/claude/openplanr/skills/land/SKILL.md +33 -0
- package/lib/host-packages/claude/openplanr/skills/land/openplanr.skill.json +26 -0
- package/lib/host-packages/claude/openplanr/skills/operate/SKILL.md +181 -0
- package/lib/host-packages/claude/openplanr/skills/operate/openplanr.skill.json +70 -0
- package/lib/host-packages/claude/openplanr/skills/operate/scripts/errors.mjs +8 -0
- package/lib/host-packages/claude/openplanr/skills/operate/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/claude/openplanr/skills/operate/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/claude/openplanr/skills/operate/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +106 -0
- package/lib/host-packages/claude/openplanr/skills/plan/openplanr.skill.json +389 -0
- package/lib/host-packages/claude/openplanr/skills/plan/references/artifact-contract.md +39 -0
- package/lib/host-packages/claude/openplanr/skills/plan/schemas/design-document.schema.json +306 -0
- package/lib/host-packages/claude/openplanr/skills/plan/schemas/design-review-context.schema.json +191 -0
- package/lib/host-packages/claude/openplanr/skills/plan/schemas/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/design.mjs +17323 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/planning-ids.mjs +120 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/notices/entities.txt +13 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/notices/parse5.txt +21 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/share.css +1 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/share.js +132 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/package.json +115 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
- package/lib/host-packages/claude/openplanr/skills/plan-review/SKILL.md +39 -0
- package/lib/host-packages/claude/openplanr/skills/plan-review/openplanr.skill.json +26 -0
- package/lib/host-packages/claude/openplanr/skills/release/SKILL.md +180 -0
- package/lib/host-packages/claude/openplanr/skills/release/assets/changelog-template.md +18 -0
- package/lib/host-packages/claude/openplanr/skills/release/assets/profile-template.md +45 -0
- package/lib/host-packages/claude/openplanr/skills/release/openplanr.skill.json +92 -0
- package/lib/host-packages/claude/openplanr/skills/release/references/cadence.md +92 -0
- package/lib/host-packages/claude/openplanr/skills/release/references/release-notes.md +127 -0
- package/lib/host-packages/claude/openplanr/skills/release/references/schemes.md +103 -0
- package/lib/host-packages/claude/openplanr/skills/release/scripts/collect_changes.sh +85 -0
- package/lib/host-packages/claude/openplanr/skills/ship/SKILL.md +80 -0
- package/lib/host-packages/claude/openplanr/skills/ship/openplanr.skill.json +48 -0
- package/lib/host-packages/claude/openplanr/skills/ship/references/result-contract.md +14 -0
- package/lib/host-packages/claude/openplanr/skills/ship/scripts/discover-verification.mjs +107 -0
- package/lib/host-packages/claude/openplanr/skills/spec/SKILL.md +53 -0
- package/lib/host-packages/claude/openplanr/skills/spec/openplanr.skill.json +37 -0
- package/lib/host-packages/claude/openplanr/skills/spec/references/specification-contract.md +32 -0
- package/lib/host-packages/claude/openplanr/skills/status/SKILL.md +21 -0
- package/lib/host-packages/claude/openplanr/skills/status/openplanr.skill.json +26 -0
- package/lib/host-packages/claude/openplanr/skills/sync/SKILL.md +30 -0
- package/lib/host-packages/claude/openplanr/skills/sync/openplanr.skill.json +37 -0
- package/lib/host-packages/claude/openplanr/skills/sync/scripts/sync.mjs +230 -0
- package/lib/host-packages/cursor/openplanr/.openplanr-content.json +939 -0
- package/lib/host-packages/cursor/openplanr/manifest.json +32 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/company-review.md +18 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/design-sharing.md +51 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-artifact.mdc +53 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-browser-qa.mdc +34 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/references/operate-advisor-contract.md +111 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review.mdc +45 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-chair-review.mdc +99 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review.mdc +84 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/references/operate-advisor-contract.md +111 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review.mdc +44 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/references/operate-advisor-contract.md +111 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-coo-review.mdc +43 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/references/operate-advisor-contract.md +111 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review.mdc +46 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/references/operate-advisor-contract.md +111 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cto-review.mdc +45 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-dashboard.mdc +19 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/craft.md +68 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/design-spec-template.md +88 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/design-system.md +33 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/discovery.md +53 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/generation.md +105 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/handoff.md +47 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/review.md +88 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/team-review.md +131 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +93 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/schemas/design-document.schema.json +306 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/schemas/design-review-context.schema.json +191 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/schemas/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design.mjs +17323 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/notices/entities.txt +13 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/notices/parse5.txt +21 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/share.css +1 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/share.js +132 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/package.json +115 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/craft.md +68 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/design-spec-template.md +88 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/design-system.md +33 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/discovery.md +53 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/generation.md +105 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/handoff.md +47 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/review.md +88 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/team-review.md +131 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +93 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/schemas/design-document.schema.json +306 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/schemas/design-review-context.schema.json +191 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/schemas/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design.mjs +17323 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/notices/entities.txt +13 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/notices/parse5.txt +21 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/share.css +1 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/share.js +132 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/package.json +115 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop.mdc +57 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/craft.md +68 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/design-spec-template.md +88 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/design-system.md +33 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/discovery.md +53 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/generation.md +105 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/handoff.md +47 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/review.md +88 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/team-review.md +131 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +93 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/schemas/design-document.schema.json +306 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/schemas/design-review-context.schema.json +191 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/schemas/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design.mjs +17323 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/notices/entities.txt +13 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/notices/parse5.txt +21 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/share.css +1 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/share.js +132 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/package.json +115 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review.mdc +53 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-design.mdc +72 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-document.md +86 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-fidelity.md +19 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-intent-to-ir.md +22 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram.mdc +64 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-doctor/references/upgrade.md +106 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-doctor.mdc +39 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-investigate.mdc +31 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-land.mdc +32 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-operate/scripts/errors.mjs +8 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-operate/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-operate/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-operate/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-operate.mdc +180 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/references/artifact-contract.md +39 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-document.schema.json +306 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-review-context.schema.json +191 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design.mjs +17323 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/planning-ids.mjs +120 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/notices/entities.txt +13 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/notices/parse5.txt +21 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/share.css +1 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/share.js +132 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/package.json +115 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan-review.mdc +38 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +105 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-release/assets/changelog-template.md +18 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-release/assets/profile-template.md +45 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-release/references/cadence.md +92 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-release/references/release-notes.md +127 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-release/references/schemes.md +103 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-release/scripts/collect_changes.sh +85 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-release.mdc +179 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/result-contract.md +14 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ship/scripts/discover-verification.mjs +107 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ship.mdc +79 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-spec/references/specification-contract.md +32 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-spec.mdc +52 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-status.mdc +20 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/sync.mjs +230 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-sync.mdc +29 -0
- package/lib/host-packages/openai/.claude-plugin/marketplace.json +19 -0
- package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +10 -0
- package/lib/host-packages/openai/openplanr/.openplanr-content.json +1139 -0
- package/lib/host-packages/openai/openplanr/skills/artifact/SKILL.md +54 -0
- package/lib/host-packages/openai/openplanr/skills/artifact/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/artifact/openplanr.skill.json +48 -0
- package/lib/host-packages/openai/openplanr/skills/artifact/references/company-review.md +18 -0
- package/lib/host-packages/openai/openplanr/skills/artifact/references/design-sharing.md +51 -0
- package/lib/host-packages/openai/openplanr/skills/browser-qa/SKILL.md +34 -0
- package/lib/host-packages/openai/openplanr/skills/browser-qa/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/browser-qa/openplanr.skill.json +26 -0
- package/lib/host-packages/openai/openplanr/skills/ceo-review/SKILL.md +47 -0
- package/lib/host-packages/openai/openplanr/skills/ceo-review/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/ceo-review/openplanr.skill.json +81 -0
- package/lib/host-packages/openai/openplanr/skills/ceo-review/references/operate-advisor-contract.md +111 -0
- package/lib/host-packages/openai/openplanr/skills/ceo-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/openai/openplanr/skills/ceo-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/openai/openplanr/skills/ceo-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/openai/openplanr/skills/ceo-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/openai/openplanr/skills/chair-review/SKILL.md +101 -0
- package/lib/host-packages/openai/openplanr/skills/chair-review/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/chair-review/openplanr.skill.json +70 -0
- package/lib/host-packages/openai/openplanr/skills/chair-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/openai/openplanr/skills/chair-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/openai/openplanr/skills/chair-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/openai/openplanr/skills/chair-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/openai/openplanr/skills/challenger-review/SKILL.md +86 -0
- package/lib/host-packages/openai/openplanr/skills/challenger-review/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/challenger-review/openplanr.skill.json +70 -0
- package/lib/host-packages/openai/openplanr/skills/challenger-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/openai/openplanr/skills/challenger-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/openai/openplanr/skills/challenger-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/openai/openplanr/skills/challenger-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/openai/openplanr/skills/cmo-review/SKILL.md +46 -0
- package/lib/host-packages/openai/openplanr/skills/cmo-review/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/cmo-review/openplanr.skill.json +81 -0
- package/lib/host-packages/openai/openplanr/skills/cmo-review/references/operate-advisor-contract.md +111 -0
- package/lib/host-packages/openai/openplanr/skills/cmo-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/openai/openplanr/skills/cmo-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/openai/openplanr/skills/cmo-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/openai/openplanr/skills/cmo-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/openai/openplanr/skills/coo-review/SKILL.md +45 -0
- package/lib/host-packages/openai/openplanr/skills/coo-review/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/coo-review/openplanr.skill.json +81 -0
- package/lib/host-packages/openai/openplanr/skills/coo-review/references/operate-advisor-contract.md +111 -0
- package/lib/host-packages/openai/openplanr/skills/coo-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/openai/openplanr/skills/coo-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/openai/openplanr/skills/coo-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/openai/openplanr/skills/coo-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/openai/openplanr/skills/cpo-review/SKILL.md +48 -0
- package/lib/host-packages/openai/openplanr/skills/cpo-review/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/cpo-review/openplanr.skill.json +81 -0
- package/lib/host-packages/openai/openplanr/skills/cpo-review/references/operate-advisor-contract.md +111 -0
- package/lib/host-packages/openai/openplanr/skills/cpo-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/openai/openplanr/skills/cpo-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/openai/openplanr/skills/cpo-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/openai/openplanr/skills/cpo-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/openai/openplanr/skills/cto-review/SKILL.md +47 -0
- package/lib/host-packages/openai/openplanr/skills/cto-review/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/cto-review/openplanr.skill.json +81 -0
- package/lib/host-packages/openai/openplanr/skills/cto-review/references/operate-advisor-contract.md +111 -0
- package/lib/host-packages/openai/openplanr/skills/cto-review/scripts/errors.mjs +8 -0
- package/lib/host-packages/openai/openplanr/skills/cto-review/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/openai/openplanr/skills/cto-review/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/openai/openplanr/skills/cto-review/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/openai/openplanr/skills/dashboard/SKILL.md +20 -0
- package/lib/host-packages/openai/openplanr/skills/dashboard/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/dashboard/openplanr.skill.json +26 -0
- package/lib/host-packages/openai/openplanr/skills/design/SKILL.md +73 -0
- package/lib/host-packages/openai/openplanr/skills/design/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/design/openplanr.skill.json +466 -0
- package/lib/host-packages/openai/openplanr/skills/design/references/craft.md +68 -0
- package/lib/host-packages/openai/openplanr/skills/design/references/design-spec-template.md +88 -0
- package/lib/host-packages/openai/openplanr/skills/design/references/design-system.md +33 -0
- package/lib/host-packages/openai/openplanr/skills/design/references/discovery.md +53 -0
- package/lib/host-packages/openai/openplanr/skills/design/references/generation.md +105 -0
- package/lib/host-packages/openai/openplanr/skills/design/references/handoff.md +47 -0
- package/lib/host-packages/openai/openplanr/skills/design/references/review.md +88 -0
- package/lib/host-packages/openai/openplanr/skills/design/references/team-review.md +131 -0
- package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +93 -0
- package/lib/host-packages/openai/openplanr/skills/design/schemas/design-document.schema.json +306 -0
- package/lib/host-packages/openai/openplanr/skills/design/schemas/design-review-context.schema.json +191 -0
- package/lib/host-packages/openai/openplanr/skills/design/schemas/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/design.mjs +17323 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/notices/entities.txt +13 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/notices/parse5.txt +21 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/share.css +1 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/share.js +132 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/package.json +115 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/SKILL.md +58 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/openplanr.skill.json +466 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/craft.md +68 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/design-spec-template.md +88 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/design-system.md +33 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/discovery.md +53 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/generation.md +105 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/handoff.md +47 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/review.md +88 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/team-review.md +131 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +93 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/schemas/design-document.schema.json +306 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/schemas/design-review-context.schema.json +191 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/schemas/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design.mjs +17323 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/notices/entities.txt +13 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/notices/parse5.txt +21 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/share.css +1 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/share.js +132 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/package.json +115 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/SKILL.md +54 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/openplanr.skill.json +466 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/references/craft.md +68 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/references/design-spec-template.md +88 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/references/design-system.md +33 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/references/discovery.md +53 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/references/generation.md +105 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/references/handoff.md +47 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/references/review.md +88 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/references/team-review.md +131 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +93 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/schemas/design-document.schema.json +306 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/schemas/design-review-context.schema.json +191 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/schemas/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design.mjs +17323 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/notices/entities.txt +13 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/notices/parse5.txt +21 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/share.css +1 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/share.js +132 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/package.json +115 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
- package/lib/host-packages/openai/openplanr/skills/diagram/SKILL.md +65 -0
- package/lib/host-packages/openai/openplanr/skills/diagram/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/diagram/openplanr.skill.json +59 -0
- package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-document.md +86 -0
- package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-fidelity.md +19 -0
- package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-intent-to-ir.md +22 -0
- package/lib/host-packages/openai/openplanr/skills/doctor/SKILL.md +40 -0
- package/lib/host-packages/openai/openplanr/skills/doctor/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/doctor/openplanr.skill.json +37 -0
- package/lib/host-packages/openai/openplanr/skills/doctor/references/upgrade.md +106 -0
- package/lib/host-packages/openai/openplanr/skills/investigate/SKILL.md +31 -0
- package/lib/host-packages/openai/openplanr/skills/investigate/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/investigate/openplanr.skill.json +26 -0
- package/lib/host-packages/openai/openplanr/skills/land/SKILL.md +33 -0
- package/lib/host-packages/openai/openplanr/skills/land/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/land/openplanr.skill.json +26 -0
- package/lib/host-packages/openai/openplanr/skills/operate/SKILL.md +181 -0
- package/lib/host-packages/openai/openplanr/skills/operate/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/operate/openplanr.skill.json +70 -0
- package/lib/host-packages/openai/openplanr/skills/operate/scripts/errors.mjs +8 -0
- package/lib/host-packages/openai/openplanr/skills/operate/scripts/operate-review-contract.mjs +438 -0
- package/lib/host-packages/openai/openplanr/skills/operate/scripts/operate-review-note.mjs +595 -0
- package/lib/host-packages/openai/openplanr/skills/operate/scripts/validate-note.mjs +31 -0
- package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +106 -0
- package/lib/host-packages/openai/openplanr/skills/plan/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/plan/openplanr.skill.json +389 -0
- package/lib/host-packages/openai/openplanr/skills/plan/references/artifact-contract.md +39 -0
- package/lib/host-packages/openai/openplanr/skills/plan/schemas/design-document.schema.json +306 -0
- package/lib/host-packages/openai/openplanr/skills/plan/schemas/design-review-context.schema.json +191 -0
- package/lib/host-packages/openai/openplanr/skills/plan/schemas/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/design.mjs +17323 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/planning-ids.mjs +120 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/notices/entities.txt +13 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/notices/parse5.txt +21 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/share.css +1 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/share.js +132 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/package.json +115 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
- package/lib/host-packages/openai/openplanr/skills/plan-review/SKILL.md +39 -0
- package/lib/host-packages/openai/openplanr/skills/plan-review/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/plan-review/openplanr.skill.json +26 -0
- package/lib/host-packages/openai/openplanr/skills/release/SKILL.md +180 -0
- package/lib/host-packages/openai/openplanr/skills/release/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/release/assets/changelog-template.md +18 -0
- package/lib/host-packages/openai/openplanr/skills/release/assets/profile-template.md +45 -0
- package/lib/host-packages/openai/openplanr/skills/release/openplanr.skill.json +92 -0
- package/lib/host-packages/openai/openplanr/skills/release/references/cadence.md +92 -0
- package/lib/host-packages/openai/openplanr/skills/release/references/release-notes.md +127 -0
- package/lib/host-packages/openai/openplanr/skills/release/references/schemes.md +103 -0
- package/lib/host-packages/openai/openplanr/skills/release/scripts/collect_changes.sh +85 -0
- package/lib/host-packages/openai/openplanr/skills/ship/SKILL.md +80 -0
- package/lib/host-packages/openai/openplanr/skills/ship/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/ship/openplanr.skill.json +48 -0
- package/lib/host-packages/openai/openplanr/skills/ship/references/result-contract.md +14 -0
- package/lib/host-packages/openai/openplanr/skills/ship/scripts/discover-verification.mjs +107 -0
- package/lib/host-packages/openai/openplanr/skills/spec/SKILL.md +53 -0
- package/lib/host-packages/openai/openplanr/skills/spec/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/spec/openplanr.skill.json +37 -0
- package/lib/host-packages/openai/openplanr/skills/spec/references/specification-contract.md +32 -0
- package/lib/host-packages/openai/openplanr/skills/status/SKILL.md +21 -0
- package/lib/host-packages/openai/openplanr/skills/status/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/status/openplanr.skill.json +26 -0
- package/lib/host-packages/openai/openplanr/skills/sync/SKILL.md +30 -0
- package/lib/host-packages/openai/openplanr/skills/sync/agents/openai.yaml +6 -0
- package/lib/host-packages/openai/openplanr/skills/sync/openplanr.skill.json +37 -0
- package/lib/host-packages/openai/openplanr/skills/sync/scripts/sync.mjs +230 -0
- package/lib/integrations.d.mts +43 -0
- package/lib/integrations.mjs +230 -0
- package/lib/skill-runtime/errors.mjs +8 -0
- package/lib/skill-runtime/operate-review-contract.mjs +438 -0
- package/lib/skill-runtime/operate-review-note.mjs +595 -0
- package/package.json +56 -18
- package/dist/ai/codebase/context-builder.d.ts +0 -50
- package/dist/ai/codebase/context-builder.d.ts.map +0 -1
- package/dist/ai/codebase/context-builder.js +0 -281
- package/dist/ai/codebase/context-builder.js.map +0 -1
- package/dist/ai/codebase/file-reader.d.ts +0 -22
- package/dist/ai/codebase/file-reader.d.ts.map +0 -1
- package/dist/ai/codebase/file-reader.js +0 -144
- package/dist/ai/codebase/file-reader.js.map +0 -1
- package/dist/ai/codebase/index.d.ts +0 -7
- package/dist/ai/codebase/index.d.ts.map +0 -1
- package/dist/ai/codebase/index.js +0 -7
- package/dist/ai/codebase/index.js.map +0 -1
- package/dist/ai/codebase/pattern-rules.d.ts +0 -28
- package/dist/ai/codebase/pattern-rules.d.ts.map +0 -1
- package/dist/ai/codebase/pattern-rules.js +0 -186
- package/dist/ai/codebase/pattern-rules.js.map +0 -1
- package/dist/ai/codebase/rules-reader.d.ts +0 -14
- package/dist/ai/codebase/rules-reader.d.ts.map +0 -1
- package/dist/ai/codebase/rules-reader.js +0 -25
- package/dist/ai/codebase/rules-reader.js.map +0 -1
- package/dist/ai/codebase/stack-detector.d.ts +0 -18
- package/dist/ai/codebase/stack-detector.d.ts.map +0 -1
- package/dist/ai/codebase/stack-detector.js +0 -173
- package/dist/ai/codebase/stack-detector.js.map +0 -1
- package/dist/ai/codebase/tree-generator.d.ts +0 -8
- package/dist/ai/codebase/tree-generator.d.ts.map +0 -1
- package/dist/ai/codebase/tree-generator.js +0 -84
- package/dist/ai/codebase/tree-generator.js.map +0 -1
- package/dist/ai/errors.d.ts +0 -22
- package/dist/ai/errors.d.ts.map +0 -1
- package/dist/ai/errors.js +0 -72
- package/dist/ai/errors.js.map +0 -1
- package/dist/ai/index.d.ts +0 -11
- package/dist/ai/index.d.ts.map +0 -1
- package/dist/ai/index.js +0 -10
- package/dist/ai/index.js.map +0 -1
- package/dist/ai/prompts/prompt-builder.d.ts +0 -134
- package/dist/ai/prompts/prompt-builder.d.ts.map +0 -1
- package/dist/ai/prompts/prompt-builder.js +0 -295
- package/dist/ai/prompts/prompt-builder.js.map +0 -1
- package/dist/ai/prompts/system-prompts.d.ts +0 -41
- package/dist/ai/prompts/system-prompts.d.ts.map +0 -1
- package/dist/ai/prompts/system-prompts.js +0 -512
- package/dist/ai/prompts/system-prompts.js.map +0 -1
- package/dist/ai/provider-factory.d.ts +0 -10
- package/dist/ai/provider-factory.d.ts.map +0 -1
- package/dist/ai/provider-factory.js +0 -49
- package/dist/ai/provider-factory.js.map +0 -1
- package/dist/ai/providers/anthropic-provider.d.ts +0 -24
- package/dist/ai/providers/anthropic-provider.d.ts.map +0 -1
- package/dist/ai/providers/anthropic-provider.js +0 -97
- package/dist/ai/providers/anthropic-provider.js.map +0 -1
- package/dist/ai/providers/ollama-provider.d.ts +0 -13
- package/dist/ai/providers/ollama-provider.d.ts.map +0 -1
- package/dist/ai/providers/ollama-provider.js +0 -16
- package/dist/ai/providers/ollama-provider.js.map +0 -1
- package/dist/ai/providers/openai-provider.d.ts +0 -19
- package/dist/ai/providers/openai-provider.d.ts.map +0 -1
- package/dist/ai/providers/openai-provider.js +0 -84
- package/dist/ai/providers/openai-provider.js.map +0 -1
- package/dist/ai/schemas/ai-response-schemas.d.ts +0 -340
- package/dist/ai/schemas/ai-response-schemas.d.ts.map +0 -1
- package/dist/ai/schemas/ai-response-schemas.js +0 -278
- package/dist/ai/schemas/ai-response-schemas.js.map +0 -1
- package/dist/ai/types.d.ts +0 -76
- package/dist/ai/types.d.ts.map +0 -1
- package/dist/ai/types.js +0 -49
- package/dist/ai/types.js.map +0 -1
- package/dist/ai/validation/index.d.ts +0 -2
- package/dist/ai/validation/index.d.ts.map +0 -1
- package/dist/ai/validation/index.js +0 -2
- package/dist/ai/validation/index.js.map +0 -1
- package/dist/ai/validation/task-validator.d.ts +0 -37
- package/dist/ai/validation/task-validator.d.ts.map +0 -1
- package/dist/ai/validation/task-validator.js +0 -81
- package/dist/ai/validation/task-validator.js.map +0 -1
- package/dist/cli/commands/config.d.ts +0 -8
- package/dist/cli/commands/config.d.ts.map +0 -1
- package/dist/cli/commands/config.js +0 -224
- package/dist/cli/commands/config.js.map +0 -1
- package/dist/cli/commands/estimate.d.ts +0 -3
- package/dist/cli/commands/estimate.d.ts.map +0 -1
- package/dist/cli/commands/estimate.js +0 -368
- package/dist/cli/commands/estimate.js.map +0 -1
- package/dist/cli/commands/init.d.ts +0 -9
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -166
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/pipeline.d.ts +0 -3
- package/dist/cli/commands/pipeline.d.ts.map +0 -1
- package/dist/cli/commands/pipeline.js +0 -59
- package/dist/cli/commands/pipeline.js.map +0 -1
- package/dist/cli/commands/plan.d.ts +0 -15
- package/dist/cli/commands/plan.d.ts.map +0 -1
- package/dist/cli/commands/plan.js +0 -444
- package/dist/cli/commands/plan.js.map +0 -1
- package/dist/cli/commands/refine.d.ts +0 -10
- package/dist/cli/commands/refine.d.ts.map +0 -1
- package/dist/cli/commands/refine.js +0 -226
- package/dist/cli/commands/refine.js.map +0 -1
- package/dist/cli/commands/revise.d.ts +0 -24
- package/dist/cli/commands/revise.d.ts.map +0 -1
- package/dist/cli/commands/revise.js +0 -572
- package/dist/cli/commands/revise.js.map +0 -1
- package/dist/cli/helpers/task-creation.d.ts +0 -89
- package/dist/cli/helpers/task-creation.d.ts.map +0 -1
- package/dist/cli/helpers/task-creation.js +0 -139
- package/dist/cli/helpers/task-creation.js.map +0 -1
- package/dist/services/ai-service.d.ts +0 -77
- package/dist/services/ai-service.d.ts.map +0 -1
- package/dist/services/ai-service.js +0 -241
- package/dist/services/ai-service.js.map +0 -1
- package/dist/services/artifact-gathering.d.ts +0 -55
- package/dist/services/artifact-gathering.d.ts.map +0 -1
- package/dist/services/artifact-gathering.js +0 -147
- package/dist/services/artifact-gathering.js.map +0 -1
- package/dist/services/operate/advisors.d.ts +0 -625
- package/dist/services/operate/advisors.d.ts.map +0 -1
- package/dist/services/operate/advisors.js +0 -1545
- package/dist/services/operate/advisors.js.map +0 -1
- package/dist/services/operate/artifact-route-generation.d.ts +0 -111
- package/dist/services/operate/artifact-route-generation.d.ts.map +0 -1
- package/dist/services/operate/artifact-route-generation.js +0 -460
- package/dist/services/operate/artifact-route-generation.js.map +0 -1
- package/dist/services/operate/artifacts.d.ts +0 -66
- package/dist/services/operate/artifacts.d.ts.map +0 -1
- package/dist/services/operate/artifacts.js +0 -336
- package/dist/services/operate/artifacts.js.map +0 -1
- package/dist/services/operate/cadence.d.ts +0 -50
- package/dist/services/operate/cadence.d.ts.map +0 -1
- package/dist/services/operate/cadence.js +0 -56
- package/dist/services/operate/cadence.js.map +0 -1
- package/dist/services/operate/canonical.d.ts +0 -18
- package/dist/services/operate/canonical.d.ts.map +0 -1
- package/dist/services/operate/canonical.js +0 -157
- package/dist/services/operate/canonical.js.map +0 -1
- package/dist/services/operate/citation-resolution.d.ts +0 -161
- package/dist/services/operate/citation-resolution.d.ts.map +0 -1
- package/dist/services/operate/citation-resolution.js +0 -593
- package/dist/services/operate/citation-resolution.js.map +0 -1
- package/dist/services/operate/completion.d.ts +0 -80
- package/dist/services/operate/completion.d.ts.map +0 -1
- package/dist/services/operate/completion.js +0 -279
- package/dist/services/operate/completion.js.map +0 -1
- package/dist/services/operate/config.d.ts +0 -154
- package/dist/services/operate/config.d.ts.map +0 -1
- package/dist/services/operate/config.js +0 -791
- package/dist/services/operate/config.js.map +0 -1
- package/dist/services/operate/consolidation.d.ts +0 -18
- package/dist/services/operate/consolidation.d.ts.map +0 -1
- package/dist/services/operate/consolidation.js +0 -539
- package/dist/services/operate/consolidation.js.map +0 -1
- package/dist/services/operate/context-research.d.ts +0 -84
- package/dist/services/operate/context-research.d.ts.map +0 -1
- package/dist/services/operate/context-research.js +0 -448
- package/dist/services/operate/context-research.js.map +0 -1
- package/dist/services/operate/decision-brief.d.ts +0 -237
- package/dist/services/operate/decision-brief.d.ts.map +0 -1
- package/dist/services/operate/decision-brief.js +0 -368
- package/dist/services/operate/decision-brief.js.map +0 -1
- package/dist/services/operate/doctor.d.ts +0 -85
- package/dist/services/operate/doctor.d.ts.map +0 -1
- package/dist/services/operate/doctor.js +0 -1070
- package/dist/services/operate/doctor.js.map +0 -1
- package/dist/services/operate/drafts.d.ts +0 -48
- package/dist/services/operate/drafts.d.ts.map +0 -1
- package/dist/services/operate/drafts.js +0 -398
- package/dist/services/operate/drafts.js.map +0 -1
- package/dist/services/operate/engine.d.ts +0 -151
- package/dist/services/operate/engine.d.ts.map +0 -1
- package/dist/services/operate/engine.js +0 -1896
- package/dist/services/operate/engine.js.map +0 -1
- package/dist/services/operate/event-store.d.ts +0 -113
- package/dist/services/operate/event-store.d.ts.map +0 -1
- package/dist/services/operate/event-store.js +0 -384
- package/dist/services/operate/event-store.js.map +0 -1
- package/dist/services/operate/evidence-cache.d.ts +0 -41
- package/dist/services/operate/evidence-cache.d.ts.map +0 -1
- package/dist/services/operate/evidence-cache.js +0 -193
- package/dist/services/operate/evidence-cache.js.map +0 -1
- package/dist/services/operate/evidence-import.d.ts +0 -40
- package/dist/services/operate/evidence-import.d.ts.map +0 -1
- package/dist/services/operate/evidence-import.js +0 -340
- package/dist/services/operate/evidence-import.js.map +0 -1
- package/dist/services/operate/evidence.d.ts +0 -21
- package/dist/services/operate/evidence.d.ts.map +0 -1
- package/dist/services/operate/evidence.js +0 -20
- package/dist/services/operate/evidence.js.map +0 -1
- package/dist/services/operate/ids.d.ts +0 -7
- package/dist/services/operate/ids.d.ts.map +0 -1
- package/dist/services/operate/ids.js +0 -23
- package/dist/services/operate/ids.js.map +0 -1
- package/dist/services/operate/index.d.ts +0 -16
- package/dist/services/operate/index.d.ts.map +0 -1
- package/dist/services/operate/index.js +0 -1864
- package/dist/services/operate/index.js.map +0 -1
- package/dist/services/operate/integrity.d.ts +0 -81
- package/dist/services/operate/integrity.d.ts.map +0 -1
- package/dist/services/operate/integrity.js +0 -152
- package/dist/services/operate/integrity.js.map +0 -1
- package/dist/services/operate/interaction/action-service.d.ts +0 -34
- package/dist/services/operate/interaction/action-service.d.ts.map +0 -1
- package/dist/services/operate/interaction/action-service.js +0 -103
- package/dist/services/operate/interaction/action-service.js.map +0 -1
- package/dist/services/operate/interaction/answer-service.d.ts +0 -40
- package/dist/services/operate/interaction/answer-service.d.ts.map +0 -1
- package/dist/services/operate/interaction/answer-service.js +0 -317
- package/dist/services/operate/interaction/answer-service.js.map +0 -1
- package/dist/services/operate/interaction/charter-suggestions.d.ts +0 -29
- package/dist/services/operate/interaction/charter-suggestions.d.ts.map +0 -1
- package/dist/services/operate/interaction/charter-suggestions.js +0 -104
- package/dist/services/operate/interaction/charter-suggestions.js.map +0 -1
- package/dist/services/operate/interaction/confirmation-service.d.ts +0 -30
- package/dist/services/operate/interaction/confirmation-service.d.ts.map +0 -1
- package/dist/services/operate/interaction/confirmation-service.js +0 -78
- package/dist/services/operate/interaction/confirmation-service.js.map +0 -1
- package/dist/services/operate/interaction/initialization-replay.d.ts +0 -9
- package/dist/services/operate/interaction/initialization-replay.d.ts.map +0 -1
- package/dist/services/operate/interaction/initialization-replay.js +0 -64
- package/dist/services/operate/interaction/initialization-replay.js.map +0 -1
- package/dist/services/operate/interaction/question-engine.d.ts +0 -41
- package/dist/services/operate/interaction/question-engine.d.ts.map +0 -1
- package/dist/services/operate/interaction/question-engine.js +0 -434
- package/dist/services/operate/interaction/question-engine.js.map +0 -1
- package/dist/services/operate/interaction/question-registry.d.ts +0 -52
- package/dist/services/operate/interaction/question-registry.d.ts.map +0 -1
- package/dist/services/operate/interaction/question-registry.js +0 -305
- package/dist/services/operate/interaction/question-registry.js.map +0 -1
- package/dist/services/operate/interaction/session-service.d.ts +0 -55
- package/dist/services/operate/interaction/session-service.d.ts.map +0 -1
- package/dist/services/operate/interaction/session-service.js +0 -304
- package/dist/services/operate/interaction/session-service.js.map +0 -1
- package/dist/services/operate/interaction/terminal-renderer.d.ts +0 -19
- package/dist/services/operate/interaction/terminal-renderer.d.ts.map +0 -1
- package/dist/services/operate/interaction/terminal-renderer.js +0 -124
- package/dist/services/operate/interaction/terminal-renderer.js.map +0 -1
- package/dist/services/operate/journal.d.ts +0 -34
- package/dist/services/operate/journal.d.ts.map +0 -1
- package/dist/services/operate/journal.js +0 -235
- package/dist/services/operate/journal.js.map +0 -1
- package/dist/services/operate/legacy-import-service.d.ts +0 -58
- package/dist/services/operate/legacy-import-service.d.ts.map +0 -1
- package/dist/services/operate/legacy-import-service.js +0 -922
- package/dist/services/operate/legacy-import-service.js.map +0 -1
- package/dist/services/operate/lifecycle-driver.d.ts +0 -309
- package/dist/services/operate/lifecycle-driver.d.ts.map +0 -1
- package/dist/services/operate/lifecycle-driver.js +0 -434
- package/dist/services/operate/lifecycle-driver.js.map +0 -1
- package/dist/services/operate/lifecycle.d.ts +0 -96
- package/dist/services/operate/lifecycle.d.ts.map +0 -1
- package/dist/services/operate/lifecycle.js +0 -596
- package/dist/services/operate/lifecycle.js.map +0 -1
- package/dist/services/operate/lock-service.d.ts +0 -37
- package/dist/services/operate/lock-service.d.ts.map +0 -1
- package/dist/services/operate/lock-service.js +0 -215
- package/dist/services/operate/lock-service.js.map +0 -1
- package/dist/services/operate/maintenance.d.ts +0 -139
- package/dist/services/operate/maintenance.d.ts.map +0 -1
- package/dist/services/operate/maintenance.js +0 -2200
- package/dist/services/operate/maintenance.js.map +0 -1
- package/dist/services/operate/migration.d.ts +0 -68
- package/dist/services/operate/migration.d.ts.map +0 -1
- package/dist/services/operate/migration.js +0 -243
- package/dist/services/operate/migration.js.map +0 -1
- package/dist/services/operate/mission-dispatch.d.ts +0 -271
- package/dist/services/operate/mission-dispatch.d.ts.map +0 -1
- package/dist/services/operate/mission-dispatch.js +0 -590
- package/dist/services/operate/mission-dispatch.js.map +0 -1
- package/dist/services/operate/outcomes.d.ts +0 -48
- package/dist/services/operate/outcomes.d.ts.map +0 -1
- package/dist/services/operate/outcomes.js +0 -312
- package/dist/services/operate/outcomes.js.map +0 -1
- package/dist/services/operate/pipeline-handoff.d.ts +0 -138
- package/dist/services/operate/pipeline-handoff.d.ts.map +0 -1
- package/dist/services/operate/pipeline-handoff.js +0 -175
- package/dist/services/operate/pipeline-handoff.js.map +0 -1
- package/dist/services/operate/profile-migration.d.ts +0 -69
- package/dist/services/operate/profile-migration.d.ts.map +0 -1
- package/dist/services/operate/profile-migration.js +0 -462
- package/dist/services/operate/profile-migration.js.map +0 -1
- package/dist/services/operate/projection-persistence.d.ts +0 -126
- package/dist/services/operate/projection-persistence.d.ts.map +0 -1
- package/dist/services/operate/projection-persistence.js +0 -752
- package/dist/services/operate/projection-persistence.js.map +0 -1
- package/dist/services/operate/projection.d.ts +0 -37
- package/dist/services/operate/projection.d.ts.map +0 -1
- package/dist/services/operate/projection.js +0 -209
- package/dist/services/operate/projection.js.map +0 -1
- package/dist/services/operate/protocol.d.ts +0 -86
- package/dist/services/operate/protocol.d.ts.map +0 -1
- package/dist/services/operate/protocol.js +0 -76
- package/dist/services/operate/protocol.js.map +0 -1
- package/dist/services/operate/read-only-providers.d.ts +0 -76
- package/dist/services/operate/read-only-providers.d.ts.map +0 -1
- package/dist/services/operate/read-only-providers.js +0 -421
- package/dist/services/operate/read-only-providers.js.map +0 -1
- package/dist/services/operate/redaction.d.ts +0 -74
- package/dist/services/operate/redaction.d.ts.map +0 -1
- package/dist/services/operate/redaction.js +0 -406
- package/dist/services/operate/redaction.js.map +0 -1
- package/dist/services/operate/reducer.d.ts +0 -10
- package/dist/services/operate/reducer.d.ts.map +0 -1
- package/dist/services/operate/reducer.js +0 -11
- package/dist/services/operate/reducer.js.map +0 -1
- package/dist/services/operate/report-html.d.ts +0 -32
- package/dist/services/operate/report-html.d.ts.map +0 -1
- package/dist/services/operate/report-html.js +0 -289
- package/dist/services/operate/report-html.js.map +0 -1
- package/dist/services/operate/reports.d.ts +0 -72
- package/dist/services/operate/reports.d.ts.map +0 -1
- package/dist/services/operate/reports.js +0 -481
- package/dist/services/operate/reports.js.map +0 -1
- package/dist/services/operate/routes.d.ts +0 -133
- package/dist/services/operate/routes.d.ts.map +0 -1
- package/dist/services/operate/routes.js +0 -1577
- package/dist/services/operate/routes.js.map +0 -1
- package/dist/services/operate/scratch.d.ts +0 -81
- package/dist/services/operate/scratch.d.ts.map +0 -1
- package/dist/services/operate/scratch.js +0 -190
- package/dist/services/operate/scratch.js.map +0 -1
- package/dist/services/operate/shipment-observer.d.ts +0 -14
- package/dist/services/operate/shipment-observer.d.ts.map +0 -1
- package/dist/services/operate/shipment-observer.js +0 -320
- package/dist/services/operate/shipment-observer.js.map +0 -1
- package/dist/services/operate/stalled-item-service.d.ts +0 -18
- package/dist/services/operate/stalled-item-service.d.ts.map +0 -1
- package/dist/services/operate/stalled-item-service.js +0 -121
- package/dist/services/operate/stalled-item-service.js.map +0 -1
- package/dist/services/operate/subprocess-env.d.ts +0 -4
- package/dist/services/operate/subprocess-env.d.ts.map +0 -1
- package/dist/services/operate/subprocess-env.js +0 -45
- package/dist/services/operate/subprocess-env.js.map +0 -1
- package/dist/services/operate/types.d.ts +0 -1064
- package/dist/services/operate/types.d.ts.map +0 -1
- package/dist/services/operate/types.js +0 -27
- package/dist/services/operate/types.js.map +0 -1
- package/dist/services/operate/workspace.d.ts +0 -76
- package/dist/services/operate/workspace.d.ts.map +0 -1
- package/dist/services/operate/workspace.js +0 -350
- package/dist/services/operate/workspace.js.map +0 -1
- package/dist/services/revise-service.d.ts +0 -115
- package/dist/services/revise-service.d.ts.map +0 -1
- package/dist/services/revise-service.js +0 -294
- package/dist/services/revise-service.js.map +0 -1
- package/dist/templates/rules/claude/planr-pipeline.md.hbs +0 -69
- package/dist/templates/rules/codex/_pipeline-section.md.hbs +0 -154
- package/dist/templates/rules/cursor/agents/backend-agent.md +0 -299
- package/dist/templates/rules/cursor/agents/db-agent.md +0 -163
- package/dist/templates/rules/cursor/agents/designer-agent.md +0 -219
- package/dist/templates/rules/cursor/agents/devops-agent.md +0 -197
- package/dist/templates/rules/cursor/agents/doc-gen-agent.md +0 -203
- package/dist/templates/rules/cursor/agents/frontend-agent.md +0 -220
- package/dist/templates/rules/cursor/agents/qa-agent.md +0 -170
- package/dist/templates/rules/cursor/agents/specification-agent.md +0 -282
- package/dist/templates/rules/cursor/planr-pipeline-plan.mdc.hbs +0 -196
- package/dist/templates/rules/cursor/planr-pipeline-ship.mdc.hbs +0 -246
- package/dist/templates/rules/cursor/planr-pipeline.mdc.hbs +0 -134
|
@@ -1,1896 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { mkdir, readFile } from 'node:fs/promises';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { OPENPLANR_VERSION } from '../../utils/package-version.js';
|
|
5
|
-
import { loadConfig } from '../config-service.js';
|
|
6
|
-
import { advisorFailureGaps, buildAdvisorOperatingContext, configuredAdvisorProviderPolicy, createConfiguredStructuredAdapter, createOfflineAdvisorAdapter, DEFAULT_OPERATING_DISPATCH_CONCURRENCY, dispatchOperatingAdvisors, ensureOperatingProviderConsent, } from './advisors.js';
|
|
7
|
-
import { recordOperatingCadenceRun } from './cadence.js';
|
|
8
|
-
import { canonicalDigest, canonicalize } from './canonical.js';
|
|
9
|
-
import { citationComponentsFromWorkspace, } from './citation-resolution.js';
|
|
10
|
-
import { operatingProjectKey, validateOperatingConfiguration } from './config.js';
|
|
11
|
-
import { consolidateOperatingResults } from './consolidation.js';
|
|
12
|
-
import { chairBoardGapLines, classifyChairRoleContributions, } from './decision-brief.js';
|
|
13
|
-
import { OperatingEventStore, toPersistedDataGap, } from './event-store.js';
|
|
14
|
-
import { evidenceProjectionSources } from './evidence.js';
|
|
15
|
-
import { OperatingEvidenceCache } from './evidence-cache.js';
|
|
16
|
-
import { nextCycleId } from './ids.js';
|
|
17
|
-
import { buildOperatingIntegritySummary, } from './integrity.js';
|
|
18
|
-
import { enforceRecordedProposalCitations } from './interaction/action-service.js';
|
|
19
|
-
import { applyJournalTransaction, prepareJournalTransaction, readJournal, rollbackJournalTransaction, } from './journal.js';
|
|
20
|
-
import { reconcileOperatingDecisionDeadlines } from './lifecycle.js';
|
|
21
|
-
import { AdvisorLifecycleDriver, } from './lifecycle-driver.js';
|
|
22
|
-
import { withOperatingLock } from './lock-service.js';
|
|
23
|
-
import { reconcileOperatingOutcomeFiles } from './outcomes.js';
|
|
24
|
-
import { persistOperatingProjections } from './projection-persistence.js';
|
|
25
|
-
import { assertOperatingArtifact, loadOperatingProtocol } from './protocol.js';
|
|
26
|
-
import { maximumSensitivity } from './redaction.js';
|
|
27
|
-
import { createOperatingRoutePlan, nextOperatingSpecOrdinal } from './routes.js';
|
|
28
|
-
import { OPERATE_MISSION_PROTOCOL_VERSION, OPERATE_PROTOCOL_VERSION, OPERATE_SCHEMA_VERSION, OperateError, } from './types.js';
|
|
29
|
-
import { assertOperatingProject, readOperatingWorkspaceRoots, refreshOperatingWorkspaceManifest, resolveOperatingPaths, } from './workspace.js';
|
|
30
|
-
function normalizeFocus(focus) {
|
|
31
|
-
const supported = new Set(['strategy', 'product', 'growth', 'operations', 'technology', 'all']);
|
|
32
|
-
const normalized = [...new Set((focus ?? []).map(String))]
|
|
33
|
-
.filter((value) => supported.has(value))
|
|
34
|
-
.sort();
|
|
35
|
-
return normalized.length > 0 ? normalized : ['all'];
|
|
36
|
-
}
|
|
37
|
-
function loadJson(target) {
|
|
38
|
-
return readFile(target, 'utf8').then((raw) => JSON.parse(raw));
|
|
39
|
-
}
|
|
40
|
-
async function snapshotWorkspace(projectRoot, localRoot) {
|
|
41
|
-
return refreshOperatingWorkspaceManifest(projectRoot, { localRoot });
|
|
42
|
-
}
|
|
43
|
-
async function readPreferences(projectRoot, localRoot) {
|
|
44
|
-
const paths = resolveOperatingPaths(projectRoot, { localRoot });
|
|
45
|
-
return loadJson(path.join(paths.localRoot, 'preferences.json')).catch(() => ({
|
|
46
|
-
runtime: 'auto',
|
|
47
|
-
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
48
|
-
sensitivityCeiling: 'internal',
|
|
49
|
-
evidenceTtlMs: 7 * 24 * 60 * 60 * 1_000,
|
|
50
|
-
enabledSources: [],
|
|
51
|
-
}));
|
|
52
|
-
}
|
|
53
|
-
function activeCycle(state) {
|
|
54
|
-
return (state.cycles.find((cycle) => !['closed', 'cancelled', 'failed'].includes(cycle.state)) ?? null);
|
|
55
|
-
}
|
|
56
|
-
function maximumOrdinal(records, prefix) {
|
|
57
|
-
return records.reduce((maximum, record) => {
|
|
58
|
-
const match = String(record.id ?? '').match(new RegExp(`^${prefix}-(\\d+)$`));
|
|
59
|
-
return Math.max(maximum, match ? Number(match[1]) : 0);
|
|
60
|
-
}, 0);
|
|
61
|
-
}
|
|
62
|
-
async function remapReadinessGaps(readiness, state) {
|
|
63
|
-
let ordinal = maximumOrdinal(state.dataGaps, 'GAP');
|
|
64
|
-
const remapped = {
|
|
65
|
-
...readiness,
|
|
66
|
-
roles: readiness.roles.map((role) => ({
|
|
67
|
-
...role,
|
|
68
|
-
gapId: role.gapId
|
|
69
|
-
? (state.dataGaps.find((gap) => gap.cycleId === readiness.cycleId &&
|
|
70
|
-
!['closed', 'superseded'].includes(String(gap.status)) &&
|
|
71
|
-
Array.isArray(gap.affectedRoles) &&
|
|
72
|
-
gap.affectedRoles.includes(role.roleId))?.id ?? `GAP-${String(++ordinal).padStart(3, '0')}`)
|
|
73
|
-
: null,
|
|
74
|
-
})),
|
|
75
|
-
};
|
|
76
|
-
return assertOperatingArtifact('operating-evidence-readiness', remapped);
|
|
77
|
-
}
|
|
78
|
-
function readinessGaps(readiness, decisionOwner, now) {
|
|
79
|
-
return readiness.roles
|
|
80
|
-
.filter((role) => role.gapId)
|
|
81
|
-
.map((role) => ({
|
|
82
|
-
kind: 'operating-data-gap',
|
|
83
|
-
schemaVersion: OPERATE_SCHEMA_VERSION,
|
|
84
|
-
protocolVersion: OPERATE_PROTOCOL_VERSION,
|
|
85
|
-
id: role.gapId,
|
|
86
|
-
cycleId: readiness.cycleId,
|
|
87
|
-
question: `What evidence is required for ${role.roleId}?`,
|
|
88
|
-
reason: role.missingEvidence.join('; ') || 'Minimum evidence was not available.',
|
|
89
|
-
unblocks: [],
|
|
90
|
-
affectedRoles: [role.roleId],
|
|
91
|
-
status: 'open',
|
|
92
|
-
owner: decisionOwner,
|
|
93
|
-
evidenceRefs: [...role.evidenceRefs],
|
|
94
|
-
createdAt: now,
|
|
95
|
-
updatedAt: now,
|
|
96
|
-
}));
|
|
97
|
-
}
|
|
98
|
-
// Retained callerless: this fed the collector's `requiredEvidenceRefs` input,
|
|
99
|
-
// which the pinned-revision seed no longer takes. The collector and its dedicated
|
|
100
|
-
// feeders are retired wholesale in T-009; nothing is deleted here.
|
|
101
|
-
// biome-ignore lint/correctness/noUnusedVariables: retained pending collector retirement (T-009)
|
|
102
|
-
function requiredOpenEvidenceRefs(state) {
|
|
103
|
-
const records = [
|
|
104
|
-
...state.findings.filter((finding) => !['done', 'rejected', 'superseded'].includes(String(finding.status))),
|
|
105
|
-
...state.decisions.filter((decision) => !['closed', 'superseded'].includes(String(decision.status))),
|
|
106
|
-
...state.outcomes.filter((outcome) => ['pending', 'observing', 'inconclusive'].includes(String(outcome.status))),
|
|
107
|
-
];
|
|
108
|
-
return [
|
|
109
|
-
...new Set(records.flatMap((record) => Array.isArray(record.evidenceRefs)
|
|
110
|
-
? record.evidenceRefs.filter((reference) => typeof reference === 'string')
|
|
111
|
-
: [])),
|
|
112
|
-
].sort();
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* The Chair's grounded input assembled from the board (FR13). Each recorded role
|
|
116
|
-
* contributes its real analysis as synthetic advisor-result evidence, labelled
|
|
117
|
-
* with its six-way outcome. Citation-rejected proposals are EXCLUDED from the
|
|
118
|
-
* grounded input (never silently dropped — they are named in the gap list), so a
|
|
119
|
-
* proposal Chair could not have grounded can never reach its synthesis. Roles
|
|
120
|
-
* with no valid analysis (not-evaluated, failed, still-running, all-rejected)
|
|
121
|
-
* contribute no proposal item: their absence is surfaced as a gap, never as a
|
|
122
|
-
* fabricated conclusion.
|
|
123
|
-
*/
|
|
124
|
-
export function buildChairEvidence(evidence, results, now, context = {}) {
|
|
125
|
-
const contributions = classifyChairRoleContributions(results, context);
|
|
126
|
-
const outcomeByRole = new Map(contributions.map((entry) => [entry.roleId, entry.outcome]));
|
|
127
|
-
const excludedByRole = new Map(contributions.map((entry) => [entry.roleId, new Set(entry.excludedProposalKeys)]));
|
|
128
|
-
const evidenceById = new Map(evidence.items.map((item) => [item.id, item]));
|
|
129
|
-
const synthetic = results.flatMap((result) => {
|
|
130
|
-
const excluded = excludedByRole.get(result.roleId) ?? new Set();
|
|
131
|
-
// Grounded proposals only: a citation-rejected proposal is excluded here so it
|
|
132
|
-
// never becomes Chair-citable evidence, while `chairBoardGapLines` names it.
|
|
133
|
-
const groundedProposals = result.proposals.filter((proposal) => !excluded.has(proposal.proposalKey));
|
|
134
|
-
const evidenceRefs = [
|
|
135
|
-
...new Set(groundedProposals.flatMap((proposal) => proposal.evidenceRefs)),
|
|
136
|
-
].sort();
|
|
137
|
-
const missingRefs = evidenceRefs.filter((reference) => !evidenceById.has(reference));
|
|
138
|
-
if (missingRefs.length > 0) {
|
|
139
|
-
throw new OperateError('E_OPERATE_EVIDENCE_REJECTED', `${result.roleId} advisor result cites unavailable evidence: ${missingRefs.join(', ')}.`);
|
|
140
|
-
}
|
|
141
|
-
const sensitivity = maximumSensitivity([
|
|
142
|
-
'internal',
|
|
143
|
-
...evidenceRefs.map((reference) => evidenceById.get(reference)?.sensitivity ?? 'public'),
|
|
144
|
-
]);
|
|
145
|
-
const bodies = [
|
|
146
|
-
{
|
|
147
|
-
id: `EVD-advisor-results-${result.roleId}-context`,
|
|
148
|
-
location: `${result.roleId}/context`,
|
|
149
|
-
body: {
|
|
150
|
-
roleId: result.roleId,
|
|
151
|
-
outcome: outcomeByRole.get(result.roleId) ?? result.outcome,
|
|
152
|
-
gaps: [...new Set(result.gaps)].sort(),
|
|
153
|
-
conflicts: [...new Set(result.conflicts)].sort(),
|
|
154
|
-
...(excluded.size > 0 ? { citationRejectedProposals: [...excluded].sort() } : {}),
|
|
155
|
-
},
|
|
156
|
-
},
|
|
157
|
-
...groundedProposals.map((proposal) => ({
|
|
158
|
-
id: `EVD-advisor-results-${result.roleId}-${proposal.proposalKey}`,
|
|
159
|
-
location: `${result.roleId}/proposals/${proposal.proposalKey}`,
|
|
160
|
-
body: {
|
|
161
|
-
roleId: result.roleId,
|
|
162
|
-
proposal: structuredClone(proposal),
|
|
163
|
-
},
|
|
164
|
-
})),
|
|
165
|
-
];
|
|
166
|
-
return bodies.map(({ id, location, body }) => ({
|
|
167
|
-
id,
|
|
168
|
-
source: 'advisor-results',
|
|
169
|
-
location,
|
|
170
|
-
digest: canonicalDigest(body),
|
|
171
|
-
collectedAt: now,
|
|
172
|
-
observedFrom: now,
|
|
173
|
-
observedTo: now,
|
|
174
|
-
freshness: 'fresh',
|
|
175
|
-
sensitivity,
|
|
176
|
-
claimTypes: ['verified-advisor-result'],
|
|
177
|
-
summary: canonicalize(body),
|
|
178
|
-
}));
|
|
179
|
-
});
|
|
180
|
-
return {
|
|
181
|
-
...evidence,
|
|
182
|
-
items: [...evidence.items, ...synthetic],
|
|
183
|
-
fingerprint: canonicalDigest({
|
|
184
|
-
source: evidence.fingerprint,
|
|
185
|
-
advisors: synthetic
|
|
186
|
-
.map(({ id, digest, sensitivity }) => ({ id, digest, sensitivity }))
|
|
187
|
-
.sort((left, right) => left.id.localeCompare(right.id)),
|
|
188
|
-
}),
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Assemble the Chair's input from a possibly-partial board (FR13). This is the
|
|
193
|
-
* single entry point that ties the grounded evidence to the honest per-role
|
|
194
|
-
* ledger and the named-gap list: one missing perspective can never destroy an
|
|
195
|
-
* otherwise-useful board, and the Chair is handed a structural record of what did
|
|
196
|
-
* NOT evaluate rather than a silent absence it might synthesize around.
|
|
197
|
-
*/
|
|
198
|
-
export function assembleChairBoardInput(evidence, results, now, context = {}) {
|
|
199
|
-
const contributions = classifyChairRoleContributions(results, context);
|
|
200
|
-
return {
|
|
201
|
-
evidence: buildChairEvidence(evidence, results, now, context),
|
|
202
|
-
contributions,
|
|
203
|
-
gaps: chairBoardGapLines(contributions),
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* FR1/FR2 (isolation rebind): the cycle's pinned-revision evidence seed. Evidence
|
|
208
|
-
* is an OUTPUT now, so a fresh cycle no longer collects a body-bearing snapshot
|
|
209
|
-
* before anyone has investigated; it seeds an empty evidence-of-record whose
|
|
210
|
-
* fingerprint binds the cycle to its control-repository pinned revision. This
|
|
211
|
-
* seed is what the adapter isolation binds to (`persistedAdapterEvidence`'s
|
|
212
|
-
* fingerprint === the prepared session's `evidenceDigest`), so a tampered or
|
|
213
|
-
* revision-mismatched session still fails closed with `E_OPERATE_ADVISOR_ISOLATION`
|
|
214
|
-
* — the guarantee is preserved, only its input is the pinned revision rather than
|
|
215
|
-
* a collected-evidence digest. Nothing is guessed, budgeted, or packed.
|
|
216
|
-
*/
|
|
217
|
-
async function buildPinnedRevisionEvidenceSeed(input) {
|
|
218
|
-
return assertOperatingArtifact('operating-evidence', {
|
|
219
|
-
kind: 'operating-evidence',
|
|
220
|
-
schemaVersion: OPERATE_SCHEMA_VERSION,
|
|
221
|
-
protocolVersion: OPERATE_PROTOCOL_VERSION,
|
|
222
|
-
cycleId: input.cycleId,
|
|
223
|
-
fingerprint: canonicalDigest({
|
|
224
|
-
cycleId: input.cycleId,
|
|
225
|
-
pinnedRevision: input.pinnedRevision,
|
|
226
|
-
}),
|
|
227
|
-
collectedAt: input.collectedAt,
|
|
228
|
-
truncated: false,
|
|
229
|
-
items: [],
|
|
230
|
-
sources: [],
|
|
231
|
-
warnings: [],
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* FR2: dispatch is no longer pre-gated on collected evidence — every enabled role
|
|
236
|
-
* is dispatched with a mandate and post-gated on what its response actually cites.
|
|
237
|
-
* This builds the "all roles runnable" readiness the dispatch consumes, replacing
|
|
238
|
-
* the collector-era evidence-readiness evaluation.
|
|
239
|
-
*/
|
|
240
|
-
async function buildDispatchReadiness(input) {
|
|
241
|
-
const hasPinnedRevision = !/^0+$/.test(input.pinnedRevision);
|
|
242
|
-
return assertOperatingArtifact('operating-evidence-readiness', {
|
|
243
|
-
kind: 'operating-evidence-readiness',
|
|
244
|
-
schemaVersion: OPERATE_SCHEMA_VERSION,
|
|
245
|
-
protocolVersion: OPERATE_PROTOCOL_VERSION,
|
|
246
|
-
cycleId: input.cycleId,
|
|
247
|
-
inputDigest: canonicalDigest({ cycleId: input.cycleId, roles: [...input.roles].sort() }),
|
|
248
|
-
evaluatedAt: input.now.toISOString(),
|
|
249
|
-
roles: input.roles.map((roleId, index) => ({
|
|
250
|
-
roleId,
|
|
251
|
-
readiness: 'ready',
|
|
252
|
-
requirements: [
|
|
253
|
-
{
|
|
254
|
-
source: 'mandate',
|
|
255
|
-
claimTypes: ['resolvable-citation-required'],
|
|
256
|
-
minimumItems: 1,
|
|
257
|
-
observedItems: hasPinnedRevision ? 1 : 0,
|
|
258
|
-
maxAgeHours: 8760,
|
|
259
|
-
oldestAgeHours: hasPinnedRevision ? 0 : null,
|
|
260
|
-
observationWindow: 'current-cycle',
|
|
261
|
-
sensitivityCeiling: input.sensitivityCeiling,
|
|
262
|
-
satisfied: hasPinnedRevision,
|
|
263
|
-
},
|
|
264
|
-
],
|
|
265
|
-
missingEvidence: hasPinnedRevision
|
|
266
|
-
? []
|
|
267
|
-
: ['mandate:resolvable-citation-required (0/1; no pinned revision)'],
|
|
268
|
-
evidenceRefs: [],
|
|
269
|
-
modelCallAllowed: hasPinnedRevision,
|
|
270
|
-
gapId: hasPinnedRevision ? null : `GAP-${String(index + 1).padStart(3, '0')}`,
|
|
271
|
-
})),
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* FR2 (evidence-as-output): assemble the cycle's evidence-of-record for
|
|
276
|
-
* consolidation from the resolved-citation snapshots the universal gate minted.
|
|
277
|
-
* Every evidenceRef a gated proposal carries was snapshotted to machine-local
|
|
278
|
-
* evidence (`putCitationSnapshot`); this reads each back (`getCitationSnapshot`)
|
|
279
|
-
* so downstream confidence/sensitivity/freshness scoring resolves against what
|
|
280
|
-
* was actually cited and verified rather than a pre-collected guess. A ref whose
|
|
281
|
-
* snapshot is unreadable still materializes a minimal item so consolidation never
|
|
282
|
-
* rejects a legitimately-minted reference.
|
|
283
|
-
*/
|
|
284
|
-
async function assembleCitationEvidence(input) {
|
|
285
|
-
const refs = [
|
|
286
|
-
...new Set(input.roleResults.flatMap((result) => result.proposals.flatMap((proposal) => proposal.evidenceRefs))),
|
|
287
|
-
].sort();
|
|
288
|
-
const items = [];
|
|
289
|
-
for (const ref of refs) {
|
|
290
|
-
const snapshot = await input.cache.getCitationSnapshot(ref);
|
|
291
|
-
items.push({
|
|
292
|
-
id: ref,
|
|
293
|
-
source: 'citation',
|
|
294
|
-
location: snapshot?.sourceLocation ?? ref,
|
|
295
|
-
digest: canonicalDigest(snapshot?.content ?? ref),
|
|
296
|
-
collectedAt: input.now,
|
|
297
|
-
observedFrom: null,
|
|
298
|
-
observedTo: null,
|
|
299
|
-
freshness: 'fresh',
|
|
300
|
-
sensitivity: snapshot?.sensitivity ?? 'internal',
|
|
301
|
-
claimTypes: ['verified-citation'],
|
|
302
|
-
...(snapshot ? { summary: snapshot.content.slice(0, 512) } : {}),
|
|
303
|
-
});
|
|
304
|
-
}
|
|
305
|
-
return assertOperatingArtifact('operating-evidence', {
|
|
306
|
-
kind: 'operating-evidence',
|
|
307
|
-
schemaVersion: OPERATE_SCHEMA_VERSION,
|
|
308
|
-
protocolVersion: OPERATE_PROTOCOL_VERSION,
|
|
309
|
-
cycleId: input.cycleId,
|
|
310
|
-
fingerprint: canonicalDigest({
|
|
311
|
-
source: input.baseFingerprint,
|
|
312
|
-
citations: items.map((item) => ({ id: item.id, digest: item.digest })),
|
|
313
|
-
}),
|
|
314
|
-
collectedAt: input.now,
|
|
315
|
-
truncated: false,
|
|
316
|
-
items,
|
|
317
|
-
sources: [],
|
|
318
|
-
warnings: [],
|
|
319
|
-
});
|
|
320
|
-
}
|
|
321
|
-
const SENSITIVE_ROUTE_LANGUAGE = /\b(?:payment|billing|security|privacy|legal|tenant|isolation|destructive|delete|purge|credential|secret)\b/i;
|
|
322
|
-
function containsSensitiveRouteProposal(results) {
|
|
323
|
-
return results.some((result) => result.proposals.some((proposal) => SENSITIVE_ROUTE_LANGUAGE.test(`${proposal.type} ${proposal.title} ${proposal.problem} ${proposal.proposal}`)));
|
|
324
|
-
}
|
|
325
|
-
async function createCycleManifest(input) {
|
|
326
|
-
return assertOperatingArtifact('operating-cycle-manifest', {
|
|
327
|
-
kind: 'operating-cycle-manifest',
|
|
328
|
-
schemaVersion: OPERATE_SCHEMA_VERSION,
|
|
329
|
-
protocolVersion: OPERATE_PROTOCOL_VERSION,
|
|
330
|
-
id: input.id,
|
|
331
|
-
state: input.state,
|
|
332
|
-
depth: input.depth,
|
|
333
|
-
focus: input.focus,
|
|
334
|
-
inputDigest: input.inputDigest,
|
|
335
|
-
enabledRoles: [...input.enabledRoles],
|
|
336
|
-
enabledProviders: [...input.enabledProviders],
|
|
337
|
-
createdAt: input.now,
|
|
338
|
-
updatedAt: input.now,
|
|
339
|
-
producer: {
|
|
340
|
-
product: 'openplanr',
|
|
341
|
-
version: OPENPLANR_VERSION,
|
|
342
|
-
runtime: input.runtime,
|
|
343
|
-
},
|
|
344
|
-
});
|
|
345
|
-
}
|
|
346
|
-
async function appendLocked(store, lock, head, input) {
|
|
347
|
-
const event = await store.append({ ...input, expectedHead: head.hash });
|
|
348
|
-
const next = { sequence: event.sequence, hash: event.eventHash };
|
|
349
|
-
await lock.advanceEventHead(head, next);
|
|
350
|
-
return { event, head: next };
|
|
351
|
-
}
|
|
352
|
-
function remapConsolidation(state, findings, parked, decisions, gaps) {
|
|
353
|
-
let findingOrdinal = maximumOrdinal(state.findings, 'FND');
|
|
354
|
-
let decisionOrdinal = maximumOrdinal(state.decisions, 'DEC');
|
|
355
|
-
let gapOrdinal = maximumOrdinal(state.dataGaps, 'GAP');
|
|
356
|
-
const findingIds = new Map();
|
|
357
|
-
for (const finding of [...findings, ...parked]) {
|
|
358
|
-
findingIds.set(finding.id, `FND-${String(++findingOrdinal).padStart(3, '0')}`);
|
|
359
|
-
}
|
|
360
|
-
const remapFinding = (finding) => ({
|
|
361
|
-
...finding,
|
|
362
|
-
id: findingIds.get(finding.id),
|
|
363
|
-
dependsOn: finding.dependsOn.map((dependency) => findingIds.get(dependency) ?? dependency),
|
|
364
|
-
});
|
|
365
|
-
return {
|
|
366
|
-
findings: findings.map(remapFinding),
|
|
367
|
-
parked: parked.map(remapFinding),
|
|
368
|
-
decisions: decisions.map((decision) => ({
|
|
369
|
-
...decision,
|
|
370
|
-
id: `DEC-${String(++decisionOrdinal).padStart(3, '0')}`,
|
|
371
|
-
})),
|
|
372
|
-
gaps: gaps.map((gap) => ({
|
|
373
|
-
...gap,
|
|
374
|
-
id: `GAP-${String(++gapOrdinal).padStart(3, '0')}`,
|
|
375
|
-
})),
|
|
376
|
-
};
|
|
377
|
-
}
|
|
378
|
-
function findingIdentity(value) {
|
|
379
|
-
const finding = value;
|
|
380
|
-
if (typeof finding.fingerprint === 'string' &&
|
|
381
|
-
/^sha256:[a-f0-9]{64}$/.test(finding.fingerprint)) {
|
|
382
|
-
return finding.fingerprint;
|
|
383
|
-
}
|
|
384
|
-
return canonicalDigest({
|
|
385
|
-
title: String(finding.title ?? '')
|
|
386
|
-
.trim()
|
|
387
|
-
.toLowerCase(),
|
|
388
|
-
lane: String(finding.lane ?? ''),
|
|
389
|
-
owner: String(finding.owner ?? ''),
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
function suppressRepeatedFindings(state, findings, cycleId) {
|
|
393
|
-
const priorByIdentity = new Map(state.findings
|
|
394
|
-
.filter((finding) => finding.cycleId !== cycleId)
|
|
395
|
-
.map((finding) => [findingIdentity(finding), finding]));
|
|
396
|
-
let suppressed = 0;
|
|
397
|
-
const retained = [];
|
|
398
|
-
for (const finding of findings) {
|
|
399
|
-
const prior = priorByIdentity.get(findingIdentity(finding));
|
|
400
|
-
if (!prior) {
|
|
401
|
-
retained.push(finding);
|
|
402
|
-
continue;
|
|
403
|
-
}
|
|
404
|
-
const priorEvidence = Array.isArray(prior.evidenceRefs)
|
|
405
|
-
? [...prior.evidenceRefs].sort()
|
|
406
|
-
: [];
|
|
407
|
-
const currentEvidence = [...finding.evidenceRefs].sort();
|
|
408
|
-
if (canonicalDigest(priorEvidence) === canonicalDigest(currentEvidence)) {
|
|
409
|
-
suppressed += 1;
|
|
410
|
-
continue;
|
|
411
|
-
}
|
|
412
|
-
retained.push({
|
|
413
|
-
...finding,
|
|
414
|
-
dependsOn: [...new Set([...finding.dependsOn, String(prior.id)])].sort(),
|
|
415
|
-
});
|
|
416
|
-
}
|
|
417
|
-
return { findings: retained, suppressed };
|
|
418
|
-
}
|
|
419
|
-
function committedCycleFindings(events, cycleId) {
|
|
420
|
-
return events
|
|
421
|
-
.filter((event) => event.type === 'finding.proposed' &&
|
|
422
|
-
event.cycleId === cycleId &&
|
|
423
|
-
event.payload.record &&
|
|
424
|
-
typeof event.payload.record === 'object')
|
|
425
|
-
.map((event) => structuredClone(event.payload.record));
|
|
426
|
-
}
|
|
427
|
-
function reconcileCycleFindings(events, cycleId, findings) {
|
|
428
|
-
const existing = committedCycleFindings(events, cycleId);
|
|
429
|
-
const existingByIdentity = new Map(existing.map((finding) => [findingIdentity(finding), finding]));
|
|
430
|
-
return findings.map((finding) => {
|
|
431
|
-
const prior = existingByIdentity.get(findingIdentity(finding));
|
|
432
|
-
if (!prior)
|
|
433
|
-
return finding;
|
|
434
|
-
return canonicalDigest([...prior.evidenceRefs].sort()) ===
|
|
435
|
-
canonicalDigest([...finding.evidenceRefs].sort())
|
|
436
|
-
? prior
|
|
437
|
-
: finding;
|
|
438
|
-
});
|
|
439
|
-
}
|
|
440
|
-
function recordContent(value) {
|
|
441
|
-
return structuredClone(value);
|
|
442
|
-
}
|
|
443
|
-
async function persistedCycleEvidence(store, events, cycleId) {
|
|
444
|
-
const event = [...events]
|
|
445
|
-
.reverse()
|
|
446
|
-
.find((candidate) => candidate.cycleId === cycleId &&
|
|
447
|
-
candidate.type === 'evidence.collected' &&
|
|
448
|
-
typeof candidate.payload.recordDigest === 'string');
|
|
449
|
-
if (!event)
|
|
450
|
-
return null;
|
|
451
|
-
const record = await store.readRecord(event.payload.recordDigest);
|
|
452
|
-
if (record.recordType !== 'evidence-metadata') {
|
|
453
|
-
throw new OperateError('E_OPERATE_STATE_INVALID', `Cycle ${cycleId} evidence event references a ${record.recordType} record.`);
|
|
454
|
-
}
|
|
455
|
-
return assertOperatingArtifact('operating-evidence', record.content);
|
|
456
|
-
}
|
|
457
|
-
async function persistedCycleRoleResults(store, events, cycleId) {
|
|
458
|
-
const byRole = new Map();
|
|
459
|
-
for (const event of events) {
|
|
460
|
-
if (event.cycleId !== cycleId ||
|
|
461
|
-
event.type !== 'advisory.recorded' ||
|
|
462
|
-
typeof event.payload.recordDigest !== 'string') {
|
|
463
|
-
continue;
|
|
464
|
-
}
|
|
465
|
-
const record = await store.readRecord(event.payload.recordDigest);
|
|
466
|
-
if (record.recordType !== 'advisor-result') {
|
|
467
|
-
throw new OperateError('E_OPERATE_STATE_INVALID', `Cycle ${cycleId} advisory event references a ${record.recordType} record.`);
|
|
468
|
-
}
|
|
469
|
-
const result = await assertOperatingArtifact('operating-role-result', record.content);
|
|
470
|
-
(await loadOperatingProtocol()).validateOperatingRoleResultDigest(result);
|
|
471
|
-
if (result.cycleId !== cycleId) {
|
|
472
|
-
throw new OperateError('E_OPERATE_STATE_INVALID', `Advisor result ${result.roleId} belongs to another cycle.`);
|
|
473
|
-
}
|
|
474
|
-
byRole.set(result.roleId, result);
|
|
475
|
-
}
|
|
476
|
-
return [...byRole.values()].sort((left, right) => left.roleId.localeCompare(right.roleId));
|
|
477
|
-
}
|
|
478
|
-
/**
|
|
479
|
-
* Full evidence → advisors → deterministic consolidation lifecycle. All
|
|
480
|
-
* mutations are serialized under the process-identity lease; preview and
|
|
481
|
-
* dry-run never enter the mutating branch.
|
|
482
|
-
*/
|
|
483
|
-
/**
|
|
484
|
-
* The single governed gap opened for a role whose citation-bearing response
|
|
485
|
-
* grounded zero evidence (FR2). It names the role and its empty grounding so the
|
|
486
|
-
* integrity surface can render the role `not_evaluated` with a real reason rather
|
|
487
|
-
* than a silent absence or a "quiet" that pretends the lens evaluated.
|
|
488
|
-
*/
|
|
489
|
-
function roleEmptyGroundingGap(roleId, context, now) {
|
|
490
|
-
const createdAt = now.toISOString();
|
|
491
|
-
return {
|
|
492
|
-
kind: 'operating-data-gap',
|
|
493
|
-
schemaVersion: OPERATE_SCHEMA_VERSION,
|
|
494
|
-
protocolVersion: OPERATE_MISSION_PROTOCOL_VERSION,
|
|
495
|
-
id: `GAP-${canonicalDigest({
|
|
496
|
-
roleId,
|
|
497
|
-
cycleId: context.cycleId,
|
|
498
|
-
reason: 'empty-grounding',
|
|
499
|
-
}).slice('sha256:'.length)}`,
|
|
500
|
-
cycleId: context.cycleId,
|
|
501
|
-
category: 'missing-evidence',
|
|
502
|
-
question: `What evidence can ${roleId} cite? Its response resolved zero citations to evidence.`,
|
|
503
|
-
reason: `Every citation ${roleId} returned failed to resolve at the pinned revision, so the role ` +
|
|
504
|
-
'grounded no evidence and is recorded not_evaluated instead of dispatching a proposal on an ' +
|
|
505
|
-
'empty base.',
|
|
506
|
-
unblocks: [],
|
|
507
|
-
affectedRoles: [roleId],
|
|
508
|
-
status: 'open',
|
|
509
|
-
owner: context.owner && context.owner.length > 0 ? context.owner : 'chair',
|
|
510
|
-
evidenceRefs: [],
|
|
511
|
-
createdAt,
|
|
512
|
-
updatedAt: createdAt,
|
|
513
|
-
};
|
|
514
|
-
}
|
|
515
|
-
/**
|
|
516
|
-
* FR2 universal citation gate — the PRIMARY, unconditional mechanism, run on
|
|
517
|
-
* every dispatch path and every evidence source (no `bearing.length === 0`
|
|
518
|
-
* bypass remains, so it is entered even for a citation-free result).
|
|
519
|
-
*
|
|
520
|
-
* Every recorded proposal that carries citations is resolved against the cycle's
|
|
521
|
-
* pinned revision through `enforceRecordedProposalCitations`. A proposal with ANY
|
|
522
|
-
* unresolvable citation is DROPPED — it never reaches `consolidateOperatingResults`
|
|
523
|
-
* — and exactly one `unresolvable-citation` gap is opened in its place. A proposal
|
|
524
|
-
* whose citations all resolve keeps its minted evidence IDs.
|
|
525
|
-
*
|
|
526
|
-
* On top of that per-proposal gate, the FR2 role-level rule: a role result whose
|
|
527
|
-
* proposals carried citations but whose accepted citations resolve to ZERO
|
|
528
|
-
* evidence IDs is `not_evaluated` — every one of its proposals is dropped, its id
|
|
529
|
-
* is returned in `notEvaluatedRoleIds`, and one governed `missing-evidence` gap
|
|
530
|
-
* naming the role and its empty grounding is opened. This replaces SPEC-003's
|
|
531
|
-
* mission-only, repository-only starvation gate with one rule that holds whatever
|
|
532
|
-
* the dispatch path or evidence source. A v1.2 pack result (evidenceRefs, no
|
|
533
|
-
* citations) carries no citation-bearing proposal, so it is never demoted — the
|
|
534
|
-
* pack path stays functional until T-003 removes it.
|
|
535
|
-
*/
|
|
536
|
-
export async function gateRecordedProposalCitations(input) {
|
|
537
|
-
const bearing = [];
|
|
538
|
-
const citationBearingProposalKeys = new Set();
|
|
539
|
-
for (const result of input.roleResults) {
|
|
540
|
-
for (const proposal of result.proposals) {
|
|
541
|
-
const citations = proposal.citations;
|
|
542
|
-
if (Array.isArray(citations) && citations.length > 0) {
|
|
543
|
-
bearing.push({ proposalKey: proposal.proposalKey, citations });
|
|
544
|
-
citationBearingProposalKeys.add(proposal.proposalKey);
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
const enforcement = await enforceRecordedProposalCitations(bearing, input.context);
|
|
549
|
-
const rejectedKeys = new Set(enforcement.rejected.map((entry) => entry.proposalKey));
|
|
550
|
-
const evidenceByKey = new Map(enforcement.accepted.map((entry) => [entry.proposal.proposalKey, entry.evidenceRefs]));
|
|
551
|
-
// FR13 (T-017): name the role whose proposal each unresolvable-citation gap
|
|
552
|
-
// rejected, so the integrity summary links the citation rejection to that role.
|
|
553
|
-
// Without it the gap carries no `affectedRoles`, the Chair board cannot tell a
|
|
554
|
-
// fully-rejected role's `citation-rejected` outcome apart from a plain
|
|
555
|
-
// not-evaluated absence, and the integrity report's "Affected:" line is blank.
|
|
556
|
-
const roleByProposalKey = new Map();
|
|
557
|
-
for (const result of input.roleResults) {
|
|
558
|
-
for (const proposal of result.proposals) {
|
|
559
|
-
roleByProposalKey.set(proposal.proposalKey, result.roleId);
|
|
560
|
-
}
|
|
561
|
-
}
|
|
562
|
-
const rolesByGapId = new Map();
|
|
563
|
-
for (const entry of enforcement.rejected) {
|
|
564
|
-
const roleId = roleByProposalKey.get(entry.proposalKey);
|
|
565
|
-
if (!roleId)
|
|
566
|
-
continue;
|
|
567
|
-
const roles = rolesByGapId.get(entry.gapId) ?? new Set();
|
|
568
|
-
roles.add(roleId);
|
|
569
|
-
rolesByGapId.set(entry.gapId, roles);
|
|
570
|
-
}
|
|
571
|
-
const gaps = enforcement.gaps.map((gap) => {
|
|
572
|
-
const roles = rolesByGapId.get(String(gap.id));
|
|
573
|
-
if (!roles || roles.size === 0)
|
|
574
|
-
return gap;
|
|
575
|
-
const record = gap;
|
|
576
|
-
const existing = Array.isArray(record.affectedRoles)
|
|
577
|
-
? record.affectedRoles
|
|
578
|
-
: [];
|
|
579
|
-
return {
|
|
580
|
-
...record,
|
|
581
|
-
affectedRoles: [...new Set([...existing, ...roles])].sort(),
|
|
582
|
-
};
|
|
583
|
-
});
|
|
584
|
-
const notEvaluatedRoleIds = [];
|
|
585
|
-
const now = input.context.now ?? new Date();
|
|
586
|
-
const roleResults = await Promise.all(input.roleResults.map(async (result) => {
|
|
587
|
-
const gated = {
|
|
588
|
-
...result,
|
|
589
|
-
proposals: result.proposals
|
|
590
|
-
.filter((proposal) => !rejectedKeys.has(proposal.proposalKey))
|
|
591
|
-
.map((proposal) => {
|
|
592
|
-
const minted = evidenceByKey.get(proposal.proposalKey);
|
|
593
|
-
return minted && minted.length > 0
|
|
594
|
-
? {
|
|
595
|
-
...proposal,
|
|
596
|
-
evidenceRefs: [...new Set([...proposal.evidenceRefs, ...minted])].sort(),
|
|
597
|
-
}
|
|
598
|
-
: proposal;
|
|
599
|
-
}),
|
|
600
|
-
};
|
|
601
|
-
// FR2 role-level rule: a role whose proposals were citation-bearing but
|
|
602
|
-
// grounded ZERO evidence after resolution is not_evaluated. Drop its
|
|
603
|
-
// surviving (evidence-free) proposals and open one governed gap.
|
|
604
|
-
const wasCitationBearing = result.proposals.some((proposal) => citationBearingProposalKeys.has(proposal.proposalKey));
|
|
605
|
-
const mintedAny = gated.proposals.some((proposal) => proposal.evidenceRefs.length > 0);
|
|
606
|
-
if (wasCitationBearing && !mintedAny) {
|
|
607
|
-
notEvaluatedRoleIds.push(result.roleId);
|
|
608
|
-
gaps.push(await assertOperatingArtifact('operating-data-gap', roleEmptyGroundingGap(result.roleId, input.context, now)));
|
|
609
|
-
return { ...gated, proposals: [] };
|
|
610
|
-
}
|
|
611
|
-
return gated;
|
|
612
|
-
}));
|
|
613
|
-
return { roleResults, gaps, notEvaluatedRoleIds };
|
|
614
|
-
}
|
|
615
|
-
/**
|
|
616
|
-
* FR3/FR13 (SPEC-005 T-015): mint the governed data gap persisted for a lens the
|
|
617
|
-
* lifecycle driver terminated `not_evaluated` — a stalled lens that exhausted its
|
|
618
|
-
* bounded retry budget. It carries the driver's REAL governed reason and links
|
|
619
|
-
* the role so `status`/`report` render a governed gap rather than a silent
|
|
620
|
-
* absence. It is shaped as a v1.2.0 `operating-data-gap` (no `category`) so it
|
|
621
|
-
* validates as a `data-gap` record, exactly as `readinessGaps` gaps do; the
|
|
622
|
-
* Chair board's `not-evaluated` CLASSIFICATION is sourced separately, directly
|
|
623
|
-
* from the driver's in-memory governed gaps, so it needs no v1.3 category here.
|
|
624
|
-
* The digest-derived id keeps it canonical and idempotent across resume.
|
|
625
|
-
*/
|
|
626
|
-
function driverNotEvaluatedGap(gap, cycleId, owner, now) {
|
|
627
|
-
return {
|
|
628
|
-
kind: 'operating-data-gap',
|
|
629
|
-
schemaVersion: OPERATE_SCHEMA_VERSION,
|
|
630
|
-
protocolVersion: OPERATE_PROTOCOL_VERSION,
|
|
631
|
-
id: `GAP-${canonicalDigest({
|
|
632
|
-
roleId: gap.roleId,
|
|
633
|
-
cycleId,
|
|
634
|
-
reason: 'lifecycle-not-evaluated',
|
|
635
|
-
}).slice('sha256:'.length)}`,
|
|
636
|
-
cycleId,
|
|
637
|
-
question: `Why did ${gap.roleId} not evaluate this cycle?`,
|
|
638
|
-
reason: gap.reason,
|
|
639
|
-
unblocks: [],
|
|
640
|
-
affectedRoles: [gap.roleId],
|
|
641
|
-
status: 'open',
|
|
642
|
-
owner: owner && owner.length > 0 ? owner : 'chair',
|
|
643
|
-
evidenceRefs: [],
|
|
644
|
-
createdAt: now,
|
|
645
|
-
updatedAt: now,
|
|
646
|
-
};
|
|
647
|
-
}
|
|
648
|
-
export async function runOperatingCycle(input) {
|
|
649
|
-
const projectRoot = await assertOperatingProject(input.projectRoot);
|
|
650
|
-
const config = await validateOperatingConfiguration(projectRoot);
|
|
651
|
-
const paths = resolveOperatingPaths(projectRoot, { localRoot: input.localRoot });
|
|
652
|
-
const initializedWorkspace = await loadJson(paths.workspace);
|
|
653
|
-
await assertOperatingArtifact('operating-workspace-manifest', initializedWorkspace);
|
|
654
|
-
const preferences = await readPreferences(projectRoot, input.localRoot);
|
|
655
|
-
const store = new OperatingEventStore(projectRoot, { localRoot: input.localRoot });
|
|
656
|
-
const now = input.now ?? new Date();
|
|
657
|
-
const deadlineReconciliation = !input.preview && !input.dryRun
|
|
658
|
-
? await reconcileOperatingDecisionDeadlines({
|
|
659
|
-
projectRoot,
|
|
660
|
-
localRoot: input.localRoot,
|
|
661
|
-
now,
|
|
662
|
-
})
|
|
663
|
-
: { transitioned: 0 };
|
|
664
|
-
const initial = await store.replay();
|
|
665
|
-
const initialState = await store.state();
|
|
666
|
-
const current = activeCycle(initialState);
|
|
667
|
-
const timestamp = now.toISOString();
|
|
668
|
-
if (input.cycleId && current?.id !== input.cycleId) {
|
|
669
|
-
throw new OperateError('E_OPERATE_CYCLE_INPUT_CONFLICT', current
|
|
670
|
-
? `Operating continuation is bound to ${input.cycleId}, but ${current.id} is active.`
|
|
671
|
-
: `Operating continuation is bound to ${input.cycleId}, but no resumable cycle is active.`, {
|
|
672
|
-
expectedCycleId: input.cycleId,
|
|
673
|
-
activeCycleId: current?.id ?? null,
|
|
674
|
-
});
|
|
675
|
-
}
|
|
676
|
-
if (input.reviewOnly) {
|
|
677
|
-
const persisted = initialState.cycles.at(-1);
|
|
678
|
-
if (!persisted) {
|
|
679
|
-
throw new OperateError('E_OPERATE_STATE_INVALID', 'Review-only mode requires at least one committed operating cycle.');
|
|
680
|
-
}
|
|
681
|
-
const persistedCycle = await assertOperatingArtifact('operating-cycle-manifest', persisted);
|
|
682
|
-
const reconciled = input.dryRun
|
|
683
|
-
? { reconciled: 0, shipObserved: 0, state: initialState }
|
|
684
|
-
: await reconcileOperatingOutcomeFiles({
|
|
685
|
-
projectRoot,
|
|
686
|
-
localRoot: input.localRoot,
|
|
687
|
-
});
|
|
688
|
-
return {
|
|
689
|
-
preview: false,
|
|
690
|
-
dryRun: Boolean(input.dryRun),
|
|
691
|
-
cycle: persistedCycle,
|
|
692
|
-
provider: null,
|
|
693
|
-
state: reconciled.state,
|
|
694
|
-
modelCalls: 0,
|
|
695
|
-
warnings: [
|
|
696
|
-
`Review-only mode reconciled ${reconciled.reconciled} outcome observation(s) without evidence or model calls.`,
|
|
697
|
-
...(deadlineReconciliation.transitioned > 0
|
|
698
|
-
? [
|
|
699
|
-
`Marked ${deadlineReconciliation.transitioned} elapsed decision deadline(s) default-due without executing an action.`,
|
|
700
|
-
]
|
|
701
|
-
: []),
|
|
702
|
-
],
|
|
703
|
-
};
|
|
704
|
-
}
|
|
705
|
-
const resumableStates = new Set([
|
|
706
|
-
'preparing',
|
|
707
|
-
'collecting',
|
|
708
|
-
'advising',
|
|
709
|
-
'consolidating',
|
|
710
|
-
'blocked',
|
|
711
|
-
]);
|
|
712
|
-
if (current && !resumableStates.has(current.state)) {
|
|
713
|
-
throw new OperateError('E_OPERATE_CYCLE_ACTIVE', `Operating cycle ${current.id} is already ${current.state}; close or cancel it before starting another.`);
|
|
714
|
-
}
|
|
715
|
-
const depth = input.depth ?? current?.depth ?? 'standard';
|
|
716
|
-
const focus = normalizeFocus(input.focus ?? current?.focus);
|
|
717
|
-
const currentProducer = current ? current.producer : null;
|
|
718
|
-
const requestedRuntime = input.runtime && input.runtime !== 'auto' ? input.runtime : preferences.runtime;
|
|
719
|
-
if (current && requestedRuntime !== 'auto' && requestedRuntime !== currentProducer?.runtime) {
|
|
720
|
-
throw new OperateError('E_OPERATE_RUNTIME_MISMATCH', `Operating cycle ${current.id} is bound to runtime ${currentProducer?.runtime}, not ${requestedRuntime}.`, {
|
|
721
|
-
cycleId: current.id,
|
|
722
|
-
expectedRuntime: currentProducer?.runtime,
|
|
723
|
-
actualRuntime: requestedRuntime,
|
|
724
|
-
recovery: 'Resume with the bound runtime, or cancel this cycle and create a new one with the desired runtime.',
|
|
725
|
-
});
|
|
726
|
-
}
|
|
727
|
-
const resolvedRuntime = currentProducer?.runtime ?? requestedRuntime;
|
|
728
|
-
const cycleStart = current
|
|
729
|
-
? initial.events.find((event) => event.type === 'cycle.preparing' &&
|
|
730
|
-
event.cycleId === current.id &&
|
|
731
|
-
event.entityId === current.id)
|
|
732
|
-
: null;
|
|
733
|
-
if (current && !cycleStart) {
|
|
734
|
-
throw new OperateError('E_OPERATE_STATE_INVALID', `Operating cycle ${current.id} has no canonical preparing event.`);
|
|
735
|
-
}
|
|
736
|
-
const inputHead = cycleStart
|
|
737
|
-
? {
|
|
738
|
-
sequence: cycleStart.sequence - 1,
|
|
739
|
-
hash: cycleStart.previousEventHash,
|
|
740
|
-
}
|
|
741
|
-
: initial.eventHead;
|
|
742
|
-
// Preview is intentionally machine-state-free: it does not require local
|
|
743
|
-
// component-root mappings and binds only a prospective digest. A committed
|
|
744
|
-
// cycle always snapshots the live roots at its actual start.
|
|
745
|
-
const workspace = input.preview
|
|
746
|
-
? initializedWorkspace
|
|
747
|
-
: await snapshotWorkspace(projectRoot, input.localRoot);
|
|
748
|
-
const inputDigest = canonicalDigest({
|
|
749
|
-
workspaceDigest: workspace.workspaceDigest,
|
|
750
|
-
config: canonicalDigest(config),
|
|
751
|
-
eventHead: inputHead,
|
|
752
|
-
depth,
|
|
753
|
-
focus,
|
|
754
|
-
runtime: resolvedRuntime,
|
|
755
|
-
});
|
|
756
|
-
if (current && current.inputDigest !== inputDigest) {
|
|
757
|
-
throw new OperateError('E_OPERATE_CYCLE_INPUT_CONFLICT', `Operating cycle ${current.id} can resume only with its original workspace, configuration, depth, and focus.`, {
|
|
758
|
-
cycleId: current.id,
|
|
759
|
-
expectedInputDigest: current.inputDigest,
|
|
760
|
-
actualInputDigest: inputDigest,
|
|
761
|
-
});
|
|
762
|
-
}
|
|
763
|
-
const cycle = current
|
|
764
|
-
? await assertOperatingArtifact('operating-cycle-manifest', current)
|
|
765
|
-
: await createCycleManifest({
|
|
766
|
-
id: nextCycleId(initialState),
|
|
767
|
-
state: 'preparing',
|
|
768
|
-
depth,
|
|
769
|
-
focus,
|
|
770
|
-
inputDigest,
|
|
771
|
-
enabledRoles: config.enabledRoles,
|
|
772
|
-
enabledProviders: config.enabledProviders,
|
|
773
|
-
runtime: resolvedRuntime,
|
|
774
|
-
now: timestamp,
|
|
775
|
-
});
|
|
776
|
-
if (input.preview) {
|
|
777
|
-
return {
|
|
778
|
-
preview: true,
|
|
779
|
-
dryRun: false,
|
|
780
|
-
cycle,
|
|
781
|
-
provider: null,
|
|
782
|
-
modelCalls: 0,
|
|
783
|
-
warnings: [],
|
|
784
|
-
};
|
|
785
|
-
}
|
|
786
|
-
const assertCycleWorkspace = async () => {
|
|
787
|
-
const observed = await snapshotWorkspace(projectRoot, input.localRoot);
|
|
788
|
-
if (observed.workspaceDigest !== workspace.workspaceDigest) {
|
|
789
|
-
throw new OperateError('E_OPERATE_HEAD_DIVERGED', 'Workspace revisions, branches, remotes, or material dirty fingerprints changed during the operating cycle.', {
|
|
790
|
-
expectedWorkspaceDigest: workspace.workspaceDigest,
|
|
791
|
-
actualWorkspaceDigest: observed.workspaceDigest,
|
|
792
|
-
});
|
|
793
|
-
}
|
|
794
|
-
};
|
|
795
|
-
const existingEvidence = current && current.state !== 'blocked'
|
|
796
|
-
? await persistedCycleEvidence(store, initial.events, cycle.id)
|
|
797
|
-
: null;
|
|
798
|
-
const existingRoleResults = current
|
|
799
|
-
? await persistedCycleRoleResults(store, initial.events, cycle.id)
|
|
800
|
-
: [];
|
|
801
|
-
const advisorContext = await buildAdvisorOperatingContext({
|
|
802
|
-
charterPath: paths.charter,
|
|
803
|
-
state: initialState,
|
|
804
|
-
cycleId: cycle.id,
|
|
805
|
-
});
|
|
806
|
-
const citationCache = new OperatingEvidenceCache(resolveOperatingPaths(projectRoot, { localRoot: input.localRoot }).evidence, preferences.sensitivityCeiling);
|
|
807
|
-
// Sibling workspace components a cross-repo citation may resolve against, joined
|
|
808
|
-
// from the committed manifest and the machine-local root map. A citation naming
|
|
809
|
-
// a component absent here classifies external-component-unresolved, never
|
|
810
|
-
// fabricated-path. Empty on a single-repository project.
|
|
811
|
-
const citationComponents = citationComponentsFromWorkspace(workspace, await readOperatingWorkspaceRoots(projectRoot, { localRoot: input.localRoot }));
|
|
812
|
-
// FR2 universal gate, bound to the cycle's pinned revision. Injected into
|
|
813
|
-
// dispatch so advisors.ts never imports engine.ts, and reused by the
|
|
814
|
-
// consolidation-time gate below so both paths resolve citations identically.
|
|
815
|
-
const resolveCitations = (roleResults) => gateRecordedProposalCitations({
|
|
816
|
-
roleResults,
|
|
817
|
-
context: {
|
|
818
|
-
projectRoot,
|
|
819
|
-
cycleId: cycle.id,
|
|
820
|
-
descriptor: workspace.controlRepository,
|
|
821
|
-
cache: citationCache,
|
|
822
|
-
owner: config.decisionOwner,
|
|
823
|
-
components: citationComponents,
|
|
824
|
-
now,
|
|
825
|
-
},
|
|
826
|
-
});
|
|
827
|
-
const evaluate = async (persist) => {
|
|
828
|
-
await assertCycleWorkspace();
|
|
829
|
-
const evidence = existingEvidence ??
|
|
830
|
-
(await buildPinnedRevisionEvidenceSeed({
|
|
831
|
-
cycleId: cycle.id,
|
|
832
|
-
pinnedRevision: workspace.controlRepository.pinnedRevision,
|
|
833
|
-
collectedAt: timestamp,
|
|
834
|
-
}));
|
|
835
|
-
const evidenceGaps = [];
|
|
836
|
-
const nonChair = config.enabledRoles.filter((role) => role !== 'chair');
|
|
837
|
-
let readiness = await buildDispatchReadiness({
|
|
838
|
-
cycleId: cycle.id,
|
|
839
|
-
roles: nonChair,
|
|
840
|
-
pinnedRevision: workspace.controlRepository.pinnedRevision,
|
|
841
|
-
sensitivityCeiling: preferences.sensitivityCeiling,
|
|
842
|
-
now,
|
|
843
|
-
});
|
|
844
|
-
readiness = await remapReadinessGaps(readiness, initialState);
|
|
845
|
-
let adapter = input.adapter ?? null;
|
|
846
|
-
let provider = null;
|
|
847
|
-
const resolveAdapter = async () => {
|
|
848
|
-
if (adapter)
|
|
849
|
-
return adapter;
|
|
850
|
-
if (input.offline) {
|
|
851
|
-
adapter = createOfflineAdvisorAdapter();
|
|
852
|
-
return adapter;
|
|
853
|
-
}
|
|
854
|
-
adapter = await createConfiguredStructuredAdapter(projectRoot, {
|
|
855
|
-
quiet: input.quiet,
|
|
856
|
-
});
|
|
857
|
-
const openPlanrConfig = await loadConfig(projectRoot);
|
|
858
|
-
const consent = await ensureOperatingProviderConsent({
|
|
859
|
-
projectRoot,
|
|
860
|
-
provider: configuredAdvisorProviderPolicy({
|
|
861
|
-
config: openPlanrConfig,
|
|
862
|
-
adapterId: adapter.id,
|
|
863
|
-
runtime: resolvedRuntime,
|
|
864
|
-
}),
|
|
865
|
-
confirmed: Boolean(input.confirmed),
|
|
866
|
-
persist,
|
|
867
|
-
now: timestamp,
|
|
868
|
-
});
|
|
869
|
-
provider = consent.manifest;
|
|
870
|
-
return adapter;
|
|
871
|
-
};
|
|
872
|
-
const existingByRole = new Map(existingRoleResults.map((result) => [result.roleId, result]));
|
|
873
|
-
const missingNonChair = readiness.roles.filter((role) => role.roleId !== 'chair' && !existingByRole.has(role.roleId));
|
|
874
|
-
// SPEC-005 T-020 (FR13): a non-chair lens with NO committed result that is
|
|
875
|
-
// nonetheless named by an open governed cycle gap was terminated
|
|
876
|
-
// `not_evaluated` — a runtime `harness abandon`, or the operator escape after a
|
|
877
|
-
// stall. It is terminal, not runnable: exclude it so a genuinely stalled lens
|
|
878
|
-
// no longer strands the cycle at `phase: advisors` forever, exactly as a
|
|
879
|
-
// recorded lens does not block it. On the adapter-lifecycle path the only
|
|
880
|
-
// committed cycle gaps that name a lens with no result are these terminal ones
|
|
881
|
-
// (the citation gate's gaps always co-occur with a recorded result, handled by
|
|
882
|
-
// `existingByRole`; readiness gaps are never persisted on this path), so this
|
|
883
|
-
// never suppresses a still-pending lens — a pending lens has no naming gap yet.
|
|
884
|
-
const terminatedNonChair = new Set(missingNonChair
|
|
885
|
-
.filter((role) => initialState.dataGaps.some((gap) => (gap.cycleId === undefined || gap.cycleId === cycle.id) &&
|
|
886
|
-
!['closed', 'superseded'].includes(String(gap.status)) &&
|
|
887
|
-
Array.isArray(gap.affectedRoles) &&
|
|
888
|
-
gap.affectedRoles.includes(role.roleId)))
|
|
889
|
-
.map((role) => role.roleId));
|
|
890
|
-
const runnableMissingNonChair = missingNonChair.filter((role) => role.modelCallAllowed && !terminatedNonChair.has(role.roleId));
|
|
891
|
-
const skippedMissingNonChair = missingNonChair
|
|
892
|
-
.filter((role) => !role.modelCallAllowed || role.readiness === 'not_evaluated')
|
|
893
|
-
.map((role) => ({
|
|
894
|
-
roleId: role.roleId,
|
|
895
|
-
gapId: role.gapId,
|
|
896
|
-
reason: role.missingEvidence.join('; '),
|
|
897
|
-
}));
|
|
898
|
-
if (input.deferAdvisors && runnableMissingNonChair.length > 0) {
|
|
899
|
-
return {
|
|
900
|
-
preview: false,
|
|
901
|
-
dryRun: false,
|
|
902
|
-
cycle,
|
|
903
|
-
evidence,
|
|
904
|
-
readiness,
|
|
905
|
-
roleResults: existingRoleResults.filter((result) => result.roleId !== 'chair'),
|
|
906
|
-
findings: [],
|
|
907
|
-
decisions: [],
|
|
908
|
-
gaps: readinessGaps(readiness, config.decisionOwner, timestamp),
|
|
909
|
-
routes: [],
|
|
910
|
-
provider: null,
|
|
911
|
-
modelCalls: 0,
|
|
912
|
-
warnings: ['Native advisor execution is required before consolidation.'],
|
|
913
|
-
nativeHandoff: {
|
|
914
|
-
phase: 'advisors',
|
|
915
|
-
cycleId: cycle.id,
|
|
916
|
-
evidenceDigest: evidence.fingerprint,
|
|
917
|
-
roles: runnableMissingNonChair.map((role) => role.roleId).sort(),
|
|
918
|
-
},
|
|
919
|
-
};
|
|
920
|
-
}
|
|
921
|
-
await assertCycleWorkspace();
|
|
922
|
-
// FR3 (SPEC-005 T-015): drive the non-chair advisor fan-out through the
|
|
923
|
-
// AdvisorLifecycleDriver (T-003) rather than a single blocking dispatch. The
|
|
924
|
-
// driver owns the per-role lifecycle around the runtime dispatch — bounded
|
|
925
|
-
// retry, per-attempt timeout, and automatic lease heartbeat — and never
|
|
926
|
-
// dispatches an agent itself: its `dispatch` callback IS the runtime dispatch
|
|
927
|
-
// (a single-role `dispatchOperatingAdvisors`) and `recordRole` commits the
|
|
928
|
-
// role's built result. A stalled lens is retried within its budget then
|
|
929
|
-
// terminated `not_evaluated` with a governed gap while its siblings keep
|
|
930
|
-
// recording and the lease keeps renewing — none of which the pre-driver
|
|
931
|
-
// single-call fan-out could survive, because one hung role deadlocked the
|
|
932
|
-
// whole `Promise.all`. A healthy board records identically to before.
|
|
933
|
-
const lifecycleTuning = input.advisorLifecycle ?? {};
|
|
934
|
-
const driveNonChairFanOut = async () => {
|
|
935
|
-
if (runnableMissingNonChair.length === 0) {
|
|
936
|
-
return {
|
|
937
|
-
dispatch: {
|
|
938
|
-
results: [],
|
|
939
|
-
provenance: [],
|
|
940
|
-
modelCalls: 0,
|
|
941
|
-
blocked: false,
|
|
942
|
-
skipped: skippedMissingNonChair,
|
|
943
|
-
failed: [],
|
|
944
|
-
gaps: [],
|
|
945
|
-
},
|
|
946
|
-
};
|
|
947
|
-
}
|
|
948
|
-
const adapter = await resolveAdapter();
|
|
949
|
-
const protocol = await loadOperatingProtocol();
|
|
950
|
-
// Registry order so the aggregated per-role results are byte-identical to
|
|
951
|
-
// the single-call dispatch's canonically-ordered result set (FR4).
|
|
952
|
-
const registryOrder = new Map(protocol.listOperatingRoles().map((role, index) => [
|
|
953
|
-
role.id,
|
|
954
|
-
index,
|
|
955
|
-
]));
|
|
956
|
-
const readinessByRole = new Map(readiness.roles.map((role) => [role.roleId, role]));
|
|
957
|
-
const recordedResults = new Map();
|
|
958
|
-
const provenanceByRole = new Map();
|
|
959
|
-
const aggregatedGaps = [];
|
|
960
|
-
// Roles whose single-role dispatch produced a genuine FAILURE (an adapter
|
|
961
|
-
// error), as distinct from a STALL (a per-attempt timeout with no dispatch
|
|
962
|
-
// error). A genuine failure is preserved as `failed` — the pre-driver
|
|
963
|
-
// semantics: an `X failed` warning plus an `advisorFailureGaps` gap — while
|
|
964
|
-
// only a true stall becomes a governed not_evaluated gap (FR3).
|
|
965
|
-
const failedEntries = [];
|
|
966
|
-
let aggregatedModelCalls = 0;
|
|
967
|
-
let aggregatedBlocked = false;
|
|
968
|
-
const clock = lifecycleTuning.now ?? (() => Date.now());
|
|
969
|
-
// The engine-managed cycle lease window (FR2). Defaults to the documented
|
|
970
|
-
// 15-minute session lease; the driver's heartbeat renews it independent of
|
|
971
|
-
// any role completing, so a slow lens cannot expire recorded work.
|
|
972
|
-
const leaseWindowMs = lifecycleTuning.leaseWindowMs ?? 900_000;
|
|
973
|
-
let leaseExpiresAtMs = clock() + leaseWindowMs;
|
|
974
|
-
const plans = runnableMissingNonChair.map((role) => ({
|
|
975
|
-
roleId: role.roleId,
|
|
976
|
-
// Every advisory lens is structurally OPTIONAL here: a stalled lens
|
|
977
|
-
// terminates not_evaluated with a governed gap and the cycle continues to
|
|
978
|
-
// Chair (FR3/FR13); nothing in the board is structurally required.
|
|
979
|
-
retryBudget: lifecycleTuning.retryBudget ?? 0,
|
|
980
|
-
}));
|
|
981
|
-
const driver = new AdvisorLifecycleDriver({
|
|
982
|
-
roles: plans,
|
|
983
|
-
now: clock,
|
|
984
|
-
...(lifecycleTuning.setTimer ? { setTimer: lifecycleTuning.setTimer } : {}),
|
|
985
|
-
...(lifecycleTuning.clearTimer ? { clearTimer: lifecycleTuning.clearTimer } : {}),
|
|
986
|
-
...(lifecycleTuning.roleTimeoutMs !== undefined
|
|
987
|
-
? { roleTimeoutMs: lifecycleTuning.roleTimeoutMs }
|
|
988
|
-
: {}),
|
|
989
|
-
...(lifecycleTuning.heartbeatLeadMs !== undefined
|
|
990
|
-
? { heartbeatLeadMs: lifecycleTuning.heartbeatLeadMs }
|
|
991
|
-
: {}),
|
|
992
|
-
leaseExpiresAtMs,
|
|
993
|
-
concurrency: DEFAULT_OPERATING_DISPATCH_CONCURRENCY,
|
|
994
|
-
heartbeat: async () => {
|
|
995
|
-
leaseExpiresAtMs = clock() + leaseWindowMs;
|
|
996
|
-
return { leaseExpiresAtMs };
|
|
997
|
-
},
|
|
998
|
-
recordRole: async ({ roleId, output }) => {
|
|
999
|
-
recordedResults.set(roleId, output);
|
|
1000
|
-
leaseExpiresAtMs = clock() + leaseWindowMs;
|
|
1001
|
-
return { recorded: true, leaseExpiresAtMs };
|
|
1002
|
-
},
|
|
1003
|
-
});
|
|
1004
|
-
const dispatchOne = async (roleId) => {
|
|
1005
|
-
const roleReadiness = readinessByRole.get(roleId);
|
|
1006
|
-
if (!roleReadiness) {
|
|
1007
|
-
throw new OperateError('E_OPERATE_STATE_INVALID', `No dispatch readiness for advisor role ${roleId}.`);
|
|
1008
|
-
}
|
|
1009
|
-
const single = await dispatchOperatingAdvisors({
|
|
1010
|
-
cycleId: cycle.id,
|
|
1011
|
-
projectRoot,
|
|
1012
|
-
pinnedRevision: workspace.controlRepository.pinnedRevision,
|
|
1013
|
-
readiness: { ...readiness, roles: [roleReadiness] },
|
|
1014
|
-
context: advisorContext,
|
|
1015
|
-
adapter,
|
|
1016
|
-
depth,
|
|
1017
|
-
runtime: resolvedRuntime,
|
|
1018
|
-
resolveCitations,
|
|
1019
|
-
});
|
|
1020
|
-
aggregatedModelCalls += single.modelCalls;
|
|
1021
|
-
for (const entry of single.provenance)
|
|
1022
|
-
provenanceByRole.set(entry.roleId, entry);
|
|
1023
|
-
aggregatedGaps.push(...single.gaps);
|
|
1024
|
-
if (single.blocked)
|
|
1025
|
-
aggregatedBlocked = true;
|
|
1026
|
-
const built = single.results.find((result) => result.roleId === roleId);
|
|
1027
|
-
if (built)
|
|
1028
|
-
return built;
|
|
1029
|
-
// The lens dispatch errored. Record it as a genuine failure (preserved as
|
|
1030
|
-
// `failed` below) and surface it to the driver, which terminates the role.
|
|
1031
|
-
// A HANG instead never reaches here: the driver's per-attempt timeout
|
|
1032
|
-
// rejects `dispatchOne` from outside, so a timeout is classified a stall
|
|
1033
|
-
// (not a failure) and becomes a governed not_evaluated gap. The driver
|
|
1034
|
-
// dispatches nothing itself — this callback IS the dispatch.
|
|
1035
|
-
const failure = single.failed.find((entry) => entry.roleId === roleId);
|
|
1036
|
-
failedEntries.push({
|
|
1037
|
-
roleId,
|
|
1038
|
-
message: failure?.message ?? `Advisor role ${roleId} produced no committed result.`,
|
|
1039
|
-
});
|
|
1040
|
-
throw new OperateError('E_OPERATE_ADVISOR_FAILED', failure?.message ?? `Advisor role ${roleId} produced no committed result.`);
|
|
1041
|
-
};
|
|
1042
|
-
const heartbeatIntervalMs = lifecycleTuning.heartbeatIntervalMs ?? 60_000;
|
|
1043
|
-
const stopHeartbeat = driver.scheduleHeartbeat(heartbeatIntervalMs);
|
|
1044
|
-
try {
|
|
1045
|
-
await driver.run({
|
|
1046
|
-
parallel: Boolean(adapter.parallelDispatch),
|
|
1047
|
-
dispatch: (roleId) => dispatchOne(roleId),
|
|
1048
|
-
});
|
|
1049
|
-
}
|
|
1050
|
-
finally {
|
|
1051
|
-
stopHeartbeat();
|
|
1052
|
-
}
|
|
1053
|
-
const governedGaps = driver.governedGaps();
|
|
1054
|
-
const failedRoleIds = new Set(failedEntries.map((entry) => entry.roleId));
|
|
1055
|
-
// Only a TRUE stall (a timeout, never a dispatch failure) becomes a governed
|
|
1056
|
-
// not_evaluated gap; a role the driver terminated after a genuine dispatch
|
|
1057
|
-
// error is preserved as `failed` and drops out of the stall set.
|
|
1058
|
-
const stallGaps = governedGaps.filter((gap) => gap.outcome === 'not_evaluated' && !failedRoleIds.has(gap.roleId));
|
|
1059
|
-
const results = [...recordedResults.values()].sort((left, right) => (registryOrder.get(left.roleId) ?? Number.MAX_SAFE_INTEGER) -
|
|
1060
|
-
(registryOrder.get(right.roleId) ?? Number.MAX_SAFE_INTEGER));
|
|
1061
|
-
const provenance = results
|
|
1062
|
-
.map((result) => provenanceByRole.get(result.roleId))
|
|
1063
|
-
.filter((entry) => entry !== undefined);
|
|
1064
|
-
// Genuine dispatch failures preserved with the pre-driver semantics, plus any
|
|
1065
|
-
// structurally-required lens the driver terminated `failed` (none on this
|
|
1066
|
-
// path, where every lens is optional).
|
|
1067
|
-
const failed = [
|
|
1068
|
-
...failedEntries,
|
|
1069
|
-
...governedGaps
|
|
1070
|
-
.filter((gap) => gap.outcome === 'failed')
|
|
1071
|
-
.map((gap) => ({ roleId: gap.roleId, message: gap.reason })),
|
|
1072
|
-
];
|
|
1073
|
-
return {
|
|
1074
|
-
dispatch: {
|
|
1075
|
-
results,
|
|
1076
|
-
provenance,
|
|
1077
|
-
modelCalls: aggregatedModelCalls,
|
|
1078
|
-
blocked: aggregatedBlocked,
|
|
1079
|
-
skipped: skippedMissingNonChair,
|
|
1080
|
-
failed,
|
|
1081
|
-
gaps: [...aggregatedGaps],
|
|
1082
|
-
},
|
|
1083
|
-
lifecycle: {
|
|
1084
|
-
snapshot: driver.snapshot(),
|
|
1085
|
-
// Only the genuine stalls — a failed lens is surfaced through `failed`,
|
|
1086
|
-
// not as a not_evaluated governed gap.
|
|
1087
|
-
gaps: stallGaps,
|
|
1088
|
-
chairReady: driver.chairReady(),
|
|
1089
|
-
heartbeats: driver.heartbeatsIssued(),
|
|
1090
|
-
recorded: results.map((result) => result.roleId),
|
|
1091
|
-
notEvaluated: stallGaps.map((gap) => gap.roleId),
|
|
1092
|
-
},
|
|
1093
|
-
};
|
|
1094
|
-
};
|
|
1095
|
-
const fanOut = await driveNonChairFanOut();
|
|
1096
|
-
const first = fanOut.dispatch;
|
|
1097
|
-
const advisorLifecycleSummary = fanOut.lifecycle;
|
|
1098
|
-
let roleResults = [
|
|
1099
|
-
...existingRoleResults.filter((result) => result.roleId !== 'chair'),
|
|
1100
|
-
...first.results,
|
|
1101
|
-
];
|
|
1102
|
-
let modelCalls = first.modelCalls;
|
|
1103
|
-
let blocked = first.blocked;
|
|
1104
|
-
const dispatchProvenance = [...first.provenance];
|
|
1105
|
-
const skipped = [...first.skipped];
|
|
1106
|
-
const failed = [...first.failed];
|
|
1107
|
-
// FR2: the governed gaps opened while resolving each dispatched role's
|
|
1108
|
-
// citations (unresolvable-citation, empty-grounding) are recorded alongside
|
|
1109
|
-
// the cycle's other gaps.
|
|
1110
|
-
const dispatchGaps = [...first.gaps];
|
|
1111
|
-
let chairBoard;
|
|
1112
|
-
if (config.enabledRoles.includes('chair')) {
|
|
1113
|
-
// FR1: the Chair dispatches its own mandate and investigates independently —
|
|
1114
|
-
// it no longer receives a synthesized advisor-results evidence body. Its
|
|
1115
|
-
// proposals cite resolvable content the same way every other lens does.
|
|
1116
|
-
let chairReadiness = await buildDispatchReadiness({
|
|
1117
|
-
cycleId: cycle.id,
|
|
1118
|
-
roles: ['chair'],
|
|
1119
|
-
pinnedRevision: workspace.controlRepository.pinnedRevision,
|
|
1120
|
-
sensitivityCeiling: preferences.sensitivityCeiling,
|
|
1121
|
-
now,
|
|
1122
|
-
});
|
|
1123
|
-
chairReadiness = await remapReadinessGaps(chairReadiness, {
|
|
1124
|
-
...initialState,
|
|
1125
|
-
dataGaps: [
|
|
1126
|
-
...initialState.dataGaps,
|
|
1127
|
-
...readiness.roles
|
|
1128
|
-
.filter((role) => role.gapId)
|
|
1129
|
-
.map((role) => ({ id: role.gapId, status: 'open' })),
|
|
1130
|
-
],
|
|
1131
|
-
});
|
|
1132
|
-
readiness = {
|
|
1133
|
-
...readiness,
|
|
1134
|
-
roles: [...readiness.roles, ...chairReadiness.roles],
|
|
1135
|
-
};
|
|
1136
|
-
await assertOperatingArtifact('operating-evidence-readiness', readiness);
|
|
1137
|
-
await assertCycleWorkspace();
|
|
1138
|
-
const persistedChair = existingByRole.get('chair');
|
|
1139
|
-
const runnableChair = chairReadiness.roles.filter((role) => role.modelCallAllowed && !persistedChair);
|
|
1140
|
-
if (input.deferAdvisors && runnableChair.length > 0) {
|
|
1141
|
-
return {
|
|
1142
|
-
preview: false,
|
|
1143
|
-
dryRun: false,
|
|
1144
|
-
cycle,
|
|
1145
|
-
evidence,
|
|
1146
|
-
readiness,
|
|
1147
|
-
roleResults,
|
|
1148
|
-
findings: [],
|
|
1149
|
-
decisions: [],
|
|
1150
|
-
gaps: readinessGaps(readiness, config.decisionOwner, timestamp),
|
|
1151
|
-
routes: [],
|
|
1152
|
-
provider: null,
|
|
1153
|
-
modelCalls,
|
|
1154
|
-
warnings: ['Native Chair execution is required before consolidation.'],
|
|
1155
|
-
nativeHandoff: {
|
|
1156
|
-
phase: 'chair',
|
|
1157
|
-
cycleId: cycle.id,
|
|
1158
|
-
evidenceDigest: evidence.fingerprint,
|
|
1159
|
-
roles: ['chair'],
|
|
1160
|
-
},
|
|
1161
|
-
};
|
|
1162
|
-
}
|
|
1163
|
-
// FR13 (SPEC-005 T-015): assemble the Chair's grounded input from the
|
|
1164
|
-
// partial, honestly-labelled non-chair board with T-004's assembler, then
|
|
1165
|
-
// feed its contributions and named-gap lines into the Chair mandate. The
|
|
1166
|
-
// integrity summary (built from the cycle's committed + dispatch gaps), the
|
|
1167
|
-
// dispatch `failed` list, and the citation gate's rejected proposal keys are
|
|
1168
|
-
// threaded in so every not-evaluated / failed / still-running /
|
|
1169
|
-
// citation-rejected lens is surfaced to the Chair as a gap it must NOT
|
|
1170
|
-
// synthesize around. Absent lenses contribute ZERO proposal items to the
|
|
1171
|
-
// grounded evidence by construction — the assembler only synthesizes from
|
|
1172
|
-
// roles that recorded a result.
|
|
1173
|
-
const nonChairResults = roleResults.filter((result) => result.roleId !== 'chair');
|
|
1174
|
-
// Citation rejections / boundary refusals come from the cycle's committed +
|
|
1175
|
-
// dispatch gaps (category-bearing v1.3 gaps read in-memory). The stalled
|
|
1176
|
-
// lenses' not_evaluated classification is sourced directly from the driver's
|
|
1177
|
-
// in-memory governed gaps — its authoritative record of what did NOT
|
|
1178
|
-
// evaluate and WHY — rather than from a persisted category, so the Chair
|
|
1179
|
-
// sees every absent perspective with its real reason.
|
|
1180
|
-
const baseIntegrity = buildOperatingIntegritySummary({
|
|
1181
|
-
...initialState,
|
|
1182
|
-
dataGaps: [...initialState.dataGaps, ...dispatchGaps],
|
|
1183
|
-
}, cycle.id);
|
|
1184
|
-
const stallNotEvaluatedRoles = (advisorLifecycleSummary?.gaps ?? []).map((gap) => ({
|
|
1185
|
-
roleId: gap.roleId,
|
|
1186
|
-
gapId: `GAP-lifecycle-${gap.roleId}`,
|
|
1187
|
-
reason: gap.reason,
|
|
1188
|
-
detail: gap.reason,
|
|
1189
|
-
}));
|
|
1190
|
-
// SPEC-005 T-019 (FR5/FR13): reconstruct the citation-rejection signal for the
|
|
1191
|
-
// agent-native adapter-lifecycle path. On that path a fully citation-rejected
|
|
1192
|
-
// lens commits a quiet result in a PRIOR `run` (via `operateAdapterLifecycle`'s
|
|
1193
|
-
// record step), which persists the citation gate's governed gaps
|
|
1194
|
-
// (`maintenance.ts`). On THIS consolidation continuation the role is already
|
|
1195
|
-
// recorded, so it is never re-dispatched and its category-bearing v1.3 gaps are
|
|
1196
|
-
// never rebuilt in memory — `dispatchGaps` is empty. The persisted gaps carry
|
|
1197
|
-
// no `category` (the v1.2 append-log projection T-017 uses drops it, and the
|
|
1198
|
-
// reducer projects it away regardless), so `buildOperatingIntegritySummary`
|
|
1199
|
-
// cannot re-derive the signal from committed state, and the lens would fall
|
|
1200
|
-
// through to a false-clean `recorded-quiet`.
|
|
1201
|
-
//
|
|
1202
|
-
// Carry T-017's signal across that boundary using the SAME co-occurring
|
|
1203
|
-
// structural fact its classifier keys on — never the gap's prose: a lens that
|
|
1204
|
-
// recorded a result grounding ZERO proposals AND is named by a governed cycle
|
|
1205
|
-
// gap was citation-rejected (the citation gate is the only producer of a
|
|
1206
|
-
// role-affecting gap at record time on this path). Layer those as
|
|
1207
|
-
// `citationRejections` onto the Chair integrity exactly as the stall
|
|
1208
|
-
// not_evaluated roles are layered above, skipping any role `baseIntegrity`
|
|
1209
|
-
// already classified (so the inline path — whose in-memory `dispatchGaps` still
|
|
1210
|
-
// carry `category` — is untouched and T-017's inline proof stays green).
|
|
1211
|
-
const recordedZeroGroundedRoles = new Set(nonChairResults
|
|
1212
|
-
.filter((result) => result.proposals.length === 0)
|
|
1213
|
-
.map((result) => result.roleId));
|
|
1214
|
-
const alreadyClassifiedRoles = new Set([
|
|
1215
|
-
...baseIntegrity.citationRejections.flatMap((entry) => entry.affectedRoles),
|
|
1216
|
-
...baseIntegrity.boundaryRefusals.flatMap((entry) => entry.affectedRoles),
|
|
1217
|
-
...baseIntegrity.notEvaluatedRoles.map((role) => role.roleId),
|
|
1218
|
-
...stallNotEvaluatedRoles.map((role) => role.roleId),
|
|
1219
|
-
]);
|
|
1220
|
-
const nativeCitationRejections = [];
|
|
1221
|
-
for (const roleId of [...recordedZeroGroundedRoles].sort()) {
|
|
1222
|
-
if (alreadyClassifiedRoles.has(roleId))
|
|
1223
|
-
continue;
|
|
1224
|
-
const namingGap = initialState.dataGaps
|
|
1225
|
-
.filter((gap) => (gap.cycleId === undefined || gap.cycleId === cycle.id) &&
|
|
1226
|
-
Array.isArray(gap.affectedRoles) &&
|
|
1227
|
-
gap.affectedRoles.includes(roleId))
|
|
1228
|
-
.sort((left, right) => String(left.id).localeCompare(String(right.id)))[0];
|
|
1229
|
-
if (!namingGap)
|
|
1230
|
-
continue;
|
|
1231
|
-
const reason = String(namingGap.reason ?? '').trim();
|
|
1232
|
-
const detail = String(namingGap.question ?? '').trim();
|
|
1233
|
-
nativeCitationRejections.push({
|
|
1234
|
-
gapId: String(namingGap.id),
|
|
1235
|
-
reason: reason || 'A cited location could not be resolved to evidence.',
|
|
1236
|
-
detail: detail || 'Every citation this role returned failed to resolve to evidence.',
|
|
1237
|
-
affectedRoles: [roleId],
|
|
1238
|
-
});
|
|
1239
|
-
}
|
|
1240
|
-
// SPEC-005 T-020 (FR13): a lens dispatched but that never returned — a true
|
|
1241
|
-
// stall, terminated via `harness abandon` (runtime) or the operator escape —
|
|
1242
|
-
// commits NO result at all, only a governed terminal gap (`maintenance.ts`
|
|
1243
|
-
// `governTerminalNotEvaluated`). It is the inverse of T-019's citation-rejected
|
|
1244
|
-
// case (which DID record a zero-grounded result), so it is reconstructed the
|
|
1245
|
-
// same structural way, keyed on the same committed-state fact and never gap
|
|
1246
|
-
// prose: a non-chair enabled lens with NO committed result that is named by an
|
|
1247
|
-
// open governed cycle gap is `not_evaluated`, carrying that gap's reason and
|
|
1248
|
-
// id. This keeps it a distinct `not-evaluated` outcome — never citation-rejected
|
|
1249
|
-
// (which requires a recorded result), never a fabricated conclusion — so the
|
|
1250
|
-
// Chair names it as an explicit gap it must not synthesize around, and it
|
|
1251
|
-
// contributes zero grounded proposal items by construction (it recorded none).
|
|
1252
|
-
const recordedNonChairRoles = new Set(nonChairResults.map((result) => result.roleId));
|
|
1253
|
-
const nativeNotEvaluatedRoles = [];
|
|
1254
|
-
for (const roleId of [...nonChair].sort()) {
|
|
1255
|
-
if (recordedNonChairRoles.has(roleId))
|
|
1256
|
-
continue;
|
|
1257
|
-
if (alreadyClassifiedRoles.has(roleId))
|
|
1258
|
-
continue;
|
|
1259
|
-
const namingGap = initialState.dataGaps
|
|
1260
|
-
.filter((gap) => (gap.cycleId === undefined || gap.cycleId === cycle.id) &&
|
|
1261
|
-
!['closed', 'superseded'].includes(String(gap.status)) &&
|
|
1262
|
-
Array.isArray(gap.affectedRoles) &&
|
|
1263
|
-
gap.affectedRoles.includes(roleId))
|
|
1264
|
-
.sort((left, right) => String(left.id).localeCompare(String(right.id)))[0];
|
|
1265
|
-
if (!namingGap)
|
|
1266
|
-
continue;
|
|
1267
|
-
const reason = String(namingGap.reason ?? '').trim();
|
|
1268
|
-
const detail = String(namingGap.question ?? '').trim();
|
|
1269
|
-
nativeNotEvaluatedRoles.push({
|
|
1270
|
-
roleId,
|
|
1271
|
-
gapId: String(namingGap.id),
|
|
1272
|
-
reason: reason || 'The lens was dispatched but never recorded a result.',
|
|
1273
|
-
detail: detail ||
|
|
1274
|
-
'The lens was dispatched but never recorded a result; it is recorded not_evaluated.',
|
|
1275
|
-
});
|
|
1276
|
-
}
|
|
1277
|
-
const chairIntegrity = {
|
|
1278
|
-
...baseIntegrity,
|
|
1279
|
-
citationRejections: [...baseIntegrity.citationRejections, ...nativeCitationRejections],
|
|
1280
|
-
notEvaluatedRoles: [
|
|
1281
|
-
...baseIntegrity.notEvaluatedRoles,
|
|
1282
|
-
...stallNotEvaluatedRoles,
|
|
1283
|
-
...nativeNotEvaluatedRoles,
|
|
1284
|
-
],
|
|
1285
|
-
hasConcerns: baseIntegrity.hasConcerns ||
|
|
1286
|
-
stallNotEvaluatedRoles.length > 0 ||
|
|
1287
|
-
nativeCitationRejections.length > 0 ||
|
|
1288
|
-
nativeNotEvaluatedRoles.length > 0,
|
|
1289
|
-
};
|
|
1290
|
-
// The grounded evidence-of-record the recorded proposals cite: read back
|
|
1291
|
-
// from the citation snapshots the dispatch-time gate minted, so
|
|
1292
|
-
// `buildChairEvidence` resolves every recorded proposal's evidenceRefs
|
|
1293
|
-
// instead of the body-free pinned-revision seed (whose `items` are empty).
|
|
1294
|
-
const chairGroundedEvidence = await assembleCitationEvidence({
|
|
1295
|
-
cycleId: cycle.id,
|
|
1296
|
-
roleResults: nonChairResults,
|
|
1297
|
-
cache: citationCache,
|
|
1298
|
-
baseFingerprint: evidence.fingerprint,
|
|
1299
|
-
now: timestamp,
|
|
1300
|
-
});
|
|
1301
|
-
chairBoard = assembleChairBoardInput(chairGroundedEvidence, nonChairResults, timestamp, {
|
|
1302
|
-
expectedRoles: nonChair,
|
|
1303
|
-
integrity: chairIntegrity,
|
|
1304
|
-
failedReasons: Object.fromEntries(failed.map((entry) => [entry.roleId, entry.message])),
|
|
1305
|
-
// Recorded results are already citation-gated at dispatch time, so no
|
|
1306
|
-
// recorded proposal is outstanding-rejected here; a role whose proposals
|
|
1307
|
-
// were all rejected committed not_evaluated and is classified via the
|
|
1308
|
-
// integrity summary's missing-evidence gaps above.
|
|
1309
|
-
rejectedProposalKeys: {},
|
|
1310
|
-
});
|
|
1311
|
-
// Layer the named-gap lines onto the Chair's context so a real runtime agent
|
|
1312
|
-
// sees each absent perspective explicitly. The offline/test adapter ignores
|
|
1313
|
-
// context, so the machine-checked proof of the wiring is the exposed
|
|
1314
|
-
// `chairBoard`; the Chair still investigates independently and receives no
|
|
1315
|
-
// synthesized advisor conclusions — only the honest record of what did NOT
|
|
1316
|
-
// evaluate, which it must surface as a gap rather than fabricate around.
|
|
1317
|
-
const chairAdvisorContext = {
|
|
1318
|
-
...advisorContext,
|
|
1319
|
-
openGaps: [
|
|
1320
|
-
...advisorContext.openGaps,
|
|
1321
|
-
...chairBoard.gaps.map((line, index) => ({
|
|
1322
|
-
id: `BOARD-GAP-${String(index + 1).padStart(3, '0')}`,
|
|
1323
|
-
status: 'open',
|
|
1324
|
-
summary: line,
|
|
1325
|
-
owner: null,
|
|
1326
|
-
evidenceRefs: [],
|
|
1327
|
-
affectedRoles: ['chair'],
|
|
1328
|
-
})),
|
|
1329
|
-
],
|
|
1330
|
-
};
|
|
1331
|
-
const chair = persistedChair
|
|
1332
|
-
? {
|
|
1333
|
-
results: [persistedChair],
|
|
1334
|
-
provenance: [],
|
|
1335
|
-
modelCalls: 0,
|
|
1336
|
-
blocked: false,
|
|
1337
|
-
skipped: [],
|
|
1338
|
-
failed: [],
|
|
1339
|
-
gaps: [],
|
|
1340
|
-
}
|
|
1341
|
-
: await dispatchOperatingAdvisors({
|
|
1342
|
-
cycleId: cycle.id,
|
|
1343
|
-
projectRoot,
|
|
1344
|
-
pinnedRevision: workspace.controlRepository.pinnedRevision,
|
|
1345
|
-
readiness: chairReadiness,
|
|
1346
|
-
context: chairAdvisorContext,
|
|
1347
|
-
adapter: await resolveAdapter(),
|
|
1348
|
-
depth,
|
|
1349
|
-
runtime: resolvedRuntime,
|
|
1350
|
-
resolveCitations,
|
|
1351
|
-
});
|
|
1352
|
-
roleResults = [...roleResults, ...chair.results];
|
|
1353
|
-
modelCalls += chair.modelCalls;
|
|
1354
|
-
dispatchProvenance.push(...chair.provenance);
|
|
1355
|
-
skipped.push(...chair.skipped);
|
|
1356
|
-
failed.push(...chair.failed);
|
|
1357
|
-
dispatchGaps.push(...chair.gaps);
|
|
1358
|
-
blocked ||= chair.blocked || chairReadiness.roles.some((role) => !role.modelCallAllowed);
|
|
1359
|
-
}
|
|
1360
|
-
const technologyRiskReady = readiness.roles.some((role) => role.roleId === 'technology-risk' && role.modelCallAllowed);
|
|
1361
|
-
const technologyRiskFailed = failed.some((entry) => entry.roleId === 'technology-risk');
|
|
1362
|
-
const sensitiveRouteBlocked = containsSensitiveRouteProposal(roleResults) && (!technologyRiskReady || technologyRiskFailed);
|
|
1363
|
-
blocked ||= sensitiveRouteBlocked;
|
|
1364
|
-
// FR2/FR3 / E-003: the universal citation gate. Every dispatched role already
|
|
1365
|
-
// resolved its citations at dispatch time (the committed result is v1.2-valid
|
|
1366
|
-
// with minted evidenceRefs, no raw citations), so re-running the gate over the
|
|
1367
|
-
// full role set — including any natively-committed existing results — is a
|
|
1368
|
-
// no-op that provides defence in depth and a single point where consolidation
|
|
1369
|
-
// input is proven citation-clean.
|
|
1370
|
-
const citationGate = await resolveCitations(roleResults);
|
|
1371
|
-
// FR2 (evidence-as-output): the cycle's evidence-of-record is assembled from
|
|
1372
|
-
// the resolved-citation snapshots, so confidence/sensitivity/freshness scoring
|
|
1373
|
-
// resolves against what was actually cited and verified — never a pre-collected
|
|
1374
|
-
// guess. This replaces the retired collected-evidence consolidation input.
|
|
1375
|
-
const consolidationEvidence = await assembleCitationEvidence({
|
|
1376
|
-
cycleId: cycle.id,
|
|
1377
|
-
roleResults: citationGate.roleResults,
|
|
1378
|
-
cache: citationCache,
|
|
1379
|
-
baseFingerprint: evidence.fingerprint,
|
|
1380
|
-
now: timestamp,
|
|
1381
|
-
});
|
|
1382
|
-
// Only the gated proposals feed consolidation, so a proposal with an
|
|
1383
|
-
// unresolvable citation can never become a finding/route. The rejection is
|
|
1384
|
-
// recorded as the opened unresolvable-citation gap threaded into `gaps` below.
|
|
1385
|
-
const consolidated = await consolidateOperatingResults({
|
|
1386
|
-
cycleId: cycle.id,
|
|
1387
|
-
results: citationGate.roleResults,
|
|
1388
|
-
evidence: consolidationEvidence,
|
|
1389
|
-
config,
|
|
1390
|
-
now: timestamp,
|
|
1391
|
-
existingGapCount: initialState.dataGaps.length,
|
|
1392
|
-
});
|
|
1393
|
-
const failureGaps = await advisorFailureGaps({
|
|
1394
|
-
cycleId: cycle.id,
|
|
1395
|
-
failed,
|
|
1396
|
-
readiness,
|
|
1397
|
-
owner: config.decisionOwner,
|
|
1398
|
-
now: timestamp,
|
|
1399
|
-
});
|
|
1400
|
-
// FR3 (SPEC-005 T-015): the governed data gaps for lenses the lifecycle driver
|
|
1401
|
-
// terminated not_evaluated (a stall past the retry budget). They join the
|
|
1402
|
-
// consolidation gap set so `remapConsolidation` mints their canonical `GAP-NNN`
|
|
1403
|
-
// ids alongside every other cycle gap, then persist and render like any other
|
|
1404
|
-
// governed gap — so `status`/`report` show a stalled lens honestly.
|
|
1405
|
-
const lifecycleNotEvaluatedGaps = (advisorLifecycleSummary?.gaps ?? []).map((gap) => driverNotEvaluatedGap(gap, cycle.id, config.decisionOwner, timestamp));
|
|
1406
|
-
const surfacedDedup = suppressRepeatedFindings(initialState, consolidated.findings, cycle.id);
|
|
1407
|
-
const overflowDedup = suppressRepeatedFindings(initialState, consolidated.criticalOverflow, cycle.id);
|
|
1408
|
-
const parkedDedup = suppressRepeatedFindings(initialState, consolidated.parked, cycle.id);
|
|
1409
|
-
const suppressedFindings = surfacedDedup.suppressed + overflowDedup.suppressed + parkedDedup.suppressed;
|
|
1410
|
-
const criticalOverflowCount = overflowDedup.findings.length;
|
|
1411
|
-
blocked ||= criticalOverflowCount > 0;
|
|
1412
|
-
const remapped = remapConsolidation({
|
|
1413
|
-
...initialState,
|
|
1414
|
-
dataGaps: [
|
|
1415
|
-
...initialState.dataGaps,
|
|
1416
|
-
...readiness.roles
|
|
1417
|
-
.filter((role) => role.gapId)
|
|
1418
|
-
.map((role) => ({ id: role.gapId, status: 'open' })),
|
|
1419
|
-
],
|
|
1420
|
-
}, [...surfacedDedup.findings, ...overflowDedup.findings], parkedDedup.findings, consolidated.decisions, [...evidenceGaps, ...consolidated.gaps, ...failureGaps, ...lifecycleNotEvaluatedGaps]);
|
|
1421
|
-
const warnings = [
|
|
1422
|
-
...evidence.warnings,
|
|
1423
|
-
...(evidenceGaps.length > 0
|
|
1424
|
-
? [
|
|
1425
|
-
`${evidenceGaps.length} numeric commercial evidence item(s) require query and observation-window identity.`,
|
|
1426
|
-
]
|
|
1427
|
-
: []),
|
|
1428
|
-
...skipped.map((entry) => `${entry.roleId} not evaluated: ${entry.reason}`),
|
|
1429
|
-
...failed.map((entry) => `${entry.roleId} failed: ${entry.message}`),
|
|
1430
|
-
...(sensitiveRouteBlocked
|
|
1431
|
-
? [
|
|
1432
|
-
'Sensitive payment/security/privacy/legal/tenant/destructive routing is blocked until technology-risk completes.',
|
|
1433
|
-
]
|
|
1434
|
-
: []),
|
|
1435
|
-
...(criticalOverflowCount > 0
|
|
1436
|
-
? [
|
|
1437
|
-
`${criticalOverflowCount} verified critical finding(s) exceeded a configured cap; the cycle is blocked instead of parking them.`,
|
|
1438
|
-
]
|
|
1439
|
-
: []),
|
|
1440
|
-
...(suppressedFindings > 0
|
|
1441
|
-
? [
|
|
1442
|
-
`${suppressedFindings} unchanged cross-cycle finding(s) were suppressed instead of duplicated.`,
|
|
1443
|
-
]
|
|
1444
|
-
: []),
|
|
1445
|
-
];
|
|
1446
|
-
if (blocked)
|
|
1447
|
-
warnings.push('The cycle is blocked by required advisor evidence or failure.');
|
|
1448
|
-
const reconciledFindings = reconcileCycleFindings(initial.events, cycle.id, remapped.findings);
|
|
1449
|
-
const reconciledParked = reconcileCycleFindings(initial.events, cycle.id, remapped.parked);
|
|
1450
|
-
return {
|
|
1451
|
-
preview: false,
|
|
1452
|
-
dryRun: !persist,
|
|
1453
|
-
cycle,
|
|
1454
|
-
evidence,
|
|
1455
|
-
readiness,
|
|
1456
|
-
roleResults,
|
|
1457
|
-
findings: [...reconciledFindings, ...reconciledParked],
|
|
1458
|
-
decisions: remapped.decisions,
|
|
1459
|
-
// Citation gaps bypass remapConsolidation (their IDs are digest-derived and
|
|
1460
|
-
// already canonical) and are persisted alongside the cycle's other gaps.
|
|
1461
|
-
// `dispatchGaps` are the unresolvable-citation/empty-grounding gaps opened
|
|
1462
|
-
// while resolving each role's citations at dispatch time; `citationGate.gaps`
|
|
1463
|
-
// covers the no-op consolidation-time re-gate (empty in practice).
|
|
1464
|
-
gaps: [
|
|
1465
|
-
...readinessGaps(readiness, config.decisionOwner, timestamp),
|
|
1466
|
-
...remapped.gaps,
|
|
1467
|
-
...dispatchGaps,
|
|
1468
|
-
...citationGate.gaps,
|
|
1469
|
-
],
|
|
1470
|
-
routes: [],
|
|
1471
|
-
provider,
|
|
1472
|
-
modelCalls,
|
|
1473
|
-
warnings,
|
|
1474
|
-
dispatchProvenance,
|
|
1475
|
-
...(advisorLifecycleSummary ? { advisorLifecycle: advisorLifecycleSummary } : {}),
|
|
1476
|
-
...(chairBoard ? { chairBoard } : {}),
|
|
1477
|
-
};
|
|
1478
|
-
};
|
|
1479
|
-
if (input.dryRun)
|
|
1480
|
-
return evaluate(false);
|
|
1481
|
-
const cycleResult = await withOperatingLock(projectRoot, {
|
|
1482
|
-
projectKey: operatingProjectKey(projectRoot),
|
|
1483
|
-
expectedEventHead: initial.eventHead,
|
|
1484
|
-
currentEventHead: initial.eventHead,
|
|
1485
|
-
localRoot: input.localRoot,
|
|
1486
|
-
}, async (lock) => {
|
|
1487
|
-
const latest = await store.replay();
|
|
1488
|
-
if (latest.eventHead.sequence !== initial.eventHead.sequence ||
|
|
1489
|
-
latest.eventHead.hash !== initial.eventHead.hash) {
|
|
1490
|
-
throw new OperateError('E_OPERATE_HEAD_DIVERGED', 'Operating state changed while preparing the cycle.');
|
|
1491
|
-
}
|
|
1492
|
-
let head = initial.eventHead;
|
|
1493
|
-
let started = Boolean(current);
|
|
1494
|
-
let phase = current?.state ?? null;
|
|
1495
|
-
const correlationId = randomUUID();
|
|
1496
|
-
try {
|
|
1497
|
-
await assertCycleWorkspace();
|
|
1498
|
-
if (!current) {
|
|
1499
|
-
const prepared = await appendLocked(store, lock, head, {
|
|
1500
|
-
type: 'cycle.preparing',
|
|
1501
|
-
cycleId: cycle.id,
|
|
1502
|
-
entityId: cycle.id,
|
|
1503
|
-
correlationId,
|
|
1504
|
-
payload: { record: cycle },
|
|
1505
|
-
});
|
|
1506
|
-
started = true;
|
|
1507
|
-
head = prepared.head;
|
|
1508
|
-
phase = 'preparing';
|
|
1509
|
-
}
|
|
1510
|
-
if (phase === 'preparing' || phase === 'blocked') {
|
|
1511
|
-
const collecting = await appendLocked(store, lock, head, {
|
|
1512
|
-
type: 'cycle.collecting',
|
|
1513
|
-
cycleId: cycle.id,
|
|
1514
|
-
entityId: cycle.id,
|
|
1515
|
-
correlationId,
|
|
1516
|
-
payload: {},
|
|
1517
|
-
});
|
|
1518
|
-
head = collecting.head;
|
|
1519
|
-
phase = 'collecting';
|
|
1520
|
-
}
|
|
1521
|
-
const evaluated = await evaluate(true);
|
|
1522
|
-
await assertCycleWorkspace();
|
|
1523
|
-
const evidence = evaluated.evidence;
|
|
1524
|
-
if (phase === 'collecting') {
|
|
1525
|
-
if (!existingEvidence) {
|
|
1526
|
-
const evidenceRecord = await store.putRecord('evidence-metadata', recordContent(evidence), { correlationId, createdAt: timestamp });
|
|
1527
|
-
const cache = new OperatingEvidenceCache(resolveOperatingPaths(projectRoot, { localRoot: input.localRoot }).evidence, preferences.sensitivityCeiling);
|
|
1528
|
-
await cache.put(evidence.fingerprint.slice('sha256:'.length), evidence, preferences.evidenceTtlMs, now);
|
|
1529
|
-
const evidenceEvent = await appendLocked(store, lock, head, {
|
|
1530
|
-
type: 'evidence.collected',
|
|
1531
|
-
cycleId: cycle.id,
|
|
1532
|
-
entityId: cycle.id,
|
|
1533
|
-
correlationId,
|
|
1534
|
-
evidenceRefs: evidence.items.map((item) => item.id),
|
|
1535
|
-
payload: {
|
|
1536
|
-
recordDigest: evidenceRecord.digest,
|
|
1537
|
-
sources: evidenceProjectionSources(evidence),
|
|
1538
|
-
},
|
|
1539
|
-
});
|
|
1540
|
-
head = evidenceEvent.head;
|
|
1541
|
-
}
|
|
1542
|
-
const advising = await appendLocked(store, lock, head, {
|
|
1543
|
-
type: 'cycle.advising',
|
|
1544
|
-
cycleId: cycle.id,
|
|
1545
|
-
entityId: cycle.id,
|
|
1546
|
-
correlationId,
|
|
1547
|
-
payload: {},
|
|
1548
|
-
});
|
|
1549
|
-
head = advising.head;
|
|
1550
|
-
phase = 'advising';
|
|
1551
|
-
}
|
|
1552
|
-
if (phase === 'advising' && evaluated.nativeHandoff) {
|
|
1553
|
-
const state = await store.state();
|
|
1554
|
-
await store.writeCheckpoint(state);
|
|
1555
|
-
await persistOperatingProjections({
|
|
1556
|
-
projectRoot,
|
|
1557
|
-
localRoot: input.localRoot,
|
|
1558
|
-
state,
|
|
1559
|
-
revalidateEventHead: async () => (await store.replay()).eventHead,
|
|
1560
|
-
});
|
|
1561
|
-
// FR5 (SPEC-005 T-002): the status-facing summary this native handoff
|
|
1562
|
-
// returns reflects LIVE persisted role results — every lens the harness
|
|
1563
|
-
// has already committed to the canonical event log, re-read here from the
|
|
1564
|
-
// freshest replay rather than the call-entry snapshot. Combined with the
|
|
1565
|
-
// harness recording each role's event the moment it validates (not only
|
|
1566
|
-
// at finalize), a `run` re-entered mid fan-out reports exactly the roles
|
|
1567
|
-
// that are durably recorded, never a stale "nothing recorded yet" view.
|
|
1568
|
-
const livePersistedRoleResults = await persistedCycleRoleResults(store, (await store.replay()).events, cycle.id);
|
|
1569
|
-
return {
|
|
1570
|
-
...evaluated,
|
|
1571
|
-
roleResults: livePersistedRoleResults.filter((result) => result.roleId !== 'chair'),
|
|
1572
|
-
state,
|
|
1573
|
-
};
|
|
1574
|
-
}
|
|
1575
|
-
if (phase === 'advising') {
|
|
1576
|
-
const recordedRoles = new Set(existingRoleResults.map((result) => result.roleId));
|
|
1577
|
-
for (const result of evaluated.roleResults ?? []) {
|
|
1578
|
-
if (recordedRoles.has(result.roleId))
|
|
1579
|
-
continue;
|
|
1580
|
-
const record = await store.putRecord('advisor-result', recordContent(result), {
|
|
1581
|
-
correlationId,
|
|
1582
|
-
createdAt: timestamp,
|
|
1583
|
-
});
|
|
1584
|
-
const appended = await appendLocked(store, lock, head, {
|
|
1585
|
-
type: 'advisory.recorded',
|
|
1586
|
-
cycleId: cycle.id,
|
|
1587
|
-
entityId: `${cycle.id}-${result.roleId}`,
|
|
1588
|
-
correlationId,
|
|
1589
|
-
evidenceRefs: result.proposals.flatMap((proposal) => proposal.evidenceRefs),
|
|
1590
|
-
payload: { recordDigest: record.digest },
|
|
1591
|
-
});
|
|
1592
|
-
head = appended.head;
|
|
1593
|
-
}
|
|
1594
|
-
const existingGapIds = new Set(initialState.dataGaps.filter((gap) => gap.cycleId === cycle.id).map((gap) => gap.id));
|
|
1595
|
-
// FR2/FR13 (T-017): a citation-rejection / empty-grounding gap is a
|
|
1596
|
-
// Protocol v1.3 gap in memory (category + digest id), where the Chair
|
|
1597
|
-
// board reads its category to classify the role. The append log and the
|
|
1598
|
-
// gap.open/operating-record schemas only admit a v1.2 data gap, so
|
|
1599
|
-
// persist each gap in its v1.2 projection (canonical `GAP-NNN` id, no
|
|
1600
|
-
// v1.3-only fields) — lossless for replayed state, which drops category
|
|
1601
|
-
// regardless. Seed the ordinal past every canonical id already present in
|
|
1602
|
-
// committed state and this batch so a minted id never collides.
|
|
1603
|
-
let gapOrdinal = maximumOrdinal([...initialState.dataGaps, ...(evaluated.gaps ?? [])], 'GAP');
|
|
1604
|
-
for (const rawGap of evaluated.gaps ?? []) {
|
|
1605
|
-
const gap = toPersistedDataGap(rawGap, () => `GAP-${String(++gapOrdinal).padStart(3, '0')}`);
|
|
1606
|
-
if (existingGapIds.has(rawGap.id) || existingGapIds.has(gap.id))
|
|
1607
|
-
continue;
|
|
1608
|
-
await assertOperatingArtifact('operating-data-gap', gap);
|
|
1609
|
-
await store.putRecord('data-gap', recordContent(gap), {
|
|
1610
|
-
correlationId,
|
|
1611
|
-
createdAt: timestamp,
|
|
1612
|
-
});
|
|
1613
|
-
const appended = await appendLocked(store, lock, head, {
|
|
1614
|
-
type: 'gap.open',
|
|
1615
|
-
cycleId: cycle.id,
|
|
1616
|
-
entityId: gap.id,
|
|
1617
|
-
correlationId,
|
|
1618
|
-
evidenceRefs: gap.evidenceRefs,
|
|
1619
|
-
payload: { record: gap },
|
|
1620
|
-
});
|
|
1621
|
-
head = appended.head;
|
|
1622
|
-
}
|
|
1623
|
-
}
|
|
1624
|
-
if (phase === 'advising' &&
|
|
1625
|
-
evaluated.warnings.some((warning) => warning.includes('cycle is blocked'))) {
|
|
1626
|
-
const blocked = await appendLocked(store, lock, head, {
|
|
1627
|
-
type: 'cycle.blocked',
|
|
1628
|
-
cycleId: cycle.id,
|
|
1629
|
-
entityId: cycle.id,
|
|
1630
|
-
correlationId,
|
|
1631
|
-
payload: { patch: { health: 'blocked' }, warnings: evaluated.warnings },
|
|
1632
|
-
});
|
|
1633
|
-
head = blocked.head;
|
|
1634
|
-
const state = await store.state();
|
|
1635
|
-
await store.writeCheckpoint(state);
|
|
1636
|
-
await persistOperatingProjections({
|
|
1637
|
-
projectRoot,
|
|
1638
|
-
localRoot: input.localRoot,
|
|
1639
|
-
state,
|
|
1640
|
-
revalidateEventHead: async () => (await store.replay()).eventHead,
|
|
1641
|
-
});
|
|
1642
|
-
return { ...evaluated, state };
|
|
1643
|
-
}
|
|
1644
|
-
if (phase === 'advising') {
|
|
1645
|
-
const consolidating = await appendLocked(store, lock, head, {
|
|
1646
|
-
type: 'cycle.consolidating',
|
|
1647
|
-
cycleId: cycle.id,
|
|
1648
|
-
entityId: cycle.id,
|
|
1649
|
-
correlationId,
|
|
1650
|
-
payload: {},
|
|
1651
|
-
});
|
|
1652
|
-
head = consolidating.head;
|
|
1653
|
-
phase = 'consolidating';
|
|
1654
|
-
}
|
|
1655
|
-
const existingFindingIds = new Set(initialState.findings
|
|
1656
|
-
.filter((finding) => finding.cycleId === cycle.id)
|
|
1657
|
-
.map((finding) => finding.id));
|
|
1658
|
-
for (const finding of evaluated.findings ?? []) {
|
|
1659
|
-
if (existingFindingIds.has(finding.id))
|
|
1660
|
-
continue;
|
|
1661
|
-
await store.putRecord('finding', recordContent(finding), {
|
|
1662
|
-
correlationId,
|
|
1663
|
-
createdAt: timestamp,
|
|
1664
|
-
});
|
|
1665
|
-
const appended = await appendLocked(store, lock, head, {
|
|
1666
|
-
type: 'finding.proposed',
|
|
1667
|
-
cycleId: cycle.id,
|
|
1668
|
-
entityId: finding.id,
|
|
1669
|
-
correlationId,
|
|
1670
|
-
evidenceRefs: finding.evidenceRefs,
|
|
1671
|
-
payload: { record: finding },
|
|
1672
|
-
});
|
|
1673
|
-
head = appended.head;
|
|
1674
|
-
}
|
|
1675
|
-
const existingDecisionQuestions = new Set(initialState.decisions
|
|
1676
|
-
.filter((decision) => decision.cycleId === cycle.id)
|
|
1677
|
-
.map((decision) => String(decision.question ?? '')));
|
|
1678
|
-
for (const decision of evaluated.decisions ?? []) {
|
|
1679
|
-
if (existingDecisionQuestions.has(decision.question))
|
|
1680
|
-
continue;
|
|
1681
|
-
await store.putRecord('decision', recordContent(decision), {
|
|
1682
|
-
correlationId,
|
|
1683
|
-
createdAt: timestamp,
|
|
1684
|
-
});
|
|
1685
|
-
const appended = await appendLocked(store, lock, head, {
|
|
1686
|
-
type: 'decision.open',
|
|
1687
|
-
cycleId: cycle.id,
|
|
1688
|
-
entityId: decision.id,
|
|
1689
|
-
correlationId,
|
|
1690
|
-
evidenceRefs: decision.evidenceRefs,
|
|
1691
|
-
payload: { record: decision },
|
|
1692
|
-
});
|
|
1693
|
-
head = appended.head;
|
|
1694
|
-
}
|
|
1695
|
-
const routeBase = await store.state();
|
|
1696
|
-
const providerDigest = evaluated.provider?.policyDigest ?? canonicalDigest({ provider: 'offline' });
|
|
1697
|
-
const routes = [];
|
|
1698
|
-
let routeOrdinal = maximumOrdinal(routeBase.routes, 'ACT');
|
|
1699
|
-
let specOrdinal = await nextOperatingSpecOrdinal(projectRoot);
|
|
1700
|
-
const existingRoutedFindingIds = new Set(initial.events
|
|
1701
|
-
.filter((event) => event.type === 'route.proposed' &&
|
|
1702
|
-
event.payload.record &&
|
|
1703
|
-
typeof event.payload.record === 'object')
|
|
1704
|
-
.flatMap((event) => {
|
|
1705
|
-
const record = event.payload.record;
|
|
1706
|
-
return (record.actions ?? [])
|
|
1707
|
-
.map((action) => action.findingId)
|
|
1708
|
-
.filter((findingId) => Boolean(findingId));
|
|
1709
|
-
}));
|
|
1710
|
-
for (const finding of (evaluated.findings ?? []).filter((candidate) => !candidate.parked && !existingRoutedFindingIds.has(candidate.id))) {
|
|
1711
|
-
const isDev = finding.lane === 'DEV';
|
|
1712
|
-
routes.push(await createOperatingRoutePlan({
|
|
1713
|
-
projectRoot,
|
|
1714
|
-
cycleId: cycle.id,
|
|
1715
|
-
finding,
|
|
1716
|
-
config,
|
|
1717
|
-
workspace,
|
|
1718
|
-
eventHead: head,
|
|
1719
|
-
evidenceDigest: evidence.fingerprint,
|
|
1720
|
-
providerDigest,
|
|
1721
|
-
sequence: ++routeOrdinal,
|
|
1722
|
-
localRoot: input.localRoot,
|
|
1723
|
-
...(isDev ? { specId: `SPEC-${String(specOrdinal++).padStart(3, '0')}` } : {}),
|
|
1724
|
-
now: timestamp,
|
|
1725
|
-
}));
|
|
1726
|
-
}
|
|
1727
|
-
if (routes.length > 0) {
|
|
1728
|
-
await assertCycleWorkspace();
|
|
1729
|
-
for (const route of routes) {
|
|
1730
|
-
const relativePath = `.planr/operate/routes/${route.id}.json`;
|
|
1731
|
-
const content = `${canonicalize(route)}\n`;
|
|
1732
|
-
const transactionId = `TXN-${cycle.id}-${route.id}-proposal`;
|
|
1733
|
-
const transactionRoot = path.join(resolveOperatingPaths(projectRoot, { localRoot: input.localRoot }).transactions, transactionId);
|
|
1734
|
-
const manifestPath = path.join(transactionRoot, 'journal.json');
|
|
1735
|
-
const existingBytes = await readFile(path.join(projectRoot, relativePath), 'utf8').catch((error) => {
|
|
1736
|
-
if (error.code === 'ENOENT')
|
|
1737
|
-
return null;
|
|
1738
|
-
throw error;
|
|
1739
|
-
});
|
|
1740
|
-
const journal = existingBytes === null
|
|
1741
|
-
? await prepareJournalTransaction(projectRoot, {
|
|
1742
|
-
writes: [
|
|
1743
|
-
{
|
|
1744
|
-
relativePath,
|
|
1745
|
-
operation: 'create',
|
|
1746
|
-
content,
|
|
1747
|
-
},
|
|
1748
|
-
],
|
|
1749
|
-
eventHead: head,
|
|
1750
|
-
previewDigest: route.previewDigest,
|
|
1751
|
-
transactionId,
|
|
1752
|
-
localRoot: input.localRoot,
|
|
1753
|
-
})
|
|
1754
|
-
: {
|
|
1755
|
-
root: transactionRoot,
|
|
1756
|
-
manifestPath,
|
|
1757
|
-
record: await readJournal(manifestPath),
|
|
1758
|
-
};
|
|
1759
|
-
if (existingBytes !== null) {
|
|
1760
|
-
if (existingBytes !== content ||
|
|
1761
|
-
journal.record.state !== 'committed' ||
|
|
1762
|
-
journal.record.previewDigest !== route.previewDigest) {
|
|
1763
|
-
throw new OperateError('E_OPERATE_TRANSACTION_INVALID', `Orphaned route proposal ${route.id} does not match its committed journal.`);
|
|
1764
|
-
}
|
|
1765
|
-
}
|
|
1766
|
-
else {
|
|
1767
|
-
await applyJournalTransaction(projectRoot, journal, {
|
|
1768
|
-
currentEventHead: head,
|
|
1769
|
-
revalidateEventHead: async () => (await store.replay()).eventHead,
|
|
1770
|
-
});
|
|
1771
|
-
}
|
|
1772
|
-
try {
|
|
1773
|
-
await store.putRecord('route', recordContent(route), {
|
|
1774
|
-
correlationId,
|
|
1775
|
-
createdAt: timestamp,
|
|
1776
|
-
});
|
|
1777
|
-
const appended = await appendLocked(store, lock, head, {
|
|
1778
|
-
type: 'route.proposed',
|
|
1779
|
-
cycleId: cycle.id,
|
|
1780
|
-
entityId: route.id,
|
|
1781
|
-
correlationId,
|
|
1782
|
-
evidenceRefs: route.actions.flatMap((action) => action.evidenceRefs),
|
|
1783
|
-
payload: { record: route },
|
|
1784
|
-
// A v1.3 (create-quick-task) route plan embedded in the event
|
|
1785
|
-
// payload stamps the event v1.3, whose schema accepts either
|
|
1786
|
-
// route-plan version; every v1.2 route keeps the frozen v1.2 event.
|
|
1787
|
-
...(route.protocolVersion === OPERATE_MISSION_PROTOCOL_VERSION
|
|
1788
|
-
? { protocolVersion: OPERATE_MISSION_PROTOCOL_VERSION }
|
|
1789
|
-
: {}),
|
|
1790
|
-
});
|
|
1791
|
-
head = appended.head;
|
|
1792
|
-
}
|
|
1793
|
-
catch (error) {
|
|
1794
|
-
await rollbackJournalTransaction(projectRoot, journal).catch(() => undefined);
|
|
1795
|
-
throw error;
|
|
1796
|
-
}
|
|
1797
|
-
}
|
|
1798
|
-
}
|
|
1799
|
-
const quiet = (evaluated.findings?.length ?? 0) === 0 &&
|
|
1800
|
-
(evaluated.decisions?.length ?? 0) === 0 &&
|
|
1801
|
-
(evaluated.gaps?.length ?? 0) === 0;
|
|
1802
|
-
const health = quiet ? 'quiet' : evaluated.warnings.length > 0 ? 'partial' : 'normal';
|
|
1803
|
-
const reviewable = await appendLocked(store, lock, head, {
|
|
1804
|
-
type: 'cycle.reviewable',
|
|
1805
|
-
cycleId: cycle.id,
|
|
1806
|
-
entityId: cycle.id,
|
|
1807
|
-
correlationId,
|
|
1808
|
-
payload: {
|
|
1809
|
-
patch: {
|
|
1810
|
-
health,
|
|
1811
|
-
},
|
|
1812
|
-
warnings: evaluated.warnings,
|
|
1813
|
-
},
|
|
1814
|
-
});
|
|
1815
|
-
head = reviewable.head;
|
|
1816
|
-
if (quiet) {
|
|
1817
|
-
const closed = await appendLocked(store, lock, head, {
|
|
1818
|
-
type: 'cycle.closed',
|
|
1819
|
-
cycleId: cycle.id,
|
|
1820
|
-
entityId: cycle.id,
|
|
1821
|
-
correlationId,
|
|
1822
|
-
payload: {
|
|
1823
|
-
patch: {
|
|
1824
|
-
health,
|
|
1825
|
-
completedAt: timestamp,
|
|
1826
|
-
},
|
|
1827
|
-
},
|
|
1828
|
-
});
|
|
1829
|
-
head = closed.head;
|
|
1830
|
-
}
|
|
1831
|
-
const state = await store.state();
|
|
1832
|
-
await store.writeCheckpoint(state);
|
|
1833
|
-
await persistOperatingProjections({
|
|
1834
|
-
projectRoot,
|
|
1835
|
-
localRoot: input.localRoot,
|
|
1836
|
-
state,
|
|
1837
|
-
revalidateEventHead: async () => (await store.replay()).eventHead,
|
|
1838
|
-
});
|
|
1839
|
-
await mkdir(resolveOperatingPaths(projectRoot).cycles, {
|
|
1840
|
-
recursive: true,
|
|
1841
|
-
mode: 0o700,
|
|
1842
|
-
});
|
|
1843
|
-
return { ...evaluated, routes, state };
|
|
1844
|
-
}
|
|
1845
|
-
catch (error) {
|
|
1846
|
-
if (started) {
|
|
1847
|
-
const currentHead = await store.replay();
|
|
1848
|
-
try {
|
|
1849
|
-
const blockedByCriticalCap = error instanceof OperateError && error.code === 'E_OPERATE_CRITICAL_CAP';
|
|
1850
|
-
const failed = await appendLocked(store, lock, currentHead.eventHead, {
|
|
1851
|
-
type: blockedByCriticalCap ? 'cycle.blocked' : 'cycle.failed',
|
|
1852
|
-
cycleId: cycle.id,
|
|
1853
|
-
entityId: cycle.id,
|
|
1854
|
-
correlationId,
|
|
1855
|
-
payload: {
|
|
1856
|
-
patch: { health: 'blocked' },
|
|
1857
|
-
errorCode: error instanceof OperateError ? error.code : 'E_OPERATE_STATE_INVALID',
|
|
1858
|
-
...(blockedByCriticalCap ? { details: error.details } : {}),
|
|
1859
|
-
},
|
|
1860
|
-
});
|
|
1861
|
-
head = failed.head;
|
|
1862
|
-
const failedState = await store.state();
|
|
1863
|
-
await store.writeCheckpoint(failedState);
|
|
1864
|
-
await persistOperatingProjections({
|
|
1865
|
-
projectRoot,
|
|
1866
|
-
localRoot: input.localRoot,
|
|
1867
|
-
state: failedState,
|
|
1868
|
-
revalidateEventHead: async () => (await store.replay()).eventHead,
|
|
1869
|
-
});
|
|
1870
|
-
}
|
|
1871
|
-
catch {
|
|
1872
|
-
// Preserve the original failure; integrity diagnostics will expose
|
|
1873
|
-
// any inability to append the terminal audit event.
|
|
1874
|
-
}
|
|
1875
|
-
}
|
|
1876
|
-
throw error;
|
|
1877
|
-
}
|
|
1878
|
-
});
|
|
1879
|
-
// FR8 / E-008: persist the cadence `lastRunAt` marker once a committed cycle
|
|
1880
|
-
// reaches a terminal reviewable/blocked/closed state, so a later `operate
|
|
1881
|
-
// status` surfaces the pipeline's `nextDueAt` without re-running a cycle. Uses
|
|
1882
|
-
// the injected clock (`timestamp`), never a wall-clock read. Preview, dry-run,
|
|
1883
|
-
// and native-handoff returns have not completed a cycle and record nothing.
|
|
1884
|
-
if (!cycleResult.preview && !cycleResult.dryRun && !cycleResult.nativeHandoff) {
|
|
1885
|
-
const finalCycleState = cycleResult.state?.cycles.find((candidate) => candidate.id === cycle.id)?.state;
|
|
1886
|
-
if (finalCycleState && ['reviewable', 'blocked', 'closed'].includes(finalCycleState)) {
|
|
1887
|
-
await recordOperatingCadenceRun({
|
|
1888
|
-
projectRoot,
|
|
1889
|
-
localRoot: input.localRoot,
|
|
1890
|
-
runAt: timestamp,
|
|
1891
|
-
});
|
|
1892
|
-
}
|
|
1893
|
-
}
|
|
1894
|
-
return cycleResult;
|
|
1895
|
-
}
|
|
1896
|
-
//# sourceMappingURL=engine.js.map
|