@wildo-ai/platform-core-shared 1.1.6 → 1.1.7

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.
Files changed (56) hide show
  1. package/dist/esm/core/resources/resources-operations.custom.shared.definitions.d.ts.map +1 -1
  2. package/dist/esm/core/resources/resources-operations.custom.shared.definitions.js.map +1 -1
  3. package/dist/esm/core/resources/resources-relationships.custom.shared.definitions.d.ts.map +1 -1
  4. package/dist/esm/core/resources/resources-relationships.custom.shared.definitions.js.map +1 -1
  5. package/dist/esm/core/resources/resources-types.custom.shared.schemas.d.ts.map +1 -1
  6. package/dist/esm/core/resources/resources-types.custom.shared.schemas.js.map +1 -1
  7. package/dist/esm/index.d.ts.map +1 -1
  8. package/dist/esm/index.js.map +1 -1
  9. package/dist/esm/runtime/application-backend-env.contracts.d.ts.map +1 -1
  10. package/dist/esm/runtime/application-backend-env.contracts.js.map +1 -1
  11. package/dist/esm/runtime/application-worker-env.contracts.d.ts.map +1 -1
  12. package/dist/esm/runtime/application-worker-env.contracts.js.map +1 -1
  13. package/dist/esm/runtime/http-server-env.contracts.d.ts.map +1 -1
  14. package/dist/esm/runtime/http-server-env.contracts.js.map +1 -1
  15. package/dist/esm/runtime/runtime-topology.contracts.d.ts.map +1 -1
  16. package/dist/esm/runtime/runtime-topology.contracts.js.map +1 -1
  17. package/dist/esm/security/authorizations/roles.custom.shared.definitions.d.ts.map +1 -1
  18. package/dist/esm/security/authorizations/roles.custom.shared.definitions.js.map +1 -1
  19. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.resources-config.schemas.d.ts.map +1 -1
  20. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.resources-config.schemas.js.map +1 -1
  21. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.schemas.d.ts.map +1 -1
  22. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.schemas.js.map +1 -1
  23. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.resources-config.schemas.d.ts.map +1 -1
  24. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.resources-config.schemas.js.map +1 -1
  25. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.schemas.d.ts.map +1 -1
  26. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.schemas.js.map +1 -1
  27. package/dist/esm/wildo-applications/wildo-applications.custom.shared.resources-config.schemas.d.ts.map +1 -1
  28. package/dist/esm/wildo-applications/wildo-applications.custom.shared.resources-config.schemas.js.map +1 -1
  29. package/dist/esm/wildo-applications/wildo-applications.custom.shared.schemas.d.ts.map +1 -1
  30. package/dist/esm/wildo-applications/wildo-applications.custom.shared.schemas.js.map +1 -1
  31. package/dist/esm/wildo-applications-versions/wildo-applications-versions.custom.shared.resources-config.schemas.d.ts.map +1 -1
  32. package/dist/esm/wildo-applications-versions/wildo-applications-versions.custom.shared.resources-config.schemas.js.map +1 -1
  33. package/dist/esm/wildo-applications-versions/wildo-applications-versions.custom.shared.schemas.d.ts.map +1 -1
  34. package/dist/esm/wildo-applications-versions/wildo-applications-versions.custom.shared.schemas.js.map +1 -1
  35. package/dist/esm/workbench/workbench-aspect-resources.custom.shared.schemas.d.ts.map +1 -1
  36. package/dist/esm/workbench/workbench-aspect-resources.custom.shared.schemas.js.map +1 -1
  37. package/dist/esm/workbench/workbench-creation-console.custom.shared.schemas.d.ts.map +1 -1
  38. package/dist/esm/workbench/workbench-creation-console.custom.shared.schemas.js.map +1 -1
  39. package/dist/esm/workbench/workbench-creation-conversation.custom.shared.schemas.d.ts.map +1 -1
  40. package/dist/esm/workbench/workbench-creation-conversation.custom.shared.schemas.js.map +1 -1
  41. package/dist/esm/workbench/workbench-creation-dossier.custom.shared.schemas.d.ts.map +1 -1
  42. package/dist/esm/workbench/workbench-creation-dossier.custom.shared.schemas.js.map +1 -1
  43. package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.d.ts.map +1 -1
  44. package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.js.map +1 -1
  45. package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.d.ts.map +1 -1
  46. package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.js.map +1 -1
  47. package/dist/esm/workbench/workbench-domain-model.custom.shared.schemas.d.ts.map +1 -1
  48. package/dist/esm/workbench/workbench-domain-model.custom.shared.schemas.js.map +1 -1
  49. package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.d.ts.map +1 -1
  50. package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.js.map +1 -1
  51. package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.d.ts.map +1 -1
  52. package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.js.map +1 -1
  53. package/dist/esm/workbench/workbench-resources.custom.shared.schemas.d.ts.map +1 -1
  54. package/dist/esm/workbench/workbench-resources.custom.shared.schemas.js.map +1 -1
  55. package/dist/tsconfig.build.tsbuildinfo +1 -1
  56. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"workbench-aspect-resources.custom.shared.schemas.js","sourceRoot":"","sources":["../../../../src/workbench/workbench-aspect-resources.custom.shared.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CoreResourceOperation,\n CoreResourceType,\n IntrospectionTenancyStance,\n PersistenceAdapter,\n RelationshipNature,\n ResourceParentResourceRequirement,\n ResourceRelationship,\n ResourceRelationshipAccessScopeStrategy,\n ResourceRelationshipCardinality,\n createResourceConfiguration_Initialization,\n createResourcesRelationship,\n} from '@wildo-ai/saas-models';\nimport { z } from 'zod';\nimport { initZodDecorators } from '@wildo-ai/zod-decorators';\n\n// Decorator methods must exist before the module-load-time envelope builds below.\ninitZodDecorators();\n\nimport {\n WorkbenchShared_ResourceFieldIdentifier,\n WorkbenchShared_ResourceType,\n} from './workbench-resources-types.custom.shared.schemas';\nimport {\n createReadOnlyApiVariant,\n createReadOnlyListApiVariant,\n} from './workbench-resources.custom.shared.resources-config.schemas';\n\n/**\n * FAMILY ASPECT RESOURCES — the spine's schema-agnostic transcription of\n * `FAMILY_ASPECTS_REGISTRY` (`@wildo-ai/saas-specifications`, `_core/family-aspects.*`).\n *\n * ## The split, restated where it is enforced\n *\n * The registry is AUTHORITATIVE: item schemas, business keys, edges, all declared beside the\n * `_core` family schemas (decided 2026-09-01). The spine cannot import it — platform-core-shared\n * deliberately never depends on saas-specifications — so this module carries plain DATA: which\n * aspects exist, which envelope fields carry references, and which resource each reference\n * resolves to. A companion-side parity test holds this table to the registry; drift between the\n * two is a failing test, never a silent divergence.\n *\n * ## The envelope\n *\n * Aspect rows share ONE envelope shape (identity, family backlink, headline, the full item as a\n * raw record) plus the aspect's own FLATTENED reference fields. Flattening is the projection's\n * job and is what makes every edge a PLAIN foreign key the engine already resolves:\n *\n * - weighted edge objects flatten to key arrays (`jobs[].jobRef` → `jobIds`),\n * - multi-target fields split per target (`deliversRequirementRefs` →\n * `deliversFunctionalRequirementIds` + `deliversNonFunctionalRequirementIds`), because the\n * frontend resolves an FK field name to ONE resource — a mixed-kind array has no honest single\n * answer, and split fields read better anyway,\n * - every field name below maps to exactly one target across ALL aspects (collision-audited at\n * generation; the parity test re-checks it).\n *\n * The `family` field is the artifact BACKLINK for free: it is the specification-artifacts\n * resource's own field identifier, so the global field-identifier map already resolves it.\n */\n\n/**\n * How an aspect row gets its identity — mirrors the registry's `businessKey` contract.\n *\n * The three are not interchangeable and the fallback order between them is the point: a collection\n * whose schema declares a single-field key is addressed by it, a singleton has one row per family so\n * the aspect key IS the identity, and a keyless collection falls back to a positional address that is\n * stable per landed snapshot and honest about carrying no business meaning.\n */\nexport enum WorkbenchAspectIdentityKind {\n /** The item's own business key (`ref`, `taskRef`, …), unique within the aspect. */\n BUSINESS_KEY = 'business-key',\n /** One row per family — identity is the aspect key itself. */\n SINGLETON = 'singleton',\n /** Keyless collection (locale × jurisdictions): `<aspectKey>[<index>]`, stable per snapshot. */\n INDEXED = 'indexed',\n}\n\nexport interface WorkbenchAspectEdgeDescriptor {\n /** Envelope field carrying the reference key(s) — post-flatten, post-split. */\n readonly field: string;\n /** The registry aspect key the reference resolves to. */\n readonly targetAspectKey: string;\n /** `true` = key array; `false` = single key. */\n readonly many: boolean;\n /**\n * The REGISTRY field this edge transcribes, when the target alone does not identify it.\n *\n * The projection joins a routed reference to a spine edge by target, which is unique for every\n * aspect but one: a minion declares `readsResourceRefs` AND `writesResourceRefs`, both reaching\n * `domain-plan.resource`, because its containment whitelist is two lists and the direction is the\n * decision (#1495). Without this field the second reference would overwrite the first under one\n * envelope name — silently, and with the wrong half winning.\n *\n * Omitted everywhere the target is unique, which is everywhere else; when present it is matched\n * FIRST, so adding one can never change an existing aspect's join.\n */\n readonly sourceField?: string;\n}\n\nexport interface WorkbenchAspectDescriptor {\n /** The registry aspect key (`market.icp`) — the parity test's join column. */\n readonly aspectKey: string;\n readonly resourceType: WorkbenchShared_ResourceType;\n /** The introspection payload member this resource reads its rows from. */\n readonly rowsPath: string;\n readonly identity: WorkbenchAspectIdentityKind;\n readonly edges: readonly WorkbenchAspectEdgeDescriptor[];\n}\n\nexport const WORKBENCH_ASPECT_DESCRIPTORS: readonly WorkbenchAspectDescriptor[] = [\n {\n aspectKey: 'vision.idea',\n resourceType: WorkbenchShared_ResourceType.ASPECT_VISION_IDEA,\n rowsPath: 'visionIdeas',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [],\n },\n {\n aspectKey: 'vision.problem',\n resourceType: WorkbenchShared_ResourceType.ASPECT_VISION_PROBLEM,\n rowsPath: 'visionProblems',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [],\n },\n {\n aspectKey: 'vision.mission',\n resourceType: WorkbenchShared_ResourceType.ASPECT_VISION_MISSION,\n rowsPath: 'visionMissions',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [],\n },\n {\n aspectKey: 'vision.success-criterion',\n resourceType: WorkbenchShared_ResourceType.ASPECT_VISION_SUCCESS_CRITERION,\n rowsPath: 'visionSuccessCriteria',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'vision.constraint',\n resourceType: WorkbenchShared_ResourceType.ASPECT_VISION_CONSTRAINT,\n rowsPath: 'visionConstraints',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'market.category',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_CATEGORY,\n rowsPath: 'marketCategories',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [],\n },\n {\n aspectKey: 'market.icp',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_ICP,\n rowsPath: 'marketIcps',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n /*\n * The SELF-edge (#1427): an ICP's `influences` name OTHER ICPs, carried inside objects and\n * invisible to the registry until it walked one level down. It is what makes a buying group\n * legible — the economic buyer an end user influences is why both are on record.\n */\n { field: 'influencesIcpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'personaIds', targetAspectKey: 'market.persona', many: true },\n { field: 'jobIds', targetAspectKey: 'market.job', many: true },\n { field: 'painIds', targetAspectKey: 'market.pain', many: true },\n { field: 'gainIds', targetAspectKey: 'market.gain', many: true },\n { field: 'channelIds', targetAspectKey: 'market.channel', many: true },\n { field: 'triggerIds', targetAspectKey: 'market.trigger', many: true },\n { field: 'alternativeIds', targetAspectKey: 'market.alternative', many: true },\n { field: 'proofIds', targetAspectKey: 'market.proof', many: true },\n { field: 'objectionIds', targetAspectKey: 'market.objection', many: true },\n { field: 'preferredVoiceId', targetAspectKey: 'market.tone-of-voice', many: false },\n ],\n },\n {\n aspectKey: 'market.persona',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_PERSONA,\n rowsPath: 'marketPersonas',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'belongsToIcpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'jobIds', targetAspectKey: 'market.job', many: true },\n { field: 'painIds', targetAspectKey: 'market.pain', many: true },\n { field: 'gainIds', targetAspectKey: 'market.gain', many: true },\n { field: 'channelIds', targetAspectKey: 'market.channel', many: true },\n { field: 'preferredVoiceId', targetAspectKey: 'market.tone-of-voice', many: false },\n ],\n },\n {\n aspectKey: 'market.job',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_JOB,\n rowsPath: 'marketJobs',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'market.pain',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_PAIN,\n rowsPath: 'marketPains',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'market.gain',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_GAIN,\n rowsPath: 'marketGains',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'market.tone-of-voice',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_TONE_OF_VOICE,\n rowsPath: 'marketTonesOfVoice',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'market.benefit',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_BENEFIT,\n rowsPath: 'marketBenefits',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'deliveredByFeatureIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'painIds', targetAspectKey: 'market.pain', many: true },\n { field: 'gainIds', targetAspectKey: 'market.gain', many: true },\n { field: 'jobIds', targetAspectKey: 'market.job', many: true },\n { field: 'icpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'proofIds', targetAspectKey: 'market.proof', many: true },\n { field: 'addressesObjectionIds', targetAspectKey: 'market.objection', many: true },\n ],\n },\n {\n aspectKey: 'market.positioning',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_POSITIONING,\n rowsPath: 'marketPositionings',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'icpId', targetAspectKey: 'market.icp', many: false },\n { field: 'preferredVoiceId', targetAspectKey: 'market.tone-of-voice', many: false },\n { field: 'benefitIds', targetAspectKey: 'market.benefit', many: true },\n { field: 'alternativeIds', targetAspectKey: 'market.alternative', many: true },\n ],\n },\n {\n aspectKey: 'market.channel',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_CHANNEL,\n rowsPath: 'marketChannels',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'market.alternative',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_ALTERNATIVE,\n rowsPath: 'marketAlternatives',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'market.trigger',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_TRIGGER,\n rowsPath: 'marketTriggers',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'affectedIcpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'recommendedChannelIds', targetAspectKey: 'market.channel', many: true },\n ],\n },\n {\n aspectKey: 'market.buying-journey',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_BUYING_JOURNEY,\n rowsPath: 'marketBuyingJourneys',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'icpId', targetAspectKey: 'market.icp', many: false },\n ],\n },\n {\n aspectKey: 'market.proof',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_PROOF,\n rowsPath: 'marketProofs',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'supportsBenefitIds', targetAspectKey: 'market.benefit', many: true },\n { field: 'supportsIcpIds', targetAspectKey: 'market.icp', many: true },\n ],\n },\n {\n aspectKey: 'market.objection',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_OBJECTION,\n rowsPath: 'marketObjections',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'raisedByIcpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'raisedByPersonaIds', targetAspectKey: 'market.persona', many: true },\n { field: 'proofIds', targetAspectKey: 'market.proof', many: true },\n { field: 'relatedBenefitIds', targetAspectKey: 'market.benefit', many: true },\n ],\n },\n {\n aspectKey: 'market.message-template',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_MESSAGE_TEMPLATE,\n rowsPath: 'marketMessageTemplates',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'preferredVoiceId', targetAspectKey: 'market.tone-of-voice', many: false },\n ],\n },\n {\n aspectKey: 'requirements.functional',\n resourceType: WorkbenchShared_ResourceType.ASPECT_REQUIREMENT_FUNCTIONAL,\n rowsPath: 'functionalRequirements',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'icpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'jobIds', targetAspectKey: 'market.job', many: true },\n ],\n },\n {\n aspectKey: 'requirements.non-functional',\n resourceType: WorkbenchShared_ResourceType.ASPECT_REQUIREMENT_NON_FUNCTIONAL,\n rowsPath: 'nonFunctionalRequirements',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'icpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'jobIds', targetAspectKey: 'market.job', many: true },\n ],\n },\n {\n aspectKey: 'feature-drafts.draft',\n resourceType: WorkbenchShared_ResourceType.ASPECT_FEATURE_DRAFT,\n rowsPath: 'featureDrafts',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'roadmap.phase',\n resourceType: WorkbenchShared_ResourceType.ASPECT_ROADMAP_PHASE,\n rowsPath: 'roadmapPhases',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'deliversFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'deliversNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'deliversSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n ],\n },\n {\n aspectKey: 'business-model.plan',\n resourceType: WorkbenchShared_ResourceType.ASPECT_PRICING_PLAN,\n rowsPath: 'pricingPlans',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'targetIcpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'includesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'includesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n ],\n },\n {\n aspectKey: 'brand.name',\n resourceType: WorkbenchShared_ResourceType.ASPECT_BRAND_NAME,\n rowsPath: 'brandNames',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [],\n },\n {\n aspectKey: 'brand.logo-direction',\n resourceType: WorkbenchShared_ResourceType.ASPECT_BRAND_LOGO_DIRECTION,\n rowsPath: 'brandLogoDirections',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [],\n },\n {\n aspectKey: 'brand.visual-tone',\n resourceType: WorkbenchShared_ResourceType.ASPECT_BRAND_VISUAL_TONE,\n rowsPath: 'brandVisualTones',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [],\n },\n {\n aspectKey: 'brand.audience',\n resourceType: WorkbenchShared_ResourceType.ASPECT_BRAND_AUDIENCE,\n rowsPath: 'brandAudiences',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [\n { field: 'targetIcpIds', targetAspectKey: 'market.icp', many: true },\n ],\n },\n {\n aspectKey: 'brand.asset',\n resourceType: WorkbenchShared_ResourceType.ASPECT_BRAND_ASSET,\n rowsPath: 'brandAssets',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'derivedFromId', targetAspectKey: 'brand.asset', many: false },\n ],\n },\n /*\n * THE COMPLIANCE PROGRAMME (#1431, surfaced #1512). Ten aspects, and the edge set is the point:\n * an obligation reaches the decision that made it applicable, the assignment that owns it, the\n * gap that blocks it and the coverage decision that reviewed it — the whole reason this family is\n * addressable at all.\n *\n * SEVERAL registry fields collapse into ONE spine field wherever they share a target, because the\n * projection joins a reference to the descriptor edge whose target matches. A responsibility\n * assignment names five distinct ROLE fields and they become one `roleIds` link; the distinction\n * is not lost, it is on the row, where each field renders under its own word. What the edge\n * carries is the click-through, which is the same for all five.\n */\n {\n aspectKey: 'compliance-program.scope-selector',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_SCOPE_SELECTOR,\n rowsPath: 'complianceScopeSelectors',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'compliance-program.applicability-decision',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_APPLICABILITY_DECISION,\n rowsPath: 'complianceApplicabilityDecisions',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'scopeSelectorId', targetAspectKey: 'compliance-program.scope-selector', many: false },\n ],\n },\n {\n aspectKey: 'compliance-program.obligation',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_OBLIGATION,\n rowsPath: 'complianceObligations',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'scopeSelectorIds', targetAspectKey: 'compliance-program.scope-selector', many: true },\n { field: 'responsibilityAssignmentIds', targetAspectKey: 'compliance-program.responsibility-assignment', many: true },\n { field: 'reviewOwnerRoleIds', targetAspectKey: 'compliance-program.role-authority', many: true },\n { field: 'gapIds', targetAspectKey: 'compliance-program.gap', many: true },\n { field: 'coverageDecisionId', targetAspectKey: 'compliance-program.obligation-coverage-decision', many: false },\n { field: 'sourceApplicabilityDecisionIds', targetAspectKey: 'compliance-program.applicability-decision', many: true },\n // A SELF-edge: an obligation may depend on another obligation being met first.\n { field: 'dependencyObligationIds', targetAspectKey: 'compliance-program.obligation', many: true },\n { field: 'sharedResponsibilityRuleId', targetAspectKey: 'compliance-program.shared-responsibility-rule', many: false },\n ],\n },\n {\n aspectKey: 'compliance-program.obligation-coverage-decision',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_COVERAGE_DECISION,\n rowsPath: 'complianceCoverageDecisions',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'obligationId', targetAspectKey: 'compliance-program.obligation', many: false },\n { field: 'reviewedByRoleId', targetAspectKey: 'compliance-program.role-authority', many: false },\n ],\n },\n {\n aspectKey: 'compliance-program.implementation-decision',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_IMPLEMENTATION_DECISION,\n rowsPath: 'complianceImplementationDecisions',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'scopeSelectorIds', targetAspectKey: 'compliance-program.scope-selector', many: true },\n { field: 'gapIds', targetAspectKey: 'compliance-program.gap', many: true },\n ],\n },\n {\n aspectKey: 'compliance-program.responsibility-assignment',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_RESPONSIBILITY_ASSIGNMENT,\n rowsPath: 'complianceResponsibilityAssignments',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'scopeSelectorId', targetAspectKey: 'compliance-program.scope-selector', many: false },\n // FIVE registry fields — responsible, operating, evidence-provider, approving, escalation —\n // one target, so one link. Each renders under its own word on the row.\n { field: 'roleIds', targetAspectKey: 'compliance-program.role-authority', many: true },\n ],\n },\n {\n aspectKey: 'compliance-program.gap',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_GAP,\n rowsPath: 'complianceGaps',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'scopeSelectorId', targetAspectKey: 'compliance-program.scope-selector', many: false },\n { field: 'ownerRoleId', targetAspectKey: 'compliance-program.role-authority', many: false },\n ],\n },\n {\n aspectKey: 'compliance-program.documentation-requirement',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_DOCUMENTATION_REQUIREMENT,\n rowsPath: 'complianceDocumentationRequirements',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'approvingRoleIds', targetAspectKey: 'compliance-program.role-authority', many: true },\n ],\n },\n {\n aspectKey: 'compliance-program.role-authority',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_ROLE_AUTHORITY,\n rowsPath: 'complianceRoleAuthorities',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'compliance-program.shared-responsibility-rule',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_SHARED_RESPONSIBILITY_RULE,\n rowsPath: 'complianceSharedResponsibilityRules',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'scopeSelectorIds', targetAspectKey: 'compliance-program.scope-selector', many: true },\n // Five role fields again — accountable, operating, evidence-provider, approving, conflict.\n { field: 'roleIds', targetAspectKey: 'compliance-program.role-authority', many: true },\n ],\n },\n {\n aspectKey: 'domain-plan.module',\n resourceType: WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_MODULE,\n rowsPath: 'domainPlanModules',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n /*\n * The DERIVED resource (#1482, surfaced #1512). Its rows are a projection of\n * `modules[].mainResources` rather than a member of the snapshot — a domain plan lists resources\n * as plain strings — and it is the single most-travelled link in the build lane: a build task's\n * `target.resourceRef` and `produces.resourceRef`, a placement decision's `subject.resourceRef`\n * and an experience view's `resourceId` all land here. Without this row every one of those was an\n * edge the graph could declare and not follow.\n */\n {\n aspectKey: 'domain-plan.resource',\n resourceType: WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_RESOURCE,\n rowsPath: 'domainPlanResources',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n // Back to the module that lists it — the one edge a projected row carries.\n { field: 'moduleId', targetAspectKey: 'domain-plan.module', many: false },\n ],\n },\n {\n aspectKey: 'domain-plan.relationship',\n resourceType: WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_RELATIONSHIP,\n rowsPath: 'domainPlanRelationships',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n /*\n * The two ENDS, as ONE spine field. The registry declares `sourceResourceRef` and\n * `targetResourceRef` separately and both land on the same aspect, and the projection joins a\n * reference to the descriptor edge whose target matches — so one target is one field, by\n * construction. The DIRECTION is not lost: it is on the row itself, where `sourceResourceRef`\n * and `targetResourceRef` render as \"From\" and \"To\"; what this field carries is the\n * click-through, which is the same for both ends.\n */\n { field: 'relatesResourceIds', targetAspectKey: 'domain-plan.resource', many: true },\n ],\n },\n {\n aspectKey: 'build-plan.task',\n resourceType: WorkbenchShared_ResourceType.ASPECT_BUILD_TASK,\n rowsPath: 'buildTasks',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'prerequisiteTaskIds', targetAspectKey: 'build-plan.task', many: true },\n /*\n * THE LINK BACK TO THE DECISION (#1427): a task's `target` names the domain-plan module or\n * relationship it builds. Carried inside an object, so the registry could not see it until its\n * drift pin walked one level down — and the spine could not link it until the registry did.\n */\n { field: 'targetModuleId', targetAspectKey: 'domain-plan.module', many: false },\n { field: 'targetRelationshipId', targetAspectKey: 'domain-plan.relationship', many: false },\n /*\n * The most-travelled link in the build lane (#1482): a task's `target.resourceRef` and its\n * `produces.resourceRef` both name the resource it builds. Two registry fields, one target,\n * so one spine field — what is built and what it produces are the same resource.\n */\n { field: 'resourceIds', targetAspectKey: 'domain-plan.resource', many: true },\n /* A task may serve a DRAFTED FEATURE (#1433 row 4) — declared once the data was measured. */\n { field: 'servesFeatureDraftIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'servesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'servesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'servesRoadmapPhaseIds', targetAspectKey: 'roadmap.phase', many: true },\n /* The vision edges (#629) — see the registry for why a build task may serve these. */\n { field: 'servesSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n { field: 'servesConstraintIds', targetAspectKey: 'vision.constraint', many: true },\n /*\n * The experience plan's entries on the PRODUCT side (#1660): a view, milestone or guidance task\n * names the entry it builds by the plan's own ref, so the task links to the decision.\n */\n { field: 'producesViewIds', targetAspectKey: 'experience-plan.view', many: true },\n { field: 'producesMilestoneIds', targetAspectKey: 'experience-plan.milestone', many: true },\n { field: 'producesGuidanceIds', targetAspectKey: 'experience-plan.guidance', many: true },\n /* A billing-catalogue task names the pricing plan it realises in `servesRefs` (#1835). */\n { field: 'servesPricingPlanIds', targetAspectKey: 'business-model.plan', many: true },\n ],\n },\n {\n /*\n * One composition decision per framework scenario (#1491) — NO edges: a decision names a\n * SCENARIO (a framework template) and a basis (a closed vocabulary), neither of which is a\n * decided element another aspect addresses.\n */\n aspectKey: 'capability-composition.decision',\n resourceType: WorkbenchShared_ResourceType.ASPECT_CAPABILITY_COMPOSITION_DECISION,\n rowsPath: 'compositionDecisions',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n /*\n * One planned website page (#1492). Its two edges reach the MARKET — a page is written for an\n * ICP, in a tone of voice — which is what makes the plan checkable from the snapshot's side.\n */\n aspectKey: 'website-plan.page',\n resourceType: WorkbenchShared_ResourceType.ASPECT_WEBSITE_PAGE,\n rowsPath: 'websitePages',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'audienceIcpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'toneOfVoiceId', targetAspectKey: 'market.tone-of-voice', many: false },\n ],\n },\n {\n /* One planned surface of the application's experience (#1493) — where it lives, and what asked for it. */\n aspectKey: 'experience-plan.view',\n resourceType: WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_VIEW,\n rowsPath: 'experienceViews',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'moduleId', targetAspectKey: 'domain-plan.module', many: false },\n { field: 'resourceId', targetAspectKey: 'domain-plan.resource', many: false },\n { field: 'servesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'servesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'servesRoadmapPhaseIds', targetAspectKey: 'roadmap.phase', many: true },\n { field: 'servesFeatureDraftIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'servesSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n ],\n },\n {\n /* One configuration surface the application composes — no edge: it names files and tokens, not elements. */\n aspectKey: 'experience-plan.configuration',\n resourceType: WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_CONFIGURATION,\n rowsPath: 'experienceConfigurations',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n /* One moment the application recognises — the module declaring it and the resource that earns it. */\n aspectKey: 'experience-plan.milestone',\n resourceType: WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_MILESTONE,\n rowsPath: 'experienceMilestones',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'moduleId', targetAspectKey: 'domain-plan.module', many: false },\n { field: 'triggerResourceId', targetAspectKey: 'domain-plan.resource', many: false },\n { field: 'servesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'servesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'servesRoadmapPhaseIds', targetAspectKey: 'roadmap.phase', many: true },\n { field: 'servesFeatureDraftIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'servesSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n ],\n },\n {\n /* One piece of guidance, linked to the milestones a person must hold first — the journey as one path. */\n aspectKey: 'experience-plan.guidance',\n resourceType: WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_GUIDANCE,\n rowsPath: 'experienceGuidance',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'moduleId', targetAspectKey: 'domain-plan.module', many: false },\n { field: 'gatedByMilestoneIds', targetAspectKey: 'experience-plan.milestone', many: true },\n { field: 'hostViewId', targetAspectKey: 'experience-plan.view', many: false },\n { field: 'servesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'servesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'servesRoadmapPhaseIds', targetAspectKey: 'roadmap.phase', many: true },\n { field: 'servesFeatureDraftIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'servesSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n ],\n },\n {\n /*\n * One worker the backend delegates to (#1495). Its only edges are what asked for it: a worker's\n * routes are the BUILT package's units of work, not decided elements.\n */\n aspectKey: 'integration-plan.worker',\n resourceType: WorkbenchShared_ResourceType.ASPECT_INTEGRATION_WORKER,\n rowsPath: 'integrationWorkers',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'servesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'servesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'servesRoadmapPhaseIds', targetAspectKey: 'roadmap.phase', many: true },\n { field: 'servesFeatureDraftIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'servesSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n ],\n },\n {\n /*\n * One cron minion (#1495) — and the ONE aspect whose edges are not unique by target: its\n * containment whitelist reaches `domain-plan.resource` TWICE, once per direction, so both\n * carry `sourceField`. The direction is the decision, and collapsing the two would report a\n * minion as reading what it only writes.\n */\n aspectKey: 'integration-plan.minion',\n resourceType: WorkbenchShared_ResourceType.ASPECT_INTEGRATION_MINION,\n rowsPath: 'integrationMinions',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'readsResourceIds', sourceField: 'readsResourceRefs', targetAspectKey: 'domain-plan.resource', many: true },\n { field: 'writesResourceIds', sourceField: 'writesResourceRefs', targetAspectKey: 'domain-plan.resource', many: true },\n { field: 'servesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'servesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'servesRoadmapPhaseIds', targetAspectKey: 'roadmap.phase', many: true },\n { field: 'servesFeatureDraftIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'servesSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n ],\n },\n {\n /* One provider bound into one scope — no edge: a provider ref is the ENGINE's catalogue, not a decided element. */\n aspectKey: 'integration-plan.provider-binding',\n resourceType: WorkbenchShared_ResourceType.ASPECT_INTEGRATION_PROVIDER_BINDING,\n rowsPath: 'integrationProviderBindings',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n /* One channel work arrives on (#1630). Its only edges are what asked for it, like a worker's. */\n aspectKey: 'integration-plan.inbound-channel',\n resourceType: WorkbenchShared_ResourceType.ASPECT_INTEGRATION_INBOUND_CHANNEL,\n rowsPath: 'integrationInboundChannels',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'servesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'servesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'servesRoadmapPhaseIds', targetAspectKey: 'roadmap.phase', many: true },\n { field: 'servesFeatureDraftIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'servesSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n ],\n },\n {\n /*\n * One requirement's standing (#1496), and the aspect that carries BOTH multi-edge shapes at\n * once — which is why every edge here names its source field.\n *\n * Its business key IS its edge: the row exists to say something about ONE requirement, and\n * `requirementRef` reaches both halves of the family — one field, two targets — routed by\n * MEMBERSHIP rather than by the row's own `half` field, which it does carry. An aspect edge\n * declares its targets ONCE and has no per-row selection, and membership MEASURES where a ref\n * lives instead of trusting a landed file's claim about it. `landedTaskIds` and\n * `provenTaskIds` are the other shape, two fields to ONE target, and they must stay apart\n * because proven is a subset of landed and collapsing them would report work as verified that\n * only exists.\n *\n * The projection therefore joins on the PAIR. Naming the source field on all four is what makes\n * that join load-bearing rather than incidental: with them omitted the target-only fallback\n * happens to resolve the same rows, and a regression in the join would go unnoticed.\n */\n aspectKey: 'application-maturity.requirement',\n resourceType: WorkbenchShared_ResourceType.ASPECT_REQUIREMENT_MATURITY,\n rowsPath: 'requirementMaturities',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'functionalRequirementId', sourceField: 'requirementRef', targetAspectKey: 'requirements.functional', many: false },\n { field: 'nonFunctionalRequirementId', sourceField: 'requirementRef', targetAspectKey: 'requirements.non-functional', many: false },\n { field: 'landedTaskIds', sourceField: 'landedTaskRefs', targetAspectKey: 'build-plan.task', many: true },\n { field: 'provenTaskIds', sourceField: 'provenTaskRefs', targetAspectKey: 'build-plan.task', many: true },\n ],\n },\n {\n /* One planned documentation chapter (#1494) — no edge: it cites the BUILT product's own specifications. */\n aspectKey: 'documentation-plan.chapter',\n resourceType: WorkbenchShared_ResourceType.ASPECT_DOCUMENTATION_CHAPTER,\n rowsPath: 'documentationChapters',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'placement.group',\n resourceType: WorkbenchShared_ResourceType.ASPECT_PLACEMENT_GROUP,\n rowsPath: 'placementGroups',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'placement.decision',\n resourceType: WorkbenchShared_ResourceType.ASPECT_PLACEMENT_DECISION,\n rowsPath: 'placementDecisions',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'groupId', targetAspectKey: 'placement.group', many: false },\n /*\n * A placement decision's SUBJECT is a domain-plan module or a RESOURCE (#1427/#1482), both\n * carried inside an object. The resource half was the one the graph could not follow until\n * the projected resource got a row of its own.\n */\n { field: 'subjectModuleId', targetAspectKey: 'domain-plan.module', many: false },\n { field: 'subjectResourceId', targetAspectKey: 'domain-plan.resource', many: false },\n ],\n },\n {\n aspectKey: 'compliance-candidate.section',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE_SECTION,\n rowsPath: 'complianceCandidateSections',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n /*\n * No edges since #1465: the producer family lands into the SET and is never indexed, so its\n * clause → fact link moved to `compliance-candidate-set.section`, the aspect that is read.\n */\n edges: [],\n },\n {\n aspectKey: 'compliance-candidate.variant-selection',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE_VARIANT_SELECTION,\n rowsPath: 'complianceCandidateVariantSelections',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'document-facts.declaration',\n resourceType: WorkbenchShared_ResourceType.ASPECT_DOCUMENT_FACT_DECLARATION,\n rowsPath: 'documentFactDeclarations',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n /*\n * The same row shape as the descriptor above and a SEPARATE resource, because the two families it\n * transcribes are separate (#192): one is regenerated by a producer, the other is only ever written\n * by a person. Merging them into one browsable list would erase exactly the provenance the split\n * exists to keep, and a reader could no longer tell which declarations survive the next producer run.\n */\n {\n aspectKey: 'document-facts-authored.declaration',\n resourceType: WorkbenchShared_ResourceType.ASPECT_AUTHORED_DOCUMENT_FACT_DECLARATION,\n rowsPath: 'authoredDocumentFactDeclarations',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n /*\n * INDEXED, not BUSINESS_KEY, and that is the registry's own answer rather than a simplification\n * here: the row is a union whose two arms key on different fields (`providerRef` vs\n * `subprocessorRef`), so no single field identifies a row across it.\n */\n aspectKey: 'processor-register.processor',\n resourceType: WorkbenchShared_ResourceType.ASPECT_PROCESSOR_REGISTER_ENTRY,\n rowsPath: 'processorRegisterEntries',\n identity: WorkbenchAspectIdentityKind.INDEXED,\n edges: [],\n },\n {\n /*\n * BUSINESS_KEY, unlike the processor entry above: a risk entry carries `entryRef`, which the\n * family validator holds unique and which `reviewOrder` addresses rows by. An indexed identity\n * here would make the register's own reading order unable to name the rows it orders.\n */\n aspectKey: 'risk-register.entry',\n resourceType: WorkbenchShared_ResourceType.ASPECT_RISK_REGISTER_ENTRY,\n rowsPath: 'riskRegisterEntries',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'release-policy.selection',\n resourceType: WorkbenchShared_ResourceType.ASPECT_RELEASE_POLICY_SELECTION,\n rowsPath: 'releasePolicySelections',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'document-publication.variant',\n resourceType: WorkbenchShared_ResourceType.ASPECT_DOCUMENT_PUBLICATION_VARIANT,\n rowsPath: 'documentPublicationVariants',\n identity: WorkbenchAspectIdentityKind.INDEXED,\n edges: [],\n },\n /*\n * The two landed SET families of the governed-document lane (#1105). A drafting run EMITS one\n * candidate (the singular family the two `compliance-candidate.*` descriptors above transcribe) and\n * LANDS into the set; a composed release lands into the release set. Without these two, the set that\n * actually landed had no popup and no graph row — a journey that drafted the privacy notice showed the\n * draft's sections only through the producer's contract.\n */\n {\n aspectKey: 'compliance-candidate-set.candidate',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE,\n rowsPath: 'complianceCandidates',\n // Keyed on `documentRef`: the identity decision the set schema records (locale and jurisdictions\n // are publication-variant concerns and would make a draft's identity change as it matured).\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n /*\n * These rows CITE facts, and a fact is either DERIVED from the application or DECIDED by a\n * person — one registry edge with two targets, which the projection routes by membership, so\n * the spine needs one field per target (#1427).\n */\n { field: 'citesFactIds', targetAspectKey: 'document-facts.declaration', many: true },\n { field: 'citesDecidedFactIds', targetAspectKey: 'document-facts-authored.declaration', many: true },\n ],\n },\n {\n /*\n * One SECTION of a landed candidate (#1465), derived from the set's `candidates` and addressed by\n * the composed `<documentRef>/<sectionRef>` — a section ref alone repeats across documents.\n */\n aspectKey: 'compliance-candidate-set.section',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE_SET_SECTION,\n rowsPath: 'complianceCandidateSetSections',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n // Back to the candidate the section belongs to.\n { field: 'complianceCandidateId', targetAspectKey: 'compliance-candidate-set.candidate', many: false },\n /*\n * The section's CLAUSES cite the facts they rest on — derived or decided — one registry edge with\n * two targets, routed by membership, so one spine field per target (#1427).\n */\n { field: 'citesFactIds', targetAspectKey: 'document-facts.declaration', many: true },\n { field: 'citesDecidedFactIds', targetAspectKey: 'document-facts-authored.declaration', many: true },\n ],\n },\n {\n aspectKey: 'document-release-set.release',\n resourceType: WorkbenchShared_ResourceType.ASPECT_DOCUMENT_RELEASE,\n rowsPath: 'documentReleases',\n // A release is keyed by document × locale × jurisdictions — no single-field business key, so the\n // registry falls back to the indexed identity, as the publication variant beside it does.\n identity: WorkbenchAspectIdentityKind.INDEXED,\n edges: [],\n },\n];\n\nconst DESCRIPTOR_BY_ASPECT_KEY: ReadonlyMap<string, WorkbenchAspectDescriptor> = new Map(\n WORKBENCH_ASPECT_DESCRIPTORS.map((descriptor) => [descriptor.aspectKey, descriptor]),\n);\n\nexport function getWorkbenchAspectDescriptor(aspectKey: string): WorkbenchAspectDescriptor | undefined {\n return DESCRIPTOR_BY_ASPECT_KEY.get(aspectKey);\n}\n\n/**\n * The shared envelope, instantiated per aspect with its identity field and reference fields.\n *\n * `content` stays a RAW record for the same reason the artifact resource's does: the spine never\n * sees the item schemas; the workbench frontend renders `content` through the REAL `_core` schema\n * from the registry, so typed rendering happens where the type authority is a dependency.\n */\nexport function buildWorkbenchAspectEnvelopeSchema(\n descriptor: WorkbenchAspectDescriptor,\n): z.ZodObject<z.ZodRawShape> {\n const identityField = WorkbenchShared_ResourceFieldIdentifier[descriptor.resourceType];\n const shape: Record<string, z.ZodTypeAny> = {\n /**\n * The composed address the projection emits, and the ONLY field a row click can resolve by.\n *\n * `.isSummaryField()` is not decoration here. A list renders SUMMARIES, and the frontend resolves\n * a clicked row's target by reading this field off the item — so an id that does not survive the\n * projection makes every row in every aspect list silently stop responding to a click, while READ\n * still answers 200 (the adapter filters by `identityFields`, not by this name). The only symptom\n * is one console line. Pinned for the whole population by the addressing-field contract test.\n */\n [identityField]: z.string().min(1).isPrimaryKey().isSummaryField(),\n /**\n * The owning artifact family id — a LIVE reference: `family` is the artifacts resource's own\n * field identifier, so the global map resolves it, and the artifacts READ is addressable —\n * the one link out of any popup back to the document the aspect lives in.\n */\n family: z.string().isForeignKey().isSummaryField(),\n /** The registry aspect key (`market.icp`) — which KIND of aspect this row is. */\n aspectKey: z.string().isSummaryField(),\n /** The item's headline value (the registry's `headlineField`), projected for lists/summaries. */\n title: z.string().isSummaryField(),\n /**\n * The full item as landed — rendered frontend-side through the family's own `_core` schema.\n *\n * Deliberately NOT a summary field: it is the whole item, and carrying it in every list row is\n * what the summary projection exists to avoid.\n */\n content: z.record(z.string(), z.unknown()),\n };\n for (const edge of descriptor.edges) {\n // FK marking rides the ELEMENT for arrays (the decorator's home is the string type); the\n // display pipeline accepts `string | string[]` values on a reference field either way.\n shape[edge.field] = edge.many\n ? z.array(z.string().isForeignKey())\n : z.string().isForeignKey().optional();\n }\n return z.object(shape);\n}\n\ntype WorkbenchAspect_CoreOperations = CoreResourceOperation.READ | CoreResourceOperation.LIST;\n\n/**\n * One introspection resource-configuration factory per aspect, all from the same mold as their\n * two siblings: READ/LIST only, `APPLICATION_STRUCTURE` tenancy, rows served by the companion's\n * family-aspects behavior at this aspect's `rowsPath`. Identity is always the COMPOSED field the\n * projection emits (see the identifier-map note in the types module).\n */\nexport function buildWorkbenchAspectConfigurationFactory(descriptor: WorkbenchAspectDescriptor) {\n const envelopeSchema = buildWorkbenchAspectEnvelopeSchema(descriptor);\n return (resourcesRelationships: ResourceRelationship[]) =>\n createResourceConfiguration_Initialization<undefined, WorkbenchAspect_CoreOperations, typeof envelopeSchema>({\n mainSchema: envelopeSchema,\n resourceIdentifier: descriptor.resourceType,\n resourceFieldIdentifier: WorkbenchShared_ResourceFieldIdentifier[descriptor.resourceType],\n resourceRelationships: resourcesRelationships,\n isSystemResource: false,\n persistenceAdapter: PersistenceAdapter.INTROSPECTION,\n introspectionBinding: {\n behavior: 'family-aspects',\n rowsPath: descriptor.rowsPath,\n tenancy: IntrospectionTenancyStance.APPLICATION_STRUCTURE,\n },\n coreOperations: [CoreResourceOperation.READ, CoreResourceOperation.LIST],\n customOperation: undefined,\n operationsConfiguration: {\n [CoreResourceOperation.READ]: { variants: [createReadOnlyApiVariant()] },\n [CoreResourceOperation.LIST]: {\n variants: [{\n ...createReadOnlyListApiVariant(),\n /* The two slices every aspect list needs: which family, which kind. */\n filterFields: {\n family: z.string(),\n aspectKey: z.string(),\n },\n }],\n },\n },\n });\n}\n\n/**\n * Every aspect's relationships:\n *\n * - the STANDALONE application anchor each INTROSPECTION resource needs (primary scope derives\n * from it; STANDALONE keeps the route flat — the established pattern of its two siblings), and\n * - one REFERENCE relationship per edge, carrying `foreignKeyField`: that is what teaches the\n * frontend's field-identifier map to resolve the envelope field to its target resource, which\n * is the entire navigation story (labels, popups, links) with no bespoke lookup anywhere.\n */\nexport function buildWorkbenchAspectRelationships(): ResourceRelationship[] {\n const relationships: ResourceRelationship[] = [];\n for (const descriptor of WORKBENCH_ASPECT_DESCRIPTORS) {\n relationships.push(\n createResourcesRelationship(\n CoreResourceType.APPLICATION,\n descriptor.resourceType,\n ResourceRelationshipCardinality.ONE,\n ResourceRelationshipCardinality.MANY,\n {\n nature: RelationshipNature.COMPOSITION,\n isPrimaryScope: true,\n accessScopeStrategy: ResourceRelationshipAccessScopeStrategy.STANDALONE,\n contextPolicy: {},\n },\n ),\n );\n for (const edge of descriptor.edges) {\n const target = DESCRIPTOR_BY_ASPECT_KEY.get(edge.targetAspectKey);\n if (!target) {\n throw new Error(\n `workbench aspect ${descriptor.aspectKey}: edge ${edge.field} targets unknown aspect ${edge.targetAspectKey}`,\n );\n }\n relationships.push(\n createResourcesRelationship(\n target.resourceType,\n descriptor.resourceType,\n ResourceRelationshipCardinality.ONE,\n edge.many ? ResourceRelationshipCardinality.MANY : ResourceRelationshipCardinality.ONE,\n {\n nature: RelationshipNature.REFERENCE,\n foreignKeyField: edge.field,\n contextPolicy: {},\n /*\n * STANDALONE here too, not only on the application anchor: a relationship without it\n * makes the router mount the holder NESTED under its target and drop the flat route —\n * measured on this very sweep (every edge-carrying aspect 404'd flat while its\n * edge-free siblings answered 200). A reference edge is navigation metadata, never a\n * URL parent.\n */\n accessScopeStrategy: ResourceRelationshipAccessScopeStrategy.STANDALONE,\n /*\n * The aspect graph is CYCLIC by nature — an ICP names its triggers and a trigger names\n * the ICPs it affects; a task prerequisites tasks; an asset derives from an asset. These\n * are REFERENCES in a knowledge graph, not a containment tree, so every edge declares\n * the cycle admissible rather than pretending the graph is a DAG.\n */\n allowCycle: true,\n /*\n * The two self-edges (a task's prerequisites, an asset's derivation source) are graphs\n * with roots — a MASTER asset derives from nothing — and the factory refuses a\n * self-reference whose parent is mandatory for exactly that reason. Harmless on the\n * non-self edges: every aspect reference is optional by nature (dangling-tolerant).\n */\n parentResourceRequirement: ResourceParentResourceRequirement.OPTIONAL,\n },\n ),\n );\n }\n }\n return relationships;\n}\n\n/** The factory-map slice for all aspect resources — merged into the workbench map by its owner. */\nexport const workbenchAspectResources_ConfigurationsFactoryMap: Record<\n string,\n ReturnType<typeof buildWorkbenchAspectConfigurationFactory>\n> = Object.fromEntries(\n WORKBENCH_ASPECT_DESCRIPTORS.map((descriptor) => [\n descriptor.resourceType,\n buildWorkbenchAspectConfigurationFactory(descriptor),\n ]),\n);\n"]}
1
+ {"version":3,"file":"workbench-aspect-resources.custom.shared.schemas.js","sourceRoot":"","sources":["../../../src/workbench/workbench-aspect-resources.custom.shared.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CoreResourceOperation,\n CoreResourceType,\n IntrospectionTenancyStance,\n PersistenceAdapter,\n RelationshipNature,\n ResourceParentResourceRequirement,\n ResourceRelationship,\n ResourceRelationshipAccessScopeStrategy,\n ResourceRelationshipCardinality,\n createResourceConfiguration_Initialization,\n createResourcesRelationship,\n} from '@wildo-ai/saas-models';\nimport { z } from 'zod';\nimport { initZodDecorators } from '@wildo-ai/zod-decorators';\n\n// Decorator methods must exist before the module-load-time envelope builds below.\ninitZodDecorators();\n\nimport {\n WorkbenchShared_ResourceFieldIdentifier,\n WorkbenchShared_ResourceType,\n} from './workbench-resources-types.custom.shared.schemas';\nimport {\n createReadOnlyApiVariant,\n createReadOnlyListApiVariant,\n} from './workbench-resources.custom.shared.resources-config.schemas';\n\n/**\n * FAMILY ASPECT RESOURCES — the spine's schema-agnostic transcription of\n * `FAMILY_ASPECTS_REGISTRY` (`@wildo-ai/saas-specifications`, `_core/family-aspects.*`).\n *\n * ## The split, restated where it is enforced\n *\n * The registry is AUTHORITATIVE: item schemas, business keys, edges, all declared beside the\n * `_core` family schemas (decided 2026-09-01). The spine cannot import it — platform-core-shared\n * deliberately never depends on saas-specifications — so this module carries plain DATA: which\n * aspects exist, which envelope fields carry references, and which resource each reference\n * resolves to. A companion-side parity test holds this table to the registry; drift between the\n * two is a failing test, never a silent divergence.\n *\n * ## The envelope\n *\n * Aspect rows share ONE envelope shape (identity, family backlink, headline, the full item as a\n * raw record) plus the aspect's own FLATTENED reference fields. Flattening is the projection's\n * job and is what makes every edge a PLAIN foreign key the engine already resolves:\n *\n * - weighted edge objects flatten to key arrays (`jobs[].jobRef` → `jobIds`),\n * - multi-target fields split per target (`deliversRequirementRefs` →\n * `deliversFunctionalRequirementIds` + `deliversNonFunctionalRequirementIds`), because the\n * frontend resolves an FK field name to ONE resource — a mixed-kind array has no honest single\n * answer, and split fields read better anyway,\n * - every field name below maps to exactly one target across ALL aspects (collision-audited at\n * generation; the parity test re-checks it).\n *\n * The `family` field is the artifact BACKLINK for free: it is the specification-artifacts\n * resource's own field identifier, so the global field-identifier map already resolves it.\n */\n\n/**\n * How an aspect row gets its identity — mirrors the registry's `businessKey` contract.\n *\n * The three are not interchangeable and the fallback order between them is the point: a collection\n * whose schema declares a single-field key is addressed by it, a singleton has one row per family so\n * the aspect key IS the identity, and a keyless collection falls back to a positional address that is\n * stable per landed snapshot and honest about carrying no business meaning.\n */\nexport enum WorkbenchAspectIdentityKind {\n /** The item's own business key (`ref`, `taskRef`, …), unique within the aspect. */\n BUSINESS_KEY = 'business-key',\n /** One row per family — identity is the aspect key itself. */\n SINGLETON = 'singleton',\n /** Keyless collection (locale × jurisdictions): `<aspectKey>[<index>]`, stable per snapshot. */\n INDEXED = 'indexed',\n}\n\nexport interface WorkbenchAspectEdgeDescriptor {\n /** Envelope field carrying the reference key(s) — post-flatten, post-split. */\n readonly field: string;\n /** The registry aspect key the reference resolves to. */\n readonly targetAspectKey: string;\n /** `true` = key array; `false` = single key. */\n readonly many: boolean;\n /**\n * The REGISTRY field this edge transcribes, when the target alone does not identify it.\n *\n * The projection joins a routed reference to a spine edge by target, which is unique for every\n * aspect but one: a minion declares `readsResourceRefs` AND `writesResourceRefs`, both reaching\n * `domain-plan.resource`, because its containment whitelist is two lists and the direction is the\n * decision (#1495). Without this field the second reference would overwrite the first under one\n * envelope name — silently, and with the wrong half winning.\n *\n * Omitted everywhere the target is unique, which is everywhere else; when present it is matched\n * FIRST, so adding one can never change an existing aspect's join.\n */\n readonly sourceField?: string;\n}\n\nexport interface WorkbenchAspectDescriptor {\n /** The registry aspect key (`market.icp`) — the parity test's join column. */\n readonly aspectKey: string;\n readonly resourceType: WorkbenchShared_ResourceType;\n /** The introspection payload member this resource reads its rows from. */\n readonly rowsPath: string;\n readonly identity: WorkbenchAspectIdentityKind;\n readonly edges: readonly WorkbenchAspectEdgeDescriptor[];\n}\n\nexport const WORKBENCH_ASPECT_DESCRIPTORS: readonly WorkbenchAspectDescriptor[] = [\n {\n aspectKey: 'vision.idea',\n resourceType: WorkbenchShared_ResourceType.ASPECT_VISION_IDEA,\n rowsPath: 'visionIdeas',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [],\n },\n {\n aspectKey: 'vision.problem',\n resourceType: WorkbenchShared_ResourceType.ASPECT_VISION_PROBLEM,\n rowsPath: 'visionProblems',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [],\n },\n {\n aspectKey: 'vision.mission',\n resourceType: WorkbenchShared_ResourceType.ASPECT_VISION_MISSION,\n rowsPath: 'visionMissions',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [],\n },\n {\n aspectKey: 'vision.success-criterion',\n resourceType: WorkbenchShared_ResourceType.ASPECT_VISION_SUCCESS_CRITERION,\n rowsPath: 'visionSuccessCriteria',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'vision.constraint',\n resourceType: WorkbenchShared_ResourceType.ASPECT_VISION_CONSTRAINT,\n rowsPath: 'visionConstraints',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'market.category',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_CATEGORY,\n rowsPath: 'marketCategories',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [],\n },\n {\n aspectKey: 'market.icp',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_ICP,\n rowsPath: 'marketIcps',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n /*\n * The SELF-edge (#1427): an ICP's `influences` name OTHER ICPs, carried inside objects and\n * invisible to the registry until it walked one level down. It is what makes a buying group\n * legible — the economic buyer an end user influences is why both are on record.\n */\n { field: 'influencesIcpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'personaIds', targetAspectKey: 'market.persona', many: true },\n { field: 'jobIds', targetAspectKey: 'market.job', many: true },\n { field: 'painIds', targetAspectKey: 'market.pain', many: true },\n { field: 'gainIds', targetAspectKey: 'market.gain', many: true },\n { field: 'channelIds', targetAspectKey: 'market.channel', many: true },\n { field: 'triggerIds', targetAspectKey: 'market.trigger', many: true },\n { field: 'alternativeIds', targetAspectKey: 'market.alternative', many: true },\n { field: 'proofIds', targetAspectKey: 'market.proof', many: true },\n { field: 'objectionIds', targetAspectKey: 'market.objection', many: true },\n { field: 'preferredVoiceId', targetAspectKey: 'market.tone-of-voice', many: false },\n ],\n },\n {\n aspectKey: 'market.persona',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_PERSONA,\n rowsPath: 'marketPersonas',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'belongsToIcpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'jobIds', targetAspectKey: 'market.job', many: true },\n { field: 'painIds', targetAspectKey: 'market.pain', many: true },\n { field: 'gainIds', targetAspectKey: 'market.gain', many: true },\n { field: 'channelIds', targetAspectKey: 'market.channel', many: true },\n { field: 'preferredVoiceId', targetAspectKey: 'market.tone-of-voice', many: false },\n ],\n },\n {\n aspectKey: 'market.job',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_JOB,\n rowsPath: 'marketJobs',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'market.pain',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_PAIN,\n rowsPath: 'marketPains',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'market.gain',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_GAIN,\n rowsPath: 'marketGains',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'market.tone-of-voice',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_TONE_OF_VOICE,\n rowsPath: 'marketTonesOfVoice',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'market.benefit',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_BENEFIT,\n rowsPath: 'marketBenefits',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'deliveredByFeatureIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'painIds', targetAspectKey: 'market.pain', many: true },\n { field: 'gainIds', targetAspectKey: 'market.gain', many: true },\n { field: 'jobIds', targetAspectKey: 'market.job', many: true },\n { field: 'icpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'proofIds', targetAspectKey: 'market.proof', many: true },\n { field: 'addressesObjectionIds', targetAspectKey: 'market.objection', many: true },\n ],\n },\n {\n aspectKey: 'market.positioning',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_POSITIONING,\n rowsPath: 'marketPositionings',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'icpId', targetAspectKey: 'market.icp', many: false },\n { field: 'preferredVoiceId', targetAspectKey: 'market.tone-of-voice', many: false },\n { field: 'benefitIds', targetAspectKey: 'market.benefit', many: true },\n { field: 'alternativeIds', targetAspectKey: 'market.alternative', many: true },\n ],\n },\n {\n aspectKey: 'market.channel',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_CHANNEL,\n rowsPath: 'marketChannels',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'market.alternative',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_ALTERNATIVE,\n rowsPath: 'marketAlternatives',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'market.trigger',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_TRIGGER,\n rowsPath: 'marketTriggers',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'affectedIcpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'recommendedChannelIds', targetAspectKey: 'market.channel', many: true },\n ],\n },\n {\n aspectKey: 'market.buying-journey',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_BUYING_JOURNEY,\n rowsPath: 'marketBuyingJourneys',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'icpId', targetAspectKey: 'market.icp', many: false },\n ],\n },\n {\n aspectKey: 'market.proof',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_PROOF,\n rowsPath: 'marketProofs',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'supportsBenefitIds', targetAspectKey: 'market.benefit', many: true },\n { field: 'supportsIcpIds', targetAspectKey: 'market.icp', many: true },\n ],\n },\n {\n aspectKey: 'market.objection',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_OBJECTION,\n rowsPath: 'marketObjections',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'raisedByIcpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'raisedByPersonaIds', targetAspectKey: 'market.persona', many: true },\n { field: 'proofIds', targetAspectKey: 'market.proof', many: true },\n { field: 'relatedBenefitIds', targetAspectKey: 'market.benefit', many: true },\n ],\n },\n {\n aspectKey: 'market.message-template',\n resourceType: WorkbenchShared_ResourceType.ASPECT_MARKET_MESSAGE_TEMPLATE,\n rowsPath: 'marketMessageTemplates',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'preferredVoiceId', targetAspectKey: 'market.tone-of-voice', many: false },\n ],\n },\n {\n aspectKey: 'requirements.functional',\n resourceType: WorkbenchShared_ResourceType.ASPECT_REQUIREMENT_FUNCTIONAL,\n rowsPath: 'functionalRequirements',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'icpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'jobIds', targetAspectKey: 'market.job', many: true },\n ],\n },\n {\n aspectKey: 'requirements.non-functional',\n resourceType: WorkbenchShared_ResourceType.ASPECT_REQUIREMENT_NON_FUNCTIONAL,\n rowsPath: 'nonFunctionalRequirements',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'icpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'jobIds', targetAspectKey: 'market.job', many: true },\n ],\n },\n {\n aspectKey: 'feature-drafts.draft',\n resourceType: WorkbenchShared_ResourceType.ASPECT_FEATURE_DRAFT,\n rowsPath: 'featureDrafts',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'roadmap.phase',\n resourceType: WorkbenchShared_ResourceType.ASPECT_ROADMAP_PHASE,\n rowsPath: 'roadmapPhases',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'deliversFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'deliversNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'deliversSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n ],\n },\n {\n aspectKey: 'business-model.plan',\n resourceType: WorkbenchShared_ResourceType.ASPECT_PRICING_PLAN,\n rowsPath: 'pricingPlans',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'targetIcpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'includesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'includesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n ],\n },\n {\n aspectKey: 'brand.name',\n resourceType: WorkbenchShared_ResourceType.ASPECT_BRAND_NAME,\n rowsPath: 'brandNames',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [],\n },\n {\n aspectKey: 'brand.logo-direction',\n resourceType: WorkbenchShared_ResourceType.ASPECT_BRAND_LOGO_DIRECTION,\n rowsPath: 'brandLogoDirections',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [],\n },\n {\n aspectKey: 'brand.visual-tone',\n resourceType: WorkbenchShared_ResourceType.ASPECT_BRAND_VISUAL_TONE,\n rowsPath: 'brandVisualTones',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [],\n },\n {\n aspectKey: 'brand.audience',\n resourceType: WorkbenchShared_ResourceType.ASPECT_BRAND_AUDIENCE,\n rowsPath: 'brandAudiences',\n identity: WorkbenchAspectIdentityKind.SINGLETON,\n edges: [\n { field: 'targetIcpIds', targetAspectKey: 'market.icp', many: true },\n ],\n },\n {\n aspectKey: 'brand.asset',\n resourceType: WorkbenchShared_ResourceType.ASPECT_BRAND_ASSET,\n rowsPath: 'brandAssets',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'derivedFromId', targetAspectKey: 'brand.asset', many: false },\n ],\n },\n /*\n * THE COMPLIANCE PROGRAMME (#1431, surfaced #1512). Ten aspects, and the edge set is the point:\n * an obligation reaches the decision that made it applicable, the assignment that owns it, the\n * gap that blocks it and the coverage decision that reviewed it — the whole reason this family is\n * addressable at all.\n *\n * SEVERAL registry fields collapse into ONE spine field wherever they share a target, because the\n * projection joins a reference to the descriptor edge whose target matches. A responsibility\n * assignment names five distinct ROLE fields and they become one `roleIds` link; the distinction\n * is not lost, it is on the row, where each field renders under its own word. What the edge\n * carries is the click-through, which is the same for all five.\n */\n {\n aspectKey: 'compliance-program.scope-selector',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_SCOPE_SELECTOR,\n rowsPath: 'complianceScopeSelectors',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'compliance-program.applicability-decision',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_APPLICABILITY_DECISION,\n rowsPath: 'complianceApplicabilityDecisions',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'scopeSelectorId', targetAspectKey: 'compliance-program.scope-selector', many: false },\n ],\n },\n {\n aspectKey: 'compliance-program.obligation',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_OBLIGATION,\n rowsPath: 'complianceObligations',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'scopeSelectorIds', targetAspectKey: 'compliance-program.scope-selector', many: true },\n { field: 'responsibilityAssignmentIds', targetAspectKey: 'compliance-program.responsibility-assignment', many: true },\n { field: 'reviewOwnerRoleIds', targetAspectKey: 'compliance-program.role-authority', many: true },\n { field: 'gapIds', targetAspectKey: 'compliance-program.gap', many: true },\n { field: 'coverageDecisionId', targetAspectKey: 'compliance-program.obligation-coverage-decision', many: false },\n { field: 'sourceApplicabilityDecisionIds', targetAspectKey: 'compliance-program.applicability-decision', many: true },\n // A SELF-edge: an obligation may depend on another obligation being met first.\n { field: 'dependencyObligationIds', targetAspectKey: 'compliance-program.obligation', many: true },\n { field: 'sharedResponsibilityRuleId', targetAspectKey: 'compliance-program.shared-responsibility-rule', many: false },\n ],\n },\n {\n aspectKey: 'compliance-program.obligation-coverage-decision',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_COVERAGE_DECISION,\n rowsPath: 'complianceCoverageDecisions',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'obligationId', targetAspectKey: 'compliance-program.obligation', many: false },\n { field: 'reviewedByRoleId', targetAspectKey: 'compliance-program.role-authority', many: false },\n ],\n },\n {\n aspectKey: 'compliance-program.implementation-decision',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_IMPLEMENTATION_DECISION,\n rowsPath: 'complianceImplementationDecisions',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'scopeSelectorIds', targetAspectKey: 'compliance-program.scope-selector', many: true },\n { field: 'gapIds', targetAspectKey: 'compliance-program.gap', many: true },\n ],\n },\n {\n aspectKey: 'compliance-program.responsibility-assignment',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_RESPONSIBILITY_ASSIGNMENT,\n rowsPath: 'complianceResponsibilityAssignments',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'scopeSelectorId', targetAspectKey: 'compliance-program.scope-selector', many: false },\n // FIVE registry fields — responsible, operating, evidence-provider, approving, escalation —\n // one target, so one link. Each renders under its own word on the row.\n { field: 'roleIds', targetAspectKey: 'compliance-program.role-authority', many: true },\n ],\n },\n {\n aspectKey: 'compliance-program.gap',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_GAP,\n rowsPath: 'complianceGaps',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'scopeSelectorId', targetAspectKey: 'compliance-program.scope-selector', many: false },\n { field: 'ownerRoleId', targetAspectKey: 'compliance-program.role-authority', many: false },\n ],\n },\n {\n aspectKey: 'compliance-program.documentation-requirement',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_DOCUMENTATION_REQUIREMENT,\n rowsPath: 'complianceDocumentationRequirements',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'approvingRoleIds', targetAspectKey: 'compliance-program.role-authority', many: true },\n ],\n },\n {\n aspectKey: 'compliance-program.role-authority',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_ROLE_AUTHORITY,\n rowsPath: 'complianceRoleAuthorities',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'compliance-program.shared-responsibility-rule',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_SHARED_RESPONSIBILITY_RULE,\n rowsPath: 'complianceSharedResponsibilityRules',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'scopeSelectorIds', targetAspectKey: 'compliance-program.scope-selector', many: true },\n // Five role fields again — accountable, operating, evidence-provider, approving, conflict.\n { field: 'roleIds', targetAspectKey: 'compliance-program.role-authority', many: true },\n ],\n },\n {\n aspectKey: 'domain-plan.module',\n resourceType: WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_MODULE,\n rowsPath: 'domainPlanModules',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n /*\n * The DERIVED resource (#1482, surfaced #1512). Its rows are a projection of\n * `modules[].mainResources` rather than a member of the snapshot — a domain plan lists resources\n * as plain strings — and it is the single most-travelled link in the build lane: a build task's\n * `target.resourceRef` and `produces.resourceRef`, a placement decision's `subject.resourceRef`\n * and an experience view's `resourceId` all land here. Without this row every one of those was an\n * edge the graph could declare and not follow.\n */\n {\n aspectKey: 'domain-plan.resource',\n resourceType: WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_RESOURCE,\n rowsPath: 'domainPlanResources',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n // Back to the module that lists it — the one edge a projected row carries.\n { field: 'moduleId', targetAspectKey: 'domain-plan.module', many: false },\n ],\n },\n {\n aspectKey: 'domain-plan.relationship',\n resourceType: WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_RELATIONSHIP,\n rowsPath: 'domainPlanRelationships',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n /*\n * The two ENDS, as ONE spine field. The registry declares `sourceResourceRef` and\n * `targetResourceRef` separately and both land on the same aspect, and the projection joins a\n * reference to the descriptor edge whose target matches — so one target is one field, by\n * construction. The DIRECTION is not lost: it is on the row itself, where `sourceResourceRef`\n * and `targetResourceRef` render as \"From\" and \"To\"; what this field carries is the\n * click-through, which is the same for both ends.\n */\n { field: 'relatesResourceIds', targetAspectKey: 'domain-plan.resource', many: true },\n ],\n },\n {\n aspectKey: 'build-plan.task',\n resourceType: WorkbenchShared_ResourceType.ASPECT_BUILD_TASK,\n rowsPath: 'buildTasks',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'prerequisiteTaskIds', targetAspectKey: 'build-plan.task', many: true },\n /*\n * THE LINK BACK TO THE DECISION (#1427): a task's `target` names the domain-plan module or\n * relationship it builds. Carried inside an object, so the registry could not see it until its\n * drift pin walked one level down — and the spine could not link it until the registry did.\n */\n { field: 'targetModuleId', targetAspectKey: 'domain-plan.module', many: false },\n { field: 'targetRelationshipId', targetAspectKey: 'domain-plan.relationship', many: false },\n /*\n * The most-travelled link in the build lane (#1482): a task's `target.resourceRef` and its\n * `produces.resourceRef` both name the resource it builds. Two registry fields, one target,\n * so one spine field — what is built and what it produces are the same resource.\n */\n { field: 'resourceIds', targetAspectKey: 'domain-plan.resource', many: true },\n /* A task may serve a DRAFTED FEATURE (#1433 row 4) — declared once the data was measured. */\n { field: 'servesFeatureDraftIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'servesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'servesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'servesRoadmapPhaseIds', targetAspectKey: 'roadmap.phase', many: true },\n /* The vision edges (#629) — see the registry for why a build task may serve these. */\n { field: 'servesSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n { field: 'servesConstraintIds', targetAspectKey: 'vision.constraint', many: true },\n /*\n * The experience plan's entries on the PRODUCT side (#1660): a view, milestone or guidance task\n * names the entry it builds by the plan's own ref, so the task links to the decision.\n */\n { field: 'producesViewIds', targetAspectKey: 'experience-plan.view', many: true },\n { field: 'producesMilestoneIds', targetAspectKey: 'experience-plan.milestone', many: true },\n { field: 'producesGuidanceIds', targetAspectKey: 'experience-plan.guidance', many: true },\n /* A billing-catalogue task names the pricing plan it realises in `servesRefs` (#1835). */\n { field: 'servesPricingPlanIds', targetAspectKey: 'business-model.plan', many: true },\n ],\n },\n {\n /*\n * One composition decision per framework scenario (#1491) — NO edges: a decision names a\n * SCENARIO (a framework template) and a basis (a closed vocabulary), neither of which is a\n * decided element another aspect addresses.\n */\n aspectKey: 'capability-composition.decision',\n resourceType: WorkbenchShared_ResourceType.ASPECT_CAPABILITY_COMPOSITION_DECISION,\n rowsPath: 'compositionDecisions',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n /*\n * One planned website page (#1492). Its two edges reach the MARKET — a page is written for an\n * ICP, in a tone of voice — which is what makes the plan checkable from the snapshot's side.\n */\n aspectKey: 'website-plan.page',\n resourceType: WorkbenchShared_ResourceType.ASPECT_WEBSITE_PAGE,\n rowsPath: 'websitePages',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'audienceIcpIds', targetAspectKey: 'market.icp', many: true },\n { field: 'toneOfVoiceId', targetAspectKey: 'market.tone-of-voice', many: false },\n ],\n },\n {\n /* One planned surface of the application's experience (#1493) — where it lives, and what asked for it. */\n aspectKey: 'experience-plan.view',\n resourceType: WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_VIEW,\n rowsPath: 'experienceViews',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'moduleId', targetAspectKey: 'domain-plan.module', many: false },\n { field: 'resourceId', targetAspectKey: 'domain-plan.resource', many: false },\n { field: 'servesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'servesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'servesRoadmapPhaseIds', targetAspectKey: 'roadmap.phase', many: true },\n { field: 'servesFeatureDraftIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'servesSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n ],\n },\n {\n /* One configuration surface the application composes — no edge: it names files and tokens, not elements. */\n aspectKey: 'experience-plan.configuration',\n resourceType: WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_CONFIGURATION,\n rowsPath: 'experienceConfigurations',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n /* One moment the application recognises — the module declaring it and the resource that earns it. */\n aspectKey: 'experience-plan.milestone',\n resourceType: WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_MILESTONE,\n rowsPath: 'experienceMilestones',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'moduleId', targetAspectKey: 'domain-plan.module', many: false },\n { field: 'triggerResourceId', targetAspectKey: 'domain-plan.resource', many: false },\n { field: 'servesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'servesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'servesRoadmapPhaseIds', targetAspectKey: 'roadmap.phase', many: true },\n { field: 'servesFeatureDraftIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'servesSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n ],\n },\n {\n /* One piece of guidance, linked to the milestones a person must hold first — the journey as one path. */\n aspectKey: 'experience-plan.guidance',\n resourceType: WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_GUIDANCE,\n rowsPath: 'experienceGuidance',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'moduleId', targetAspectKey: 'domain-plan.module', many: false },\n { field: 'gatedByMilestoneIds', targetAspectKey: 'experience-plan.milestone', many: true },\n { field: 'hostViewId', targetAspectKey: 'experience-plan.view', many: false },\n { field: 'servesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'servesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'servesRoadmapPhaseIds', targetAspectKey: 'roadmap.phase', many: true },\n { field: 'servesFeatureDraftIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'servesSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n ],\n },\n {\n /*\n * One worker the backend delegates to (#1495). Its only edges are what asked for it: a worker's\n * routes are the BUILT package's units of work, not decided elements.\n */\n aspectKey: 'integration-plan.worker',\n resourceType: WorkbenchShared_ResourceType.ASPECT_INTEGRATION_WORKER,\n rowsPath: 'integrationWorkers',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'servesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'servesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'servesRoadmapPhaseIds', targetAspectKey: 'roadmap.phase', many: true },\n { field: 'servesFeatureDraftIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'servesSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n ],\n },\n {\n /*\n * One cron minion (#1495) — and the ONE aspect whose edges are not unique by target: its\n * containment whitelist reaches `domain-plan.resource` TWICE, once per direction, so both\n * carry `sourceField`. The direction is the decision, and collapsing the two would report a\n * minion as reading what it only writes.\n */\n aspectKey: 'integration-plan.minion',\n resourceType: WorkbenchShared_ResourceType.ASPECT_INTEGRATION_MINION,\n rowsPath: 'integrationMinions',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'readsResourceIds', sourceField: 'readsResourceRefs', targetAspectKey: 'domain-plan.resource', many: true },\n { field: 'writesResourceIds', sourceField: 'writesResourceRefs', targetAspectKey: 'domain-plan.resource', many: true },\n { field: 'servesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'servesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'servesRoadmapPhaseIds', targetAspectKey: 'roadmap.phase', many: true },\n { field: 'servesFeatureDraftIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'servesSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n ],\n },\n {\n /* One provider bound into one scope — no edge: a provider ref is the ENGINE's catalogue, not a decided element. */\n aspectKey: 'integration-plan.provider-binding',\n resourceType: WorkbenchShared_ResourceType.ASPECT_INTEGRATION_PROVIDER_BINDING,\n rowsPath: 'integrationProviderBindings',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n /* One channel work arrives on (#1630). Its only edges are what asked for it, like a worker's. */\n aspectKey: 'integration-plan.inbound-channel',\n resourceType: WorkbenchShared_ResourceType.ASPECT_INTEGRATION_INBOUND_CHANNEL,\n rowsPath: 'integrationInboundChannels',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'servesFunctionalRequirementIds', targetAspectKey: 'requirements.functional', many: true },\n { field: 'servesNonFunctionalRequirementIds', targetAspectKey: 'requirements.non-functional', many: true },\n { field: 'servesRoadmapPhaseIds', targetAspectKey: 'roadmap.phase', many: true },\n { field: 'servesFeatureDraftIds', targetAspectKey: 'feature-drafts.draft', many: true },\n { field: 'servesSuccessCriterionIds', targetAspectKey: 'vision.success-criterion', many: true },\n ],\n },\n {\n /*\n * One requirement's standing (#1496), and the aspect that carries BOTH multi-edge shapes at\n * once — which is why every edge here names its source field.\n *\n * Its business key IS its edge: the row exists to say something about ONE requirement, and\n * `requirementRef` reaches both halves of the family — one field, two targets — routed by\n * MEMBERSHIP rather than by the row's own `half` field, which it does carry. An aspect edge\n * declares its targets ONCE and has no per-row selection, and membership MEASURES where a ref\n * lives instead of trusting a landed file's claim about it. `landedTaskIds` and\n * `provenTaskIds` are the other shape, two fields to ONE target, and they must stay apart\n * because proven is a subset of landed and collapsing them would report work as verified that\n * only exists.\n *\n * The projection therefore joins on the PAIR. Naming the source field on all four is what makes\n * that join load-bearing rather than incidental: with them omitted the target-only fallback\n * happens to resolve the same rows, and a regression in the join would go unnoticed.\n */\n aspectKey: 'application-maturity.requirement',\n resourceType: WorkbenchShared_ResourceType.ASPECT_REQUIREMENT_MATURITY,\n rowsPath: 'requirementMaturities',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'functionalRequirementId', sourceField: 'requirementRef', targetAspectKey: 'requirements.functional', many: false },\n { field: 'nonFunctionalRequirementId', sourceField: 'requirementRef', targetAspectKey: 'requirements.non-functional', many: false },\n { field: 'landedTaskIds', sourceField: 'landedTaskRefs', targetAspectKey: 'build-plan.task', many: true },\n { field: 'provenTaskIds', sourceField: 'provenTaskRefs', targetAspectKey: 'build-plan.task', many: true },\n ],\n },\n {\n /* One planned documentation chapter (#1494) — no edge: it cites the BUILT product's own specifications. */\n aspectKey: 'documentation-plan.chapter',\n resourceType: WorkbenchShared_ResourceType.ASPECT_DOCUMENTATION_CHAPTER,\n rowsPath: 'documentationChapters',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'placement.group',\n resourceType: WorkbenchShared_ResourceType.ASPECT_PLACEMENT_GROUP,\n rowsPath: 'placementGroups',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'placement.decision',\n resourceType: WorkbenchShared_ResourceType.ASPECT_PLACEMENT_DECISION,\n rowsPath: 'placementDecisions',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n { field: 'groupId', targetAspectKey: 'placement.group', many: false },\n /*\n * A placement decision's SUBJECT is a domain-plan module or a RESOURCE (#1427/#1482), both\n * carried inside an object. The resource half was the one the graph could not follow until\n * the projected resource got a row of its own.\n */\n { field: 'subjectModuleId', targetAspectKey: 'domain-plan.module', many: false },\n { field: 'subjectResourceId', targetAspectKey: 'domain-plan.resource', many: false },\n ],\n },\n {\n aspectKey: 'compliance-candidate.section',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE_SECTION,\n rowsPath: 'complianceCandidateSections',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n /*\n * No edges since #1465: the producer family lands into the SET and is never indexed, so its\n * clause → fact link moved to `compliance-candidate-set.section`, the aspect that is read.\n */\n edges: [],\n },\n {\n aspectKey: 'compliance-candidate.variant-selection',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE_VARIANT_SELECTION,\n rowsPath: 'complianceCandidateVariantSelections',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'document-facts.declaration',\n resourceType: WorkbenchShared_ResourceType.ASPECT_DOCUMENT_FACT_DECLARATION,\n rowsPath: 'documentFactDeclarations',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n /*\n * The same row shape as the descriptor above and a SEPARATE resource, because the two families it\n * transcribes are separate (#192): one is regenerated by a producer, the other is only ever written\n * by a person. Merging them into one browsable list would erase exactly the provenance the split\n * exists to keep, and a reader could no longer tell which declarations survive the next producer run.\n */\n {\n aspectKey: 'document-facts-authored.declaration',\n resourceType: WorkbenchShared_ResourceType.ASPECT_AUTHORED_DOCUMENT_FACT_DECLARATION,\n rowsPath: 'authoredDocumentFactDeclarations',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n /*\n * INDEXED, not BUSINESS_KEY, and that is the registry's own answer rather than a simplification\n * here: the row is a union whose two arms key on different fields (`providerRef` vs\n * `subprocessorRef`), so no single field identifies a row across it.\n */\n aspectKey: 'processor-register.processor',\n resourceType: WorkbenchShared_ResourceType.ASPECT_PROCESSOR_REGISTER_ENTRY,\n rowsPath: 'processorRegisterEntries',\n identity: WorkbenchAspectIdentityKind.INDEXED,\n edges: [],\n },\n {\n /*\n * BUSINESS_KEY, unlike the processor entry above: a risk entry carries `entryRef`, which the\n * family validator holds unique and which `reviewOrder` addresses rows by. An indexed identity\n * here would make the register's own reading order unable to name the rows it orders.\n */\n aspectKey: 'risk-register.entry',\n resourceType: WorkbenchShared_ResourceType.ASPECT_RISK_REGISTER_ENTRY,\n rowsPath: 'riskRegisterEntries',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'release-policy.selection',\n resourceType: WorkbenchShared_ResourceType.ASPECT_RELEASE_POLICY_SELECTION,\n rowsPath: 'releasePolicySelections',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [],\n },\n {\n aspectKey: 'document-publication.variant',\n resourceType: WorkbenchShared_ResourceType.ASPECT_DOCUMENT_PUBLICATION_VARIANT,\n rowsPath: 'documentPublicationVariants',\n identity: WorkbenchAspectIdentityKind.INDEXED,\n edges: [],\n },\n /*\n * The two landed SET families of the governed-document lane (#1105). A drafting run EMITS one\n * candidate (the singular family the two `compliance-candidate.*` descriptors above transcribe) and\n * LANDS into the set; a composed release lands into the release set. Without these two, the set that\n * actually landed had no popup and no graph row — a journey that drafted the privacy notice showed the\n * draft's sections only through the producer's contract.\n */\n {\n aspectKey: 'compliance-candidate-set.candidate',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE,\n rowsPath: 'complianceCandidates',\n // Keyed on `documentRef`: the identity decision the set schema records (locale and jurisdictions\n // are publication-variant concerns and would make a draft's identity change as it matured).\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n /*\n * These rows CITE facts, and a fact is either DERIVED from the application or DECIDED by a\n * person — one registry edge with two targets, which the projection routes by membership, so\n * the spine needs one field per target (#1427).\n */\n { field: 'citesFactIds', targetAspectKey: 'document-facts.declaration', many: true },\n { field: 'citesDecidedFactIds', targetAspectKey: 'document-facts-authored.declaration', many: true },\n ],\n },\n {\n /*\n * One SECTION of a landed candidate (#1465), derived from the set's `candidates` and addressed by\n * the composed `<documentRef>/<sectionRef>` — a section ref alone repeats across documents.\n */\n aspectKey: 'compliance-candidate-set.section',\n resourceType: WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE_SET_SECTION,\n rowsPath: 'complianceCandidateSetSections',\n identity: WorkbenchAspectIdentityKind.BUSINESS_KEY,\n edges: [\n // Back to the candidate the section belongs to.\n { field: 'complianceCandidateId', targetAspectKey: 'compliance-candidate-set.candidate', many: false },\n /*\n * The section's CLAUSES cite the facts they rest on — derived or decided — one registry edge with\n * two targets, routed by membership, so one spine field per target (#1427).\n */\n { field: 'citesFactIds', targetAspectKey: 'document-facts.declaration', many: true },\n { field: 'citesDecidedFactIds', targetAspectKey: 'document-facts-authored.declaration', many: true },\n ],\n },\n {\n aspectKey: 'document-release-set.release',\n resourceType: WorkbenchShared_ResourceType.ASPECT_DOCUMENT_RELEASE,\n rowsPath: 'documentReleases',\n // A release is keyed by document × locale × jurisdictions — no single-field business key, so the\n // registry falls back to the indexed identity, as the publication variant beside it does.\n identity: WorkbenchAspectIdentityKind.INDEXED,\n edges: [],\n },\n];\n\nconst DESCRIPTOR_BY_ASPECT_KEY: ReadonlyMap<string, WorkbenchAspectDescriptor> = new Map(\n WORKBENCH_ASPECT_DESCRIPTORS.map((descriptor) => [descriptor.aspectKey, descriptor]),\n);\n\nexport function getWorkbenchAspectDescriptor(aspectKey: string): WorkbenchAspectDescriptor | undefined {\n return DESCRIPTOR_BY_ASPECT_KEY.get(aspectKey);\n}\n\n/**\n * The shared envelope, instantiated per aspect with its identity field and reference fields.\n *\n * `content` stays a RAW record for the same reason the artifact resource's does: the spine never\n * sees the item schemas; the workbench frontend renders `content` through the REAL `_core` schema\n * from the registry, so typed rendering happens where the type authority is a dependency.\n */\nexport function buildWorkbenchAspectEnvelopeSchema(\n descriptor: WorkbenchAspectDescriptor,\n): z.ZodObject<z.ZodRawShape> {\n const identityField = WorkbenchShared_ResourceFieldIdentifier[descriptor.resourceType];\n const shape: Record<string, z.ZodTypeAny> = {\n /**\n * The composed address the projection emits, and the ONLY field a row click can resolve by.\n *\n * `.isSummaryField()` is not decoration here. A list renders SUMMARIES, and the frontend resolves\n * a clicked row's target by reading this field off the item — so an id that does not survive the\n * projection makes every row in every aspect list silently stop responding to a click, while READ\n * still answers 200 (the adapter filters by `identityFields`, not by this name). The only symptom\n * is one console line. Pinned for the whole population by the addressing-field contract test.\n */\n [identityField]: z.string().min(1).isPrimaryKey().isSummaryField(),\n /**\n * The owning artifact family id — a LIVE reference: `family` is the artifacts resource's own\n * field identifier, so the global map resolves it, and the artifacts READ is addressable —\n * the one link out of any popup back to the document the aspect lives in.\n */\n family: z.string().isForeignKey().isSummaryField(),\n /** The registry aspect key (`market.icp`) — which KIND of aspect this row is. */\n aspectKey: z.string().isSummaryField(),\n /** The item's headline value (the registry's `headlineField`), projected for lists/summaries. */\n title: z.string().isSummaryField(),\n /**\n * The full item as landed — rendered frontend-side through the family's own `_core` schema.\n *\n * Deliberately NOT a summary field: it is the whole item, and carrying it in every list row is\n * what the summary projection exists to avoid.\n */\n content: z.record(z.string(), z.unknown()),\n };\n for (const edge of descriptor.edges) {\n // FK marking rides the ELEMENT for arrays (the decorator's home is the string type); the\n // display pipeline accepts `string | string[]` values on a reference field either way.\n shape[edge.field] = edge.many\n ? z.array(z.string().isForeignKey())\n : z.string().isForeignKey().optional();\n }\n return z.object(shape);\n}\n\ntype WorkbenchAspect_CoreOperations = CoreResourceOperation.READ | CoreResourceOperation.LIST;\n\n/**\n * One introspection resource-configuration factory per aspect, all from the same mold as their\n * two siblings: READ/LIST only, `APPLICATION_STRUCTURE` tenancy, rows served by the companion's\n * family-aspects behavior at this aspect's `rowsPath`. Identity is always the COMPOSED field the\n * projection emits (see the identifier-map note in the types module).\n */\nexport function buildWorkbenchAspectConfigurationFactory(descriptor: WorkbenchAspectDescriptor) {\n const envelopeSchema = buildWorkbenchAspectEnvelopeSchema(descriptor);\n return (resourcesRelationships: ResourceRelationship[]) =>\n createResourceConfiguration_Initialization<undefined, WorkbenchAspect_CoreOperations, typeof envelopeSchema>({\n mainSchema: envelopeSchema,\n resourceIdentifier: descriptor.resourceType,\n resourceFieldIdentifier: WorkbenchShared_ResourceFieldIdentifier[descriptor.resourceType],\n resourceRelationships: resourcesRelationships,\n isSystemResource: false,\n persistenceAdapter: PersistenceAdapter.INTROSPECTION,\n introspectionBinding: {\n behavior: 'family-aspects',\n rowsPath: descriptor.rowsPath,\n tenancy: IntrospectionTenancyStance.APPLICATION_STRUCTURE,\n },\n coreOperations: [CoreResourceOperation.READ, CoreResourceOperation.LIST],\n customOperation: undefined,\n operationsConfiguration: {\n [CoreResourceOperation.READ]: { variants: [createReadOnlyApiVariant()] },\n [CoreResourceOperation.LIST]: {\n variants: [{\n ...createReadOnlyListApiVariant(),\n /* The two slices every aspect list needs: which family, which kind. */\n filterFields: {\n family: z.string(),\n aspectKey: z.string(),\n },\n }],\n },\n },\n });\n}\n\n/**\n * Every aspect's relationships:\n *\n * - the STANDALONE application anchor each INTROSPECTION resource needs (primary scope derives\n * from it; STANDALONE keeps the route flat — the established pattern of its two siblings), and\n * - one REFERENCE relationship per edge, carrying `foreignKeyField`: that is what teaches the\n * frontend's field-identifier map to resolve the envelope field to its target resource, which\n * is the entire navigation story (labels, popups, links) with no bespoke lookup anywhere.\n */\nexport function buildWorkbenchAspectRelationships(): ResourceRelationship[] {\n const relationships: ResourceRelationship[] = [];\n for (const descriptor of WORKBENCH_ASPECT_DESCRIPTORS) {\n relationships.push(\n createResourcesRelationship(\n CoreResourceType.APPLICATION,\n descriptor.resourceType,\n ResourceRelationshipCardinality.ONE,\n ResourceRelationshipCardinality.MANY,\n {\n nature: RelationshipNature.COMPOSITION,\n isPrimaryScope: true,\n accessScopeStrategy: ResourceRelationshipAccessScopeStrategy.STANDALONE,\n contextPolicy: {},\n },\n ),\n );\n for (const edge of descriptor.edges) {\n const target = DESCRIPTOR_BY_ASPECT_KEY.get(edge.targetAspectKey);\n if (!target) {\n throw new Error(\n `workbench aspect ${descriptor.aspectKey}: edge ${edge.field} targets unknown aspect ${edge.targetAspectKey}`,\n );\n }\n relationships.push(\n createResourcesRelationship(\n target.resourceType,\n descriptor.resourceType,\n ResourceRelationshipCardinality.ONE,\n edge.many ? ResourceRelationshipCardinality.MANY : ResourceRelationshipCardinality.ONE,\n {\n nature: RelationshipNature.REFERENCE,\n foreignKeyField: edge.field,\n contextPolicy: {},\n /*\n * STANDALONE here too, not only on the application anchor: a relationship without it\n * makes the router mount the holder NESTED under its target and drop the flat route —\n * measured on this very sweep (every edge-carrying aspect 404'd flat while its\n * edge-free siblings answered 200). A reference edge is navigation metadata, never a\n * URL parent.\n */\n accessScopeStrategy: ResourceRelationshipAccessScopeStrategy.STANDALONE,\n /*\n * The aspect graph is CYCLIC by nature — an ICP names its triggers and a trigger names\n * the ICPs it affects; a task prerequisites tasks; an asset derives from an asset. These\n * are REFERENCES in a knowledge graph, not a containment tree, so every edge declares\n * the cycle admissible rather than pretending the graph is a DAG.\n */\n allowCycle: true,\n /*\n * The two self-edges (a task's prerequisites, an asset's derivation source) are graphs\n * with roots — a MASTER asset derives from nothing — and the factory refuses a\n * self-reference whose parent is mandatory for exactly that reason. Harmless on the\n * non-self edges: every aspect reference is optional by nature (dangling-tolerant).\n */\n parentResourceRequirement: ResourceParentResourceRequirement.OPTIONAL,\n },\n ),\n );\n }\n }\n return relationships;\n}\n\n/** The factory-map slice for all aspect resources — merged into the workbench map by its owner. */\nexport const workbenchAspectResources_ConfigurationsFactoryMap: Record<\n string,\n ReturnType<typeof buildWorkbenchAspectConfigurationFactory>\n> = Object.fromEntries(\n WORKBENCH_ASPECT_DESCRIPTORS.map((descriptor) => [\n descriptor.resourceType,\n buildWorkbenchAspectConfigurationFactory(descriptor),\n ]),\n);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"workbench-creation-console.custom.shared.schemas.d.ts","sourceRoot":"","sources":["../../../../src/workbench/workbench-creation-console.custom.shared.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,MAAM,kDAAkD,CAAC;AAE/H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH;;;GAGG;AACH,oBAAY,2BAA2B;IACrC;;;OAGG;IACH,aAAa,kBAAkB;IAC/B,+FAA+F;IAC/F,sBAAsB,2BAA2B;IACjD;;;OAGG;IACH,SAAS,cAAc;IACvB;;;;;OAKG;IACH,eAAe,oBAAoB;CACpC;AAED;;;GAGG;AACH,oBAAY,2BAA2B;IACrC,0BAA0B;IAC1B,MAAM,WAAW;IACjB;;;OAGG;IACH,OAAO,YAAY;IACnB,8EAA8E;IAC9E,MAAM,WAAW;CAClB;AAED,iGAAiG;AACjG,eAAO,MAAM,oCAAoC;;;;;;iBAgB/C,CAAC;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAC;AAEjG,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;iBAiD1C,CAAC;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAEvF,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;iBAI/C,CAAC;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAC;AAEjG;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B;;;;iBAKxC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEnF,eAAO,MAAM,oCAAoC;;;;;;;;;;iBA0B/C,CAAC;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAC;AAEjG,eAAO,MAAM,oCAAoC;;;;IAI/C,4GAA4G;;iBAE5G,CAAC;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAC;AAEjG;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;iBAkB1C,CAAC;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAEvF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;iBAGtC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAE/E,oGAAoG;AACpG,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAExG;AAED,mGAAmG;AACnG,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,2BAA2B,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAK9H;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iCAAiC,SAAS,CAAC;AAExD,wBAAgB,8BAA8B,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE/F;AAED,kGAAkG;AAClG,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAIhH;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,mCAAmC;;;;;iBAQ9C,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAE/F,eAAO,MAAM,4BAA4B;;;;;;;;;;iBAKvC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAEjF,uGAAuG;AACvG,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,oBAAoB,GAAG,4BAA4B,CAOrG;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,4BAA4B,CAAC;AAEtE,eAAO,MAAM,8BAA8B;;;;iBAIzC,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC"}
1
+ {"version":3,"file":"workbench-creation-console.custom.shared.schemas.d.ts","sourceRoot":"","sources":["../../../src/workbench/workbench-creation-console.custom.shared.schemas.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"workbench-creation-console.custom.shared.schemas.js","sourceRoot":"","sources":["../../../../src/workbench/workbench-creation-console.custom.shared.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\n\nimport { WorkbenchCreationHomeLineKind, WorkbenchCreationHomeSection } from './workbench-creation-plane.custom.shared.schemas';\n\n/**\n * The CREATION CONSOLE contract — how a coding-agent session (Claude Code, or any agent driving\n * `wildo`) follows what the companion did and answers what the companion asks.\n *\n * ## Why a console needs its own contract beside the workbench's resources\n *\n * The companion is the master of application creation: it runs playbooks, dispatches coding\n * workers over ACP, runs judges and generation steps. The person drives it from a CONSOLE — the\n * coding-agent session they are already working in — and the workbench becomes the dashboard of\n * that state (Paul, 2026-09-25). Two things are then owed to the console:\n *\n * 1. FEEDBACK: what the companion did (a run completed or was refused, a dispatch settled, a judge\n * verdict) and what it now waits for.\n * 2. ANSWERS: every question the companion asks must be answerable from the console, once, and\n * the answer must reach the same service the workbench's own operation reaches.\n *\n * The facts already exist as creation-plane rows (Home's lines, the waiting runs, the parked coding\n * questions, the dossier). The workbench reaches them through the resource plane, which needs a\n * signed-in PERSON; a console reaches the companion through the local-token plane\n * (`/api/companion/*`), which is how every `wildo` verb already talks to it. This contract is that\n * plane's view of the SAME rows — no second derivation, and no second implementation of an answer:\n * each answer kind calls the companion service the matching workbench operation calls.\n *\n * ## Why the question queue is ONE list rather than one read per kind\n *\n * A person (or an agent acting for them) asks \"what is waiting on me?\" once. Four reads, each with\n * its own identity and answer route, is what makes a console skip one. So the companion folds the\n * four row kinds into one list with one identity scheme and one answer door, and says per question\n * which actions it admits — the console restates no policy.\n */\n\n/**\n * WHAT KIND of question a queued item is — which companion lane asked it, and so which service an\n * answer reaches.\n */\nexport enum CreationConsoleQuestionKind {\n /**\n * A playbook run SUSPENDED mid-derivation on a round of questions it cannot decide alone. One item\n * per round, carrying every question of the round: the run resumes on one answer to the round.\n */\n CLARIFICATION = 'clarification',\n /** A coding worker (an ACP session the companion dispatched) PARKED on a question it asked. */\n PARKED_CODING_QUESTION = 'parked-coding-question',\n /**\n * An interview question a step can run as soon as it is answered — the dossier entry the workbench\n * shows as \"asked of you now\". Answering lands `creator-inputs`; a commit accepts it.\n */\n INTERVIEW = 'interview',\n /**\n * A fact a drafted governed document still needs. LISTED so the queue is total over what waits on\n * the person, NOT answerable here: landing governance facts is a whole-document sitting that also\n * names the governance scope and who decided, and `compliance-is-derived-from-the-product.md`\n * holds that questionnaire where it is until the evidence tier exists. Answer it in the workbench.\n */\n GOVERNANCE_FACT = 'governance-fact',\n}\n\n/**\n * WHAT an answer does — the industry three-action model the playbook clarification already uses\n * (MCP elicitation's vocabulary), so every kind of question speaks it.\n */\nexport enum CreationConsoleAnswerAction {\n /** Give the answer(s). */\n ANSWER = 'answer',\n /**\n * Let the asking derivation decide and state its assumption. Clarifications only. May carry the answers\n * the person did give: the run then decides only the questions left unanswered.\n */\n DECLINE = 'decline',\n /** Abandon the run that asked. Clarifications and parked coding questions. */\n CANCEL = 'cancel',\n}\n\n/** One question inside a queued item — a clarification round carries several, the others one. */\nexport const CreationConsole_QuestionField_Schema = z.object({\n /** The ref an answer names. */\n ref: z.string().min(1),\n /** The question as a person reads it, verbatim from whoever asked. */\n question: z.string().min(1),\n /** Why it is asked — what cannot be decided without it. NULL when the asker states none. */\n why: z.string().min(1).nullable(),\n /**\n * The answer's shape, in the ASKER's own vocabulary — deliberately a string, because this field carries\n * two: `HumanDecision_FieldKind` (`free_text` | `choice` | `confirm`) for a playbook round, a parked run\n * and an interview question, and the governed-document questionnaire's answer kind for a governance\n * fact. One enum here would be false for one of them.\n */\n kind: z.string().min(1),\n /** The closed answer set for a `choice`; empty otherwise. */\n options: z.array(z.string()),\n});\nexport type CreationConsole_QuestionField = z.infer<typeof CreationConsole_QuestionField_Schema>;\n\nexport const CreationConsole_Question_Schema = z.object({\n /**\n * `<kind>:<creation-plane row id>`. Row ids are sanitized to `[a-zA-Z0-9_-]`, so the first `:`\n * always separates the kind — see {@link parseCreationConsoleQuestionId}.\n */\n questionId: z.string().min(1),\n kind: z.enum(CreationConsoleQuestionKind),\n /** When it was asked, ISO-8601. NULL when the row records no instant (an interview question has none). */\n askedAt: z.string().nullable(),\n /** The playbook that asks, when a playbook asks. */\n playbookRef: z.string().nullable(),\n /** The build-plan task the asking coding run was working on, for a parked coding question. */\n taskRef: z.string().nullable(),\n /**\n * The opened INSTANCE of the step the question is asked for (#1609), for an interview question; NULL for\n * the step itself and for other kinds. An answer lands on that instance, so the reader must see which.\n */\n instanceKey: z.string().nullable(),\n /** The governed document, for a governance fact. */\n definitionRef: z.string().nullable(),\n /**\n * WHICH revision of the question the console read — the clarification's round, the parked run's\n * suspension ref. An answer must echo it: a run that has moved on to another question refuses an\n * answer written for the previous one (#1584, #1581) instead of applying it to the wrong question.\n * NULL for kinds that have no revision.\n */\n revision: z.string().nullable(),\n /** The questions to answer, in order. */\n fields: z.array(CreationConsole_QuestionField_Schema),\n /** What an answer may do for THIS item — empty when the console cannot answer it. */\n actions: z.array(z.enum(CreationConsoleAnswerAction)),\n /*\n * Facts that change what answering MEANS, for the reader to weigh first. Carried as facts rather\n * than as a sentence: the words belong to whoever renders them (`display-text-comes-from-i18n.md`).\n */\n /** The family a suspended run was producing when it stopped to ask. */\n producingFamily: z.string().nullable(),\n /** The suspended run was a dry run: answering it writes nothing. NULL for other kinds. */\n dryRun: z.boolean().nullable(),\n /** FALSE when the parked coding run cannot re-enter its own session, so an answer starts a new one. NULL for other kinds. */\n resumable: z.boolean().nullable(),\n /** Every family an interview answer feeds — what goes stale when it changes. Empty for other kinds. */\n affectsFamilies: z.array(z.string()),\n /**\n * The signed-in person a clarification is ROUTED to (#1751) — whoever started its run from the workbench\n * or the conversation. Only they may answer it, and the console carries no person, so such an item has\n * no actions here: it is answered in the workbench, signed in as them. NULL when it is unrouted.\n */\n routedToUserId: z.string().nullable(),\n});\nexport type CreationConsole_Question = z.infer<typeof CreationConsole_Question_Schema>;\n\nexport const CreationConsole_QuestionQueue_Schema = z.object({\n /** When the queue was read, ISO-8601. */\n computedAt: z.string(),\n questions: z.array(CreationConsole_Question_Schema),\n});\nexport type CreationConsole_QuestionQueue = z.infer<typeof CreationConsole_QuestionQueue_Schema>;\n\n/**\n * One answer to one field. It carries its OWN author because a round is answered in one call while its\n * fields may be answered by different parties (#1658): an agent derives one from a declared fact, the\n * person decides the next. With one author per request, a mixed round either stamped the person's name\n * on the agent's derivation or was refused as incomplete — the agent answering alone could not cover the\n * judgement half, and the resume refuses a round answered in part.\n */\nexport const CreationConsole_Answer_Schema = z.object({\n ref: z.string().min(1),\n value: z.string().min(1),\n /** Who gave THIS answer; overrides the request's `answeredByRef` for this field. Same vocabulary. */\n answeredByRef: z.string().min(1).optional(),\n});\nexport type CreationConsole_Answer = z.infer<typeof CreationConsole_Answer_Schema>;\n\nexport const CreationConsole_AnswerRequest_Schema = z.object({\n questionId: z.string().min(1),\n /** The `revision` of the item as it was READ. Required for the kinds that carry one. */\n revision: z.string().min(1).nullable().optional(),\n action: z.enum(CreationConsoleAnswerAction),\n /**\n * One entry per answered field, by its `ref`. Required for `answer`, which must cover every field.\n * A clarification's `decline` may carry the fields the person DID answer and delegates only the rest\n * (#1658), so one round can mix what a person decided with what they left to the run.\n */\n answers: z.array(CreationConsole_Answer_Schema).optional(),\n /**\n * WHO answered — recorded for EVERY kind (#1658): on an interview answer in the dossier, on a\n * clarification in the committed `DECISIONS.md`, on a parked coding answer in `CODING-ANSWERS.md`.\n * The local-token plane proves only that the caller\n * is on this machine — the same trust as a git commit author, which is what accepts the answer\n * anyway (`one-source-of-truth.md` rule 7) — so `wildo` sends the workspace's git identity as\n * `git:<email>` unless told otherwise, and an agent answering on its own sends `agent:<name>`. The\n * prefix matters because the same dossier field holds the workbench's signed-in user ids: it says\n * which door an answer came through. Required for an interview answer (the dossier cannot record\n * one without it); optional for the others, which then record nothing rather than a guess.\n *\n * The DEFAULT author of every answer in the request: an answer carrying its own `answeredByRef` keeps\n * it. A parked coding question and an interview answer are one field each, so the two cannot differ.\n */\n answeredByRef: z.string().min(1).optional(),\n});\nexport type CreationConsole_AnswerRequest = z.infer<typeof CreationConsole_AnswerRequest_Schema>;\n\nexport const CreationConsole_AnswerOutcome_Schema = z.looseObject({\n questionId: z.string().min(1),\n kind: z.enum(CreationConsoleQuestionKind),\n action: z.enum(CreationConsoleAnswerAction),\n /** What the answering service returned — its own shape (a resumed run's outcome, a landed dossier file). */\n outcome: z.unknown(),\n});\nexport type CreationConsole_AnswerOutcome = z.infer<typeof CreationConsole_AnswerOutcome_Schema>;\n\n/**\n * One FEED line: a Home line (what happened, what is asked, what could come next) with the row it\n * points at attached, so a console reads a run's verdict or a dispatch's error without a second call.\n *\n * `at` is ISO-8601 here — this is a JSON contract, not a resource row.\n */\nexport const CreationConsole_FeedLine_Schema = z.object({\n lineId: z.string().min(1),\n section: z.enum(WorkbenchCreationHomeSection),\n kind: z.enum(WorkbenchCreationHomeLineKind),\n at: z.string().nullable(),\n playbookRef: z.string().nullable(),\n taskRef: z.string().nullable(),\n subject: z.string().nullable(),\n failed: z.boolean(),\n acceptable: z.boolean(),\n needsAnswers: z.boolean(),\n stuckReason: z.string().nullable(),\n targetResourceType: z.string().min(1),\n targetResourceId: z.string().min(1),\n /** The row the line points at, as the creation plane serves it. NULL when it has gone since. */\n target: z.record(z.string(), z.unknown()).nullable(),\n /** The queued question this line is about, when it is about exactly one — answer it by this id. */\n questionId: z.string().nullable(),\n});\nexport type CreationConsole_FeedLine = z.infer<typeof CreationConsole_FeedLine_Schema>;\n\nexport const CreationConsole_Feed_Schema = z.object({\n computedAt: z.string(),\n lines: z.array(CreationConsole_FeedLine_Schema),\n});\nexport type CreationConsole_Feed = z.infer<typeof CreationConsole_Feed_Schema>;\n\n/** The one identity rule, applied by the companion when it emits and when it resolves an answer. */\nexport function formatCreationConsoleQuestionId(kind: CreationConsoleQuestionKind, rowId: string): string {\n return `${kind}:${rowId}`;\n}\n\n/** The inverse of {@link formatCreationConsoleQuestionId}; `null` for anything that is not one. */\nexport function parseCreationConsoleQuestionId(questionId: string): { kind: CreationConsoleQuestionKind; rowId: string } | null {\n const separator = questionId.indexOf(':');\n if (separator <= 0 || separator === questionId.length - 1) return null;\n const kind = Object.values(CreationConsoleQuestionKind).find((candidate) => candidate === questionId.slice(0, separator));\n return kind ? { kind, rowId: questionId.slice(separator + 1) } : null;\n}\n\n/**\n * The workbench DEEP LINK (#1652): `?open=<resourceType>:<resourceId>` opens that creation-plane row\n * in the workbench's detail pane, the way clicking its Home line does. `wildo workbench open <ref>`\n * writes it; the workbench reads it once and drops it. One format, owned here, so the writer and the\n * reader cannot disagree about it.\n *\n * The FIRST `:` separates the two, because a resource type never contains one and a row id may.\n */\nexport const WORKBENCH_OPEN_DETAIL_QUERY_PARAM = 'open';\n\nexport function formatWorkbenchOpenDetailParam(resourceType: string, resourceId: string): string {\n return `${resourceType}:${resourceId}`;\n}\n\n/** The inverse of {@link formatWorkbenchOpenDetailParam}; `null` for anything that is not one. */\nexport function parseWorkbenchOpenDetailParam(value: string): { resourceType: string; resourceId: string } | null {\n const separator = value.indexOf(':');\n if (separator <= 0 || separator === value.length - 1) return null;\n return { resourceType: value.slice(0, separator), resourceId: value.slice(separator + 1) };\n}\n\n/**\n * The PULSE (#1657): a read cheap enough to poll every few seconds from a hook or a status line.\n *\n * Nothing in it is derived on request. `sequence` and `changedAt` move whenever the creation plane's\n * boards are invalidated (every mutation path ends there) or a watched board is republished;\n * `runsInFlight` is the process's own running-run count; `summary` is what the most recent FEED read\n * counted, with its instant — `null` until someone has read the feed, because computing it here would\n * make the pulse as slow as the feed. A poller compares pulses and reads the feed only when one moved.\n */\nexport const CreationConsole_PulseSummary_Schema = z.object({\n /** Lines in the ASKED section: questions waiting on the person. */\n asked: z.number().int().nonnegative(),\n /** Lines marked acceptable: finished work waiting to be committed. */\n acceptable: z.number().int().nonnegative(),\n /** SINCE lines that failed. */\n failed: z.number().int().nonnegative(),\n computedAt: z.string(),\n});\nexport type CreationConsole_PulseSummary = z.infer<typeof CreationConsole_PulseSummary_Schema>;\n\nexport const CreationConsole_Pulse_Schema = z.object({\n sequence: z.number().int().nonnegative(),\n changedAt: z.string().nullable(),\n runsInFlight: z.number().int().nonnegative(),\n summary: CreationConsole_PulseSummary_Schema.nullable(),\n});\nexport type CreationConsole_Pulse = z.infer<typeof CreationConsole_Pulse_Schema>;\n\n/** The pulse a feed's lines imply — one counting rule, used by the companion when it serves a feed. */\nexport function summarizeCreationConsoleFeed(feed: CreationConsole_Feed): CreationConsole_PulseSummary {\n return {\n asked: feed.lines.filter((line) => line.section === WorkbenchCreationHomeSection.ASKED).length,\n acceptable: feed.lines.filter((line) => line.acceptable).length,\n failed: feed.lines.filter((line) => line.section === WorkbenchCreationHomeSection.SINCE && line.failed).length,\n computedAt: feed.computedAt,\n };\n}\n\n/**\n * Where a running dev companion says it listens (#1657) — `<app>/.wildo-saas/state/companion-endpoint.json`.\n *\n * Written by the companion once its server is up, beside `companion.token`, because the one party that\n * KNOWS the address is the process listening on it. It exists for callers that must answer in\n * milliseconds — the console's per-prompt hook and its status line — which cannot afford the CLI's own\n * address resolution (it evaluates the authored infrastructure config). The record may outlive the\n * process; a caller treats a refused connection as \"not running\", never the file's presence.\n */\nexport const COMPANION_ENDPOINT_FILE_NAME = 'companion-endpoint.json';\n\nexport const CompanionEndpointRecord_Schema = z.object({\n origin: z.string().url(),\n pid: z.number().int().positive(),\n startedAt: z.string(),\n});\nexport type CompanionEndpointRecord = z.infer<typeof CompanionEndpointRecord_Schema>;\n"]}
1
+ {"version":3,"file":"workbench-creation-console.custom.shared.schemas.js","sourceRoot":"","sources":["../../../src/workbench/workbench-creation-console.custom.shared.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\n\nimport { WorkbenchCreationHomeLineKind, WorkbenchCreationHomeSection } from './workbench-creation-plane.custom.shared.schemas';\n\n/**\n * The CREATION CONSOLE contract — how a coding-agent session (Claude Code, or any agent driving\n * `wildo`) follows what the companion did and answers what the companion asks.\n *\n * ## Why a console needs its own contract beside the workbench's resources\n *\n * The companion is the master of application creation: it runs playbooks, dispatches coding\n * workers over ACP, runs judges and generation steps. The person drives it from a CONSOLE — the\n * coding-agent session they are already working in — and the workbench becomes the dashboard of\n * that state (Paul, 2026-09-25). Two things are then owed to the console:\n *\n * 1. FEEDBACK: what the companion did (a run completed or was refused, a dispatch settled, a judge\n * verdict) and what it now waits for.\n * 2. ANSWERS: every question the companion asks must be answerable from the console, once, and\n * the answer must reach the same service the workbench's own operation reaches.\n *\n * The facts already exist as creation-plane rows (Home's lines, the waiting runs, the parked coding\n * questions, the dossier). The workbench reaches them through the resource plane, which needs a\n * signed-in PERSON; a console reaches the companion through the local-token plane\n * (`/api/companion/*`), which is how every `wildo` verb already talks to it. This contract is that\n * plane's view of the SAME rows — no second derivation, and no second implementation of an answer:\n * each answer kind calls the companion service the matching workbench operation calls.\n *\n * ## Why the question queue is ONE list rather than one read per kind\n *\n * A person (or an agent acting for them) asks \"what is waiting on me?\" once. Four reads, each with\n * its own identity and answer route, is what makes a console skip one. So the companion folds the\n * four row kinds into one list with one identity scheme and one answer door, and says per question\n * which actions it admits — the console restates no policy.\n */\n\n/**\n * WHAT KIND of question a queued item is — which companion lane asked it, and so which service an\n * answer reaches.\n */\nexport enum CreationConsoleQuestionKind {\n /**\n * A playbook run SUSPENDED mid-derivation on a round of questions it cannot decide alone. One item\n * per round, carrying every question of the round: the run resumes on one answer to the round.\n */\n CLARIFICATION = 'clarification',\n /** A coding worker (an ACP session the companion dispatched) PARKED on a question it asked. */\n PARKED_CODING_QUESTION = 'parked-coding-question',\n /**\n * An interview question a step can run as soon as it is answered — the dossier entry the workbench\n * shows as \"asked of you now\". Answering lands `creator-inputs`; a commit accepts it.\n */\n INTERVIEW = 'interview',\n /**\n * A fact a drafted governed document still needs. LISTED so the queue is total over what waits on\n * the person, NOT answerable here: landing governance facts is a whole-document sitting that also\n * names the governance scope and who decided, and `compliance-is-derived-from-the-product.md`\n * holds that questionnaire where it is until the evidence tier exists. Answer it in the workbench.\n */\n GOVERNANCE_FACT = 'governance-fact',\n}\n\n/**\n * WHAT an answer does — the industry three-action model the playbook clarification already uses\n * (MCP elicitation's vocabulary), so every kind of question speaks it.\n */\nexport enum CreationConsoleAnswerAction {\n /** Give the answer(s). */\n ANSWER = 'answer',\n /**\n * Let the asking derivation decide and state its assumption. Clarifications only. May carry the answers\n * the person did give: the run then decides only the questions left unanswered.\n */\n DECLINE = 'decline',\n /** Abandon the run that asked. Clarifications and parked coding questions. */\n CANCEL = 'cancel',\n}\n\n/** One question inside a queued item — a clarification round carries several, the others one. */\nexport const CreationConsole_QuestionField_Schema = z.object({\n /** The ref an answer names. */\n ref: z.string().min(1),\n /** The question as a person reads it, verbatim from whoever asked. */\n question: z.string().min(1),\n /** Why it is asked — what cannot be decided without it. NULL when the asker states none. */\n why: z.string().min(1).nullable(),\n /**\n * The answer's shape, in the ASKER's own vocabulary — deliberately a string, because this field carries\n * two: `HumanDecision_FieldKind` (`free_text` | `choice` | `confirm`) for a playbook round, a parked run\n * and an interview question, and the governed-document questionnaire's answer kind for a governance\n * fact. One enum here would be false for one of them.\n */\n kind: z.string().min(1),\n /** The closed answer set for a `choice`; empty otherwise. */\n options: z.array(z.string()),\n});\nexport type CreationConsole_QuestionField = z.infer<typeof CreationConsole_QuestionField_Schema>;\n\nexport const CreationConsole_Question_Schema = z.object({\n /**\n * `<kind>:<creation-plane row id>`. Row ids are sanitized to `[a-zA-Z0-9_-]`, so the first `:`\n * always separates the kind — see {@link parseCreationConsoleQuestionId}.\n */\n questionId: z.string().min(1),\n kind: z.enum(CreationConsoleQuestionKind),\n /** When it was asked, ISO-8601. NULL when the row records no instant (an interview question has none). */\n askedAt: z.string().nullable(),\n /** The playbook that asks, when a playbook asks. */\n playbookRef: z.string().nullable(),\n /** The build-plan task the asking coding run was working on, for a parked coding question. */\n taskRef: z.string().nullable(),\n /**\n * The opened INSTANCE of the step the question is asked for (#1609), for an interview question; NULL for\n * the step itself and for other kinds. An answer lands on that instance, so the reader must see which.\n */\n instanceKey: z.string().nullable(),\n /** The governed document, for a governance fact. */\n definitionRef: z.string().nullable(),\n /**\n * WHICH revision of the question the console read — the clarification's round, the parked run's\n * suspension ref. An answer must echo it: a run that has moved on to another question refuses an\n * answer written for the previous one (#1584, #1581) instead of applying it to the wrong question.\n * NULL for kinds that have no revision.\n */\n revision: z.string().nullable(),\n /** The questions to answer, in order. */\n fields: z.array(CreationConsole_QuestionField_Schema),\n /** What an answer may do for THIS item — empty when the console cannot answer it. */\n actions: z.array(z.enum(CreationConsoleAnswerAction)),\n /*\n * Facts that change what answering MEANS, for the reader to weigh first. Carried as facts rather\n * than as a sentence: the words belong to whoever renders them (`display-text-comes-from-i18n.md`).\n */\n /** The family a suspended run was producing when it stopped to ask. */\n producingFamily: z.string().nullable(),\n /** The suspended run was a dry run: answering it writes nothing. NULL for other kinds. */\n dryRun: z.boolean().nullable(),\n /** FALSE when the parked coding run cannot re-enter its own session, so an answer starts a new one. NULL for other kinds. */\n resumable: z.boolean().nullable(),\n /** Every family an interview answer feeds — what goes stale when it changes. Empty for other kinds. */\n affectsFamilies: z.array(z.string()),\n /**\n * The signed-in person a clarification is ROUTED to (#1751) — whoever started its run from the workbench\n * or the conversation. Only they may answer it, and the console carries no person, so such an item has\n * no actions here: it is answered in the workbench, signed in as them. NULL when it is unrouted.\n */\n routedToUserId: z.string().nullable(),\n});\nexport type CreationConsole_Question = z.infer<typeof CreationConsole_Question_Schema>;\n\nexport const CreationConsole_QuestionQueue_Schema = z.object({\n /** When the queue was read, ISO-8601. */\n computedAt: z.string(),\n questions: z.array(CreationConsole_Question_Schema),\n});\nexport type CreationConsole_QuestionQueue = z.infer<typeof CreationConsole_QuestionQueue_Schema>;\n\n/**\n * One answer to one field. It carries its OWN author because a round is answered in one call while its\n * fields may be answered by different parties (#1658): an agent derives one from a declared fact, the\n * person decides the next. With one author per request, a mixed round either stamped the person's name\n * on the agent's derivation or was refused as incomplete — the agent answering alone could not cover the\n * judgement half, and the resume refuses a round answered in part.\n */\nexport const CreationConsole_Answer_Schema = z.object({\n ref: z.string().min(1),\n value: z.string().min(1),\n /** Who gave THIS answer; overrides the request's `answeredByRef` for this field. Same vocabulary. */\n answeredByRef: z.string().min(1).optional(),\n});\nexport type CreationConsole_Answer = z.infer<typeof CreationConsole_Answer_Schema>;\n\nexport const CreationConsole_AnswerRequest_Schema = z.object({\n questionId: z.string().min(1),\n /** The `revision` of the item as it was READ. Required for the kinds that carry one. */\n revision: z.string().min(1).nullable().optional(),\n action: z.enum(CreationConsoleAnswerAction),\n /**\n * One entry per answered field, by its `ref`. Required for `answer`, which must cover every field.\n * A clarification's `decline` may carry the fields the person DID answer and delegates only the rest\n * (#1658), so one round can mix what a person decided with what they left to the run.\n */\n answers: z.array(CreationConsole_Answer_Schema).optional(),\n /**\n * WHO answered — recorded for EVERY kind (#1658): on an interview answer in the dossier, on a\n * clarification in the committed `DECISIONS.md`, on a parked coding answer in `CODING-ANSWERS.md`.\n * The local-token plane proves only that the caller\n * is on this machine — the same trust as a git commit author, which is what accepts the answer\n * anyway (`one-source-of-truth.md` rule 7) — so `wildo` sends the workspace's git identity as\n * `git:<email>` unless told otherwise, and an agent answering on its own sends `agent:<name>`. The\n * prefix matters because the same dossier field holds the workbench's signed-in user ids: it says\n * which door an answer came through. Required for an interview answer (the dossier cannot record\n * one without it); optional for the others, which then record nothing rather than a guess.\n *\n * The DEFAULT author of every answer in the request: an answer carrying its own `answeredByRef` keeps\n * it. A parked coding question and an interview answer are one field each, so the two cannot differ.\n */\n answeredByRef: z.string().min(1).optional(),\n});\nexport type CreationConsole_AnswerRequest = z.infer<typeof CreationConsole_AnswerRequest_Schema>;\n\nexport const CreationConsole_AnswerOutcome_Schema = z.looseObject({\n questionId: z.string().min(1),\n kind: z.enum(CreationConsoleQuestionKind),\n action: z.enum(CreationConsoleAnswerAction),\n /** What the answering service returned — its own shape (a resumed run's outcome, a landed dossier file). */\n outcome: z.unknown(),\n});\nexport type CreationConsole_AnswerOutcome = z.infer<typeof CreationConsole_AnswerOutcome_Schema>;\n\n/**\n * One FEED line: a Home line (what happened, what is asked, what could come next) with the row it\n * points at attached, so a console reads a run's verdict or a dispatch's error without a second call.\n *\n * `at` is ISO-8601 here — this is a JSON contract, not a resource row.\n */\nexport const CreationConsole_FeedLine_Schema = z.object({\n lineId: z.string().min(1),\n section: z.enum(WorkbenchCreationHomeSection),\n kind: z.enum(WorkbenchCreationHomeLineKind),\n at: z.string().nullable(),\n playbookRef: z.string().nullable(),\n taskRef: z.string().nullable(),\n subject: z.string().nullable(),\n failed: z.boolean(),\n acceptable: z.boolean(),\n needsAnswers: z.boolean(),\n stuckReason: z.string().nullable(),\n targetResourceType: z.string().min(1),\n targetResourceId: z.string().min(1),\n /** The row the line points at, as the creation plane serves it. NULL when it has gone since. */\n target: z.record(z.string(), z.unknown()).nullable(),\n /** The queued question this line is about, when it is about exactly one — answer it by this id. */\n questionId: z.string().nullable(),\n});\nexport type CreationConsole_FeedLine = z.infer<typeof CreationConsole_FeedLine_Schema>;\n\nexport const CreationConsole_Feed_Schema = z.object({\n computedAt: z.string(),\n lines: z.array(CreationConsole_FeedLine_Schema),\n});\nexport type CreationConsole_Feed = z.infer<typeof CreationConsole_Feed_Schema>;\n\n/** The one identity rule, applied by the companion when it emits and when it resolves an answer. */\nexport function formatCreationConsoleQuestionId(kind: CreationConsoleQuestionKind, rowId: string): string {\n return `${kind}:${rowId}`;\n}\n\n/** The inverse of {@link formatCreationConsoleQuestionId}; `null` for anything that is not one. */\nexport function parseCreationConsoleQuestionId(questionId: string): { kind: CreationConsoleQuestionKind; rowId: string } | null {\n const separator = questionId.indexOf(':');\n if (separator <= 0 || separator === questionId.length - 1) return null;\n const kind = Object.values(CreationConsoleQuestionKind).find((candidate) => candidate === questionId.slice(0, separator));\n return kind ? { kind, rowId: questionId.slice(separator + 1) } : null;\n}\n\n/**\n * The workbench DEEP LINK (#1652): `?open=<resourceType>:<resourceId>` opens that creation-plane row\n * in the workbench's detail pane, the way clicking its Home line does. `wildo workbench open <ref>`\n * writes it; the workbench reads it once and drops it. One format, owned here, so the writer and the\n * reader cannot disagree about it.\n *\n * The FIRST `:` separates the two, because a resource type never contains one and a row id may.\n */\nexport const WORKBENCH_OPEN_DETAIL_QUERY_PARAM = 'open';\n\nexport function formatWorkbenchOpenDetailParam(resourceType: string, resourceId: string): string {\n return `${resourceType}:${resourceId}`;\n}\n\n/** The inverse of {@link formatWorkbenchOpenDetailParam}; `null` for anything that is not one. */\nexport function parseWorkbenchOpenDetailParam(value: string): { resourceType: string; resourceId: string } | null {\n const separator = value.indexOf(':');\n if (separator <= 0 || separator === value.length - 1) return null;\n return { resourceType: value.slice(0, separator), resourceId: value.slice(separator + 1) };\n}\n\n/**\n * The PULSE (#1657): a read cheap enough to poll every few seconds from a hook or a status line.\n *\n * Nothing in it is derived on request. `sequence` and `changedAt` move whenever the creation plane's\n * boards are invalidated (every mutation path ends there) or a watched board is republished;\n * `runsInFlight` is the process's own running-run count; `summary` is what the most recent FEED read\n * counted, with its instant — `null` until someone has read the feed, because computing it here would\n * make the pulse as slow as the feed. A poller compares pulses and reads the feed only when one moved.\n */\nexport const CreationConsole_PulseSummary_Schema = z.object({\n /** Lines in the ASKED section: questions waiting on the person. */\n asked: z.number().int().nonnegative(),\n /** Lines marked acceptable: finished work waiting to be committed. */\n acceptable: z.number().int().nonnegative(),\n /** SINCE lines that failed. */\n failed: z.number().int().nonnegative(),\n computedAt: z.string(),\n});\nexport type CreationConsole_PulseSummary = z.infer<typeof CreationConsole_PulseSummary_Schema>;\n\nexport const CreationConsole_Pulse_Schema = z.object({\n sequence: z.number().int().nonnegative(),\n changedAt: z.string().nullable(),\n runsInFlight: z.number().int().nonnegative(),\n summary: CreationConsole_PulseSummary_Schema.nullable(),\n});\nexport type CreationConsole_Pulse = z.infer<typeof CreationConsole_Pulse_Schema>;\n\n/** The pulse a feed's lines imply — one counting rule, used by the companion when it serves a feed. */\nexport function summarizeCreationConsoleFeed(feed: CreationConsole_Feed): CreationConsole_PulseSummary {\n return {\n asked: feed.lines.filter((line) => line.section === WorkbenchCreationHomeSection.ASKED).length,\n acceptable: feed.lines.filter((line) => line.acceptable).length,\n failed: feed.lines.filter((line) => line.section === WorkbenchCreationHomeSection.SINCE && line.failed).length,\n computedAt: feed.computedAt,\n };\n}\n\n/**\n * Where a running dev companion says it listens (#1657) — `<app>/.wildo-saas/state/companion-endpoint.json`.\n *\n * Written by the companion once its server is up, beside `companion.token`, because the one party that\n * KNOWS the address is the process listening on it. It exists for callers that must answer in\n * milliseconds — the console's per-prompt hook and its status line — which cannot afford the CLI's own\n * address resolution (it evaluates the authored infrastructure config). The record may outlive the\n * process; a caller treats a refused connection as \"not running\", never the file's presence.\n */\nexport const COMPANION_ENDPOINT_FILE_NAME = 'companion-endpoint.json';\n\nexport const CompanionEndpointRecord_Schema = z.object({\n origin: z.string().url(),\n pid: z.number().int().positive(),\n startedAt: z.string(),\n});\nexport type CompanionEndpointRecord = z.infer<typeof CompanionEndpointRecord_Schema>;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"workbench-creation-conversation.custom.shared.schemas.d.ts","sourceRoot":"","sources":["../../../../src/workbench/workbench-creation-conversation.custom.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,wCAAwC,0BAA0B,CAAC;AAEhF;;;;;GAKG;AACH,eAAO,MAAM,0CAA0C,sCAAsC,CAAC;AAE9F;;;;;GAKG;AACH,eAAO,MAAM,+CAA+C,8BAAoD,CAAC;AAEjH;;;;GAIG;AACH,eAAO,MAAM,0CAA0C,8CAAuE,CAAC;AAE/H;;;;;;;GAOG;AACH,oBAAY,sCAAsC;IAChD;;;OAGG;IACH,IAAI,SAAS;IACb,yFAAyF;IACzF,OAAO,YAAY;IACnB;;;;OAIG;IACH,MAAM,WAAW;IACjB,8EAA8E;IAC9E,QAAQ,aAAa;IACrB;;;;;;OAMG;IACH,SAAS,cAAc;IACvB;;;;OAIG;IACH,SAAS,cAAc;IACvB;;;;;;OAMG;IACH,KAAK,UAAU;CAChB;AAED;;;;;;;;;;;GAWG;AACH,oBAAY,iCAAiC;IAC3C,6GAA6G;IAC7G,sBAAsB,oCAAoC;IAC1D,yEAAyE;IACzE,aAAa,2BAA2B;IACxC,mFAAmF;IACnF,YAAY,0BAA0B;IACtC;;;OAGG;IACH,sBAAsB,oCAAoC;IAC1D;;;OAGG;IACH,mBAAmB,iCAAiC;IACpD,8FAA8F;IAC9F,UAAU,wBAAwB;IAClC;;;OAGG;IACH,oBAAoB,kCAAkC;IACtD;;;;OAIG;IACH,oBAAoB,kCAAkC;IACtD,gEAAgE;IAChE,mBAAmB,iCAAiC;IACpD,+FAA+F;IAC/F,QAAQ,sBAAsB;IAC9B,2EAA2E;IAC3E,YAAY,0BAA0B;IACtC,sFAAsF;IACtF,aAAa,2BAA2B;IACxC,gGAAgG;IAChG,kBAAkB,gCAAgC;IAClD,mEAAmE;IACnE,aAAa,2BAA2B;IACxC,kFAAkF;IAClF,aAAa,2BAA2B;IACxC,2EAA2E;IAC3E,WAAW,yBAAyB;CACrC;AAED;;;;;GAKG;AACH,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,+FAA+F;AAC/F,MAAM,MAAM,qCAAqC,GAAG;IAClD,QAAQ,EAAE,IAAI,IAAI,iCAAiC,GAAG,sCAAsC;CAC7F,CAAC;AAEF,wFAAwF;AACxF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,sCAAsC,GAAG,MAAM,CAE9G;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,qCAAqC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAQtH;AAED;;;;;GAKG;AACH,eAAO,MAAM,wCAAwC,gCAAgC,CAAC;AAEtF,qFAAqF;AACrF,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAE7F;AAED;;;GAGG;AACH,MAAM,MAAM,uCAAuC,GAAG;IACpD,QAAQ,EAAE,KAAK,IAAI,sCAAsC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7F,CAAC"}
1
+ {"version":3,"file":"workbench-creation-conversation.custom.shared.schemas.d.ts","sourceRoot":"","sources":["../../../src/workbench/workbench-creation-conversation.custom.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,wCAAwC,0BAA0B,CAAC;AAEhF;;;;;GAKG;AACH,eAAO,MAAM,0CAA0C,sCAAsC,CAAC;AAE9F;;;;;GAKG;AACH,eAAO,MAAM,+CAA+C,8BAAoD,CAAC;AAEjH;;;;GAIG;AACH,eAAO,MAAM,0CAA0C,8CAAuE,CAAC;AAE/H;;;;;;;GAOG;AACH,oBAAY,sCAAsC;IAChD;;;OAGG;IACH,IAAI,SAAS;IACb,yFAAyF;IACzF,OAAO,YAAY;IACnB;;;;OAIG;IACH,MAAM,WAAW;IACjB,8EAA8E;IAC9E,QAAQ,aAAa;IACrB;;;;;;OAMG;IACH,SAAS,cAAc;IACvB;;;;OAIG;IACH,SAAS,cAAc;IACvB;;;;;;OAMG;IACH,KAAK,UAAU;CAChB;AAED;;;;;;;;;;;GAWG;AACH,oBAAY,iCAAiC;IAC3C,6GAA6G;IAC7G,sBAAsB,oCAAoC;IAC1D,yEAAyE;IACzE,aAAa,2BAA2B;IACxC,mFAAmF;IACnF,YAAY,0BAA0B;IACtC;;;OAGG;IACH,sBAAsB,oCAAoC;IAC1D;;;OAGG;IACH,mBAAmB,iCAAiC;IACpD,8FAA8F;IAC9F,UAAU,wBAAwB;IAClC;;;OAGG;IACH,oBAAoB,kCAAkC;IACtD;;;;OAIG;IACH,oBAAoB,kCAAkC;IACtD,gEAAgE;IAChE,mBAAmB,iCAAiC;IACpD,+FAA+F;IAC/F,QAAQ,sBAAsB;IAC9B,2EAA2E;IAC3E,YAAY,0BAA0B;IACtC,sFAAsF;IACtF,aAAa,2BAA2B;IACxC,gGAAgG;IAChG,kBAAkB,gCAAgC;IAClD,mEAAmE;IACnE,aAAa,2BAA2B;IACxC,kFAAkF;IAClF,aAAa,2BAA2B;IACxC,2EAA2E;IAC3E,WAAW,yBAAyB;CACrC;AAED;;;;;GAKG;AACH,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,+FAA+F;AAC/F,MAAM,MAAM,qCAAqC,GAAG;IAClD,QAAQ,EAAE,IAAI,IAAI,iCAAiC,GAAG,sCAAsC;CAC7F,CAAC;AAEF,wFAAwF;AACxF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,sCAAsC,GAAG,MAAM,CAE9G;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,qCAAqC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAQtH;AAED;;;;;GAKG;AACH,eAAO,MAAM,wCAAwC,gCAAgC,CAAC;AAEtF,qFAAqF;AACrF,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAE7F;AAED;;;GAGG;AACH,MAAM,MAAM,uCAAuC,GAAG;IACpD,QAAQ,EAAE,KAAK,IAAI,sCAAsC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7F,CAAC"}