@wildo-ai/platform-core-shared 1.1.5 → 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 (88) 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 +2 -0
  8. package/dist/esm/index.d.ts.map +1 -1
  9. package/dist/esm/index.js +2 -0
  10. package/dist/esm/index.js.map +1 -1
  11. package/dist/esm/runtime/application-backend-env.contracts.d.ts +21 -2
  12. package/dist/esm/runtime/application-backend-env.contracts.d.ts.map +1 -1
  13. package/dist/esm/runtime/application-backend-env.contracts.js +21 -0
  14. package/dist/esm/runtime/application-backend-env.contracts.js.map +1 -1
  15. package/dist/esm/runtime/application-worker-env.contracts.d.ts.map +1 -1
  16. package/dist/esm/runtime/application-worker-env.contracts.js.map +1 -1
  17. package/dist/esm/runtime/http-server-env.contracts.d.ts +46 -0
  18. package/dist/esm/runtime/http-server-env.contracts.d.ts.map +1 -0
  19. package/dist/esm/runtime/http-server-env.contracts.js +55 -0
  20. package/dist/esm/runtime/http-server-env.contracts.js.map +1 -0
  21. package/dist/esm/runtime/runtime-topology.contracts.d.ts +0 -4
  22. package/dist/esm/runtime/runtime-topology.contracts.d.ts.map +1 -1
  23. package/dist/esm/runtime/runtime-topology.contracts.js +0 -12
  24. package/dist/esm/runtime/runtime-topology.contracts.js.map +1 -1
  25. package/dist/esm/security/authorizations/roles.custom.shared.definitions.d.ts.map +1 -1
  26. package/dist/esm/security/authorizations/roles.custom.shared.definitions.js.map +1 -1
  27. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.resources-config.schemas.d.ts +106 -4
  28. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.resources-config.schemas.d.ts.map +1 -1
  29. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.resources-config.schemas.js.map +1 -1
  30. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.schemas.d.ts +106 -4
  31. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.schemas.d.ts.map +1 -1
  32. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.schemas.js.map +1 -1
  33. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.resources-config.schemas.d.ts +15 -0
  34. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.resources-config.schemas.d.ts.map +1 -1
  35. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.resources-config.schemas.js.map +1 -1
  36. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.schemas.d.ts +15 -0
  37. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.schemas.d.ts.map +1 -1
  38. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.schemas.js.map +1 -1
  39. package/dist/esm/wildo-applications/wildo-applications.custom.shared.resources-config.schemas.d.ts.map +1 -1
  40. package/dist/esm/wildo-applications/wildo-applications.custom.shared.resources-config.schemas.js.map +1 -1
  41. package/dist/esm/wildo-applications/wildo-applications.custom.shared.schemas.d.ts +7 -5
  42. package/dist/esm/wildo-applications/wildo-applications.custom.shared.schemas.d.ts.map +1 -1
  43. package/dist/esm/wildo-applications/wildo-applications.custom.shared.schemas.js +7 -5
  44. package/dist/esm/wildo-applications/wildo-applications.custom.shared.schemas.js.map +1 -1
  45. package/dist/esm/wildo-applications-versions/wildo-applications-versions.custom.shared.resources-config.schemas.d.ts.map +1 -1
  46. package/dist/esm/wildo-applications-versions/wildo-applications-versions.custom.shared.resources-config.schemas.js.map +1 -1
  47. package/dist/esm/wildo-applications-versions/wildo-applications-versions.custom.shared.schemas.d.ts.map +1 -1
  48. package/dist/esm/wildo-applications-versions/wildo-applications-versions.custom.shared.schemas.js.map +1 -1
  49. package/dist/esm/workbench/workbench-aspect-resources.custom.shared.schemas.d.ts.map +1 -1
  50. package/dist/esm/workbench/workbench-aspect-resources.custom.shared.schemas.js +23 -0
  51. package/dist/esm/workbench/workbench-aspect-resources.custom.shared.schemas.js.map +1 -1
  52. package/dist/esm/workbench/workbench-creation-console.custom.shared.schemas.d.ts +279 -0
  53. package/dist/esm/workbench/workbench-creation-console.custom.shared.schemas.d.ts.map +1 -0
  54. package/dist/esm/workbench/workbench-creation-console.custom.shared.schemas.js +303 -0
  55. package/dist/esm/workbench/workbench-creation-console.custom.shared.schemas.js.map +1 -0
  56. package/dist/esm/workbench/workbench-creation-conversation.custom.shared.schemas.d.ts +97 -1
  57. package/dist/esm/workbench/workbench-creation-conversation.custom.shared.schemas.d.ts.map +1 -1
  58. package/dist/esm/workbench/workbench-creation-conversation.custom.shared.schemas.js +86 -0
  59. package/dist/esm/workbench/workbench-creation-conversation.custom.shared.schemas.js.map +1 -1
  60. package/dist/esm/workbench/workbench-creation-dossier.custom.shared.schemas.d.ts.map +1 -1
  61. package/dist/esm/workbench/workbench-creation-dossier.custom.shared.schemas.js.map +1 -1
  62. package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.d.ts +88 -5
  63. package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.d.ts.map +1 -1
  64. package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.js +89 -7
  65. package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.js.map +1 -1
  66. package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.d.ts +230 -13
  67. package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.d.ts.map +1 -1
  68. package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.js +377 -16
  69. package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.js.map +1 -1
  70. package/dist/esm/workbench/workbench-domain-model.custom.shared.schemas.d.ts.map +1 -1
  71. package/dist/esm/workbench/workbench-domain-model.custom.shared.schemas.js.map +1 -1
  72. package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.d.ts +6 -0
  73. package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.d.ts.map +1 -1
  74. package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.js +8 -0
  75. package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.js.map +1 -1
  76. package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.d.ts +45 -2
  77. package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.d.ts.map +1 -1
  78. package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.js +1 -1
  79. package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.js.map +1 -1
  80. package/dist/esm/workbench/workbench-resources.custom.shared.schemas.d.ts +16 -2
  81. package/dist/esm/workbench/workbench-resources.custom.shared.schemas.d.ts.map +1 -1
  82. package/dist/esm/workbench/workbench-resources.custom.shared.schemas.js +25 -2
  83. package/dist/esm/workbench/workbench-resources.custom.shared.schemas.js.map +1 -1
  84. package/dist/tsconfig.build.tsbuildinfo +1 -1
  85. package/package.json +4 -4
  86. package/dist/esm/workbench/workbench-creation-board.custom.shared.schemas.d.ts +0 -0
  87. package/dist/esm/workbench/workbench-creation-board.custom.shared.schemas.d.ts.map +0 -0
  88. package/dist/esm/workbench/workbench-creation-board.custom.shared.schemas.js.map +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"workbench-domain-model.custom.shared.schemas.d.ts","sourceRoot":"","sources":["../../../../src/workbench/workbench-domain-model.custom.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,+BAA+B,iBAAiB,CAAC;AAE9D;;;;;;;GAOG;AACH,eAAO,MAAM,sCAAsC,qBAA2C,CAAC;AAE/F;;;;;;;;;;;;GAYG"}
1
+ {"version":3,"file":"workbench-domain-model.custom.shared.schemas.d.ts","sourceRoot":"","sources":["../../../src/workbench/workbench-domain-model.custom.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,+BAA+B,iBAAiB,CAAC;AAE9D;;;;;;;GAOG;AACH,eAAO,MAAM,sCAAsC,qBAA2C,CAAC;AAE/F;;;;;;;;;;;;GAYG"}
@@ -1 +1 @@
1
- {"version":3,"file":"workbench-domain-model.custom.shared.schemas.js","sourceRoot":"","sources":["../../../../src/workbench/workbench-domain-model.custom.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,cAAc,CAAC;AAE9D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sCAAsC,GAAG,OAAO,+BAA+B,EAAE,CAAC;AAE/F;;;;;;;;;;;;GAYG","sourcesContent":["/**\n * The domain-model graph's identity, shared for the same reason its sibling board's is: THREE\n * packages must agree on it and none of them can see the others.\n *\n * - the workbench declares the composite view under {@link WORKBENCH_DOMAIN_MODEL_VIEW_REF} and\n * addresses it by that ref;\n * - the companion authors the labels the view resolves, keyed by exactly those refs;\n * - the engine's launcher resolution and router address the view by that same ref.\n *\n * Three string literals in three packages compile perfectly and fail at runtime as a blank sidebar\n * row and a headless section — `tCompositeView` and `tCompositeViewSection` answer the EMPTY STRING\n * for a missing key rather than echoing it, so nothing reports the drift.\n *\n * This carries NO React and NO Node: it is a vocabulary, which is what makes it importable by a\n * browser bundle and by a daemon at once.\n */\n\n/**\n * The view's `ref` — the composite-view key, the launcher target, and the `/composite/<ref>` route.\n *\n * It MUST NOT contain a dot, for the reason its sibling board's ref records: the label lookup path is\n * `composite_views.<translationRef>.<key>` and BOTH readers split that whole path on `.` and walk it\n * segment by segment, so a dotted ref nests its labels one level deeper than anything that reads them\n * expects — silently, because `tCompositeView` answers the empty string.\n */\nexport const WORKBENCH_DOMAIN_MODEL_VIEW_REF = 'domain-model';\n\n/**\n * The label key the view's title and description hang off.\n *\n * DERIVED by the engine's `buildApplicationViewTranslationRef` (`app.<ref>`), not chosen here. It is\n * restated because the companion cannot import a frontend package to compute it, and the workbench's\n * own test asserts this constant against the engine's derivation — so the copy cannot drift silently\n * from the function that produces it at runtime.\n */\nexport const WORKBENCH_DOMAIN_MODEL_TRANSLATION_REF = `app.${WORKBENCH_DOMAIN_MODEL_VIEW_REF}`;\n\n/**\n * The view declares NO sections, and that is a decision rather than an omission.\n *\n * `CompositeLayout` groups SEVERAL embedded surfaces under their own headings. This view has one\n * surface — a canvas with a rail beside it — so a section would be a second heading over the same\n * thing, and that is exactly what it was: `ViewLayout_Header` rendered \"Domain model\" from\n * `composite_views.app.domain-model.title` and the lone section rendered \"Domain model\" again\n * immediately beneath it, with two descriptions saying the same thing in different words.\n *\n * There is therefore no `WorkbenchDomainModelSection` enum, no section-refs list and no section-label\n * contract. If the view ever grows a second surface — a journey timeline beside the graph, say — that\n * is when sections earn their place, and they are added here as its sibling board's are.\n */\n"]}
1
+ {"version":3,"file":"workbench-domain-model.custom.shared.schemas.js","sourceRoot":"","sources":["../../../src/workbench/workbench-domain-model.custom.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,cAAc,CAAC;AAE9D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sCAAsC,GAAG,OAAO,+BAA+B,EAAE,CAAC;AAE/F;;;;;;;;;;;;GAYG","sourcesContent":["/**\n * The domain-model graph's identity, shared for the same reason its sibling board's is: THREE\n * packages must agree on it and none of them can see the others.\n *\n * - the workbench declares the composite view under {@link WORKBENCH_DOMAIN_MODEL_VIEW_REF} and\n * addresses it by that ref;\n * - the companion authors the labels the view resolves, keyed by exactly those refs;\n * - the engine's launcher resolution and router address the view by that same ref.\n *\n * Three string literals in three packages compile perfectly and fail at runtime as a blank sidebar\n * row and a headless section — `tCompositeView` and `tCompositeViewSection` answer the EMPTY STRING\n * for a missing key rather than echoing it, so nothing reports the drift.\n *\n * This carries NO React and NO Node: it is a vocabulary, which is what makes it importable by a\n * browser bundle and by a daemon at once.\n */\n\n/**\n * The view's `ref` — the composite-view key, the launcher target, and the `/composite/<ref>` route.\n *\n * It MUST NOT contain a dot, for the reason its sibling board's ref records: the label lookup path is\n * `composite_views.<translationRef>.<key>` and BOTH readers split that whole path on `.` and walk it\n * segment by segment, so a dotted ref nests its labels one level deeper than anything that reads them\n * expects — silently, because `tCompositeView` answers the empty string.\n */\nexport const WORKBENCH_DOMAIN_MODEL_VIEW_REF = 'domain-model';\n\n/**\n * The label key the view's title and description hang off.\n *\n * DERIVED by the engine's `buildApplicationViewTranslationRef` (`app.<ref>`), not chosen here. It is\n * restated because the companion cannot import a frontend package to compute it, and the workbench's\n * own test asserts this constant against the engine's derivation — so the copy cannot drift silently\n * from the function that produces it at runtime.\n */\nexport const WORKBENCH_DOMAIN_MODEL_TRANSLATION_REF = `app.${WORKBENCH_DOMAIN_MODEL_VIEW_REF}`;\n\n/**\n * The view declares NO sections, and that is a decision rather than an omission.\n *\n * `CompositeLayout` groups SEVERAL embedded surfaces under their own headings. This view has one\n * surface — a canvas with a rail beside it — so a section would be a second heading over the same\n * thing, and that is exactly what it was: `ViewLayout_Header` rendered \"Domain model\" from\n * `composite_views.app.domain-model.title` and the lone section rendered \"Domain model\" again\n * immediately beneath it, with two descriptions saying the same thing in different words.\n *\n * There is therefore no `WorkbenchDomainModelSection` enum, no section-refs list and no section-label\n * contract. If the view ever grows a second surface — a journey timeline beside the graph, say — that\n * is when sections earn their place, and they are added here as its sibling board's are.\n */\n"]}
@@ -166,6 +166,11 @@ export declare enum WorkbenchShared_ResourceType {
166
166
  * things waiting on a person is the last thing that should only exist inside a status blob.
167
167
  */
168
168
  PARKED_CODING_QUESTIONS = "workbenchParkedCodingQuestions",
169
+ /**
170
+ * The application's provider secrets, one row per (environment, secret) it declares a use for —
171
+ * names and standings, never values — with `set` and `unset` per row (#1637).
172
+ */
173
+ APPLICATION_SECRETS = "workbenchApplicationSecrets",
169
174
  /**
170
175
  * THE DOSSIER — one row per question a playbook interview asks, joined with the creator's answer
171
176
  * when there is one (#1454, Step 5).
@@ -240,6 +245,7 @@ export declare enum WorkbenchShared_ResourceType {
240
245
  ASPECT_INTEGRATION_WORKER = "workbenchIntegrationWorkers",
241
246
  ASPECT_INTEGRATION_MINION = "workbenchIntegrationMinions",
242
247
  ASPECT_INTEGRATION_PROVIDER_BINDING = "workbenchIntegrationProviderBindings",
248
+ ASPECT_INTEGRATION_INBOUND_CHANNEL = "workbenchIntegrationInboundChannels",
243
249
  ASPECT_REQUIREMENT_MATURITY = "workbenchRequirementMaturities",
244
250
  ASPECT_PLACEMENT_GROUP = "workbenchPlacementGroups",
245
251
  ASPECT_PLACEMENT_DECISION = "workbenchPlacementDecisions",
@@ -1 +1 @@
1
- {"version":3,"file":"workbench-resources-types.custom.shared.schemas.d.ts","sourceRoot":"","sources":["../../../../src/workbench/workbench-resources-types.custom.shared.schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workbench-resources-types.custom.shared.schemas.d.ts","sourceRoot":"","sources":["../../../src/workbench/workbench-resources-types.custom.shared.schemas.ts"],"names":[],"mappings":"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"}
@@ -194,6 +194,11 @@ export var WorkbenchShared_ResourceType;
194
194
  * things waiting on a person is the last thing that should only exist inside a status blob.
195
195
  */
196
196
  WorkbenchShared_ResourceType["PARKED_CODING_QUESTIONS"] = "workbenchParkedCodingQuestions";
197
+ /**
198
+ * The application's provider secrets, one row per (environment, secret) it declares a use for —
199
+ * names and standings, never values — with `set` and `unset` per row (#1637).
200
+ */
201
+ WorkbenchShared_ResourceType["APPLICATION_SECRETS"] = "workbenchApplicationSecrets";
197
202
  /**
198
203
  * THE DOSSIER — one row per question a playbook interview asks, joined with the creator's answer
199
204
  * when there is one (#1454, Step 5).
@@ -274,6 +279,7 @@ export var WorkbenchShared_ResourceType;
274
279
  WorkbenchShared_ResourceType["ASPECT_INTEGRATION_WORKER"] = "workbenchIntegrationWorkers";
275
280
  WorkbenchShared_ResourceType["ASPECT_INTEGRATION_MINION"] = "workbenchIntegrationMinions";
276
281
  WorkbenchShared_ResourceType["ASPECT_INTEGRATION_PROVIDER_BINDING"] = "workbenchIntegrationProviderBindings";
282
+ WorkbenchShared_ResourceType["ASPECT_INTEGRATION_INBOUND_CHANNEL"] = "workbenchIntegrationInboundChannels";
277
283
  WorkbenchShared_ResourceType["ASPECT_REQUIREMENT_MATURITY"] = "workbenchRequirementMaturities";
278
284
  WorkbenchShared_ResourceType["ASPECT_PLACEMENT_GROUP"] = "workbenchPlacementGroups";
279
285
  WorkbenchShared_ResourceType["ASPECT_PLACEMENT_DECISION"] = "workbenchPlacementDecisions";
@@ -360,6 +366,7 @@ export const WorkbenchShared_ResourceFieldIdentifier = {
360
366
  [WorkbenchShared_ResourceType.WAITING_PLAYBOOK_RUNS]: 'workbenchWaitingPlaybookRunId',
361
367
  [WorkbenchShared_ResourceType.CODING_LANE_STATUS]: 'workbenchCodingLaneStatusId',
362
368
  [WorkbenchShared_ResourceType.PARKED_CODING_QUESTIONS]: 'workbenchParkedCodingQuestionId',
369
+ [WorkbenchShared_ResourceType.APPLICATION_SECRETS]: 'workbenchApplicationSecretId',
363
370
  [WorkbenchShared_ResourceType.DOSSIER_ENTRIES]: 'workbenchDossierEntryId',
364
371
  [WorkbenchShared_ResourceType.HOME_LINES]: 'workbenchCreationHomeLineId',
365
372
  [WorkbenchShared_ResourceType.CREATION_OUTCOMES]: 'workbenchCreationOutcomeId',
@@ -418,6 +425,7 @@ export const WorkbenchShared_ResourceFieldIdentifier = {
418
425
  [WorkbenchShared_ResourceType.ASPECT_INTEGRATION_WORKER]: 'workbenchIntegrationWorkerId',
419
426
  [WorkbenchShared_ResourceType.ASPECT_INTEGRATION_MINION]: 'workbenchIntegrationMinionId',
420
427
  [WorkbenchShared_ResourceType.ASPECT_INTEGRATION_PROVIDER_BINDING]: 'workbenchIntegrationProviderBindingId',
428
+ [WorkbenchShared_ResourceType.ASPECT_INTEGRATION_INBOUND_CHANNEL]: 'workbenchIntegrationInboundChannelId',
421
429
  [WorkbenchShared_ResourceType.ASPECT_REQUIREMENT_MATURITY]: 'workbenchRequirementMaturityId',
422
430
  [WorkbenchShared_ResourceType.ASPECT_PLACEMENT_GROUP]: 'workbenchPlacementGroupId',
423
431
  [WorkbenchShared_ResourceType.ASPECT_PLACEMENT_DECISION]: 'workbenchPlacementDecisionId',
@@ -1 +1 @@
1
- {"version":3,"file":"workbench-resources-types.custom.shared.schemas.js","sourceRoot":"","sources":["../../../../src/workbench/workbench-resources-types.custom.shared.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The workbench's own resource vocabulary.\n *\n * A SEPARATE enum and factory map from `CustomShared_ResourceType`, deliberately. That map has six\n * consumers, two of which must not receive these: `platform-apps-manager` (which would register\n * resources it has no use for, and whose INIT lifecycle applies migrations) and the companion's i18n\n * labelling planner, which enumerates `Object.keys(...)` and would generate labels for them.\n *\n * These resources are INTROSPECTION-backed: nothing is stored, nothing is migrated, and only the\n * companion can serve them.\n */\nexport enum WorkbenchShared_ResourceType {\n /**\n * The application's domain model as ONE row per resource — module membership, specification prose\n * and the relationships that resource participates in, all in the same row.\n *\n * ## Why ONE resource rather than a module list beside an edge list\n *\n * It replaced exactly that, on 2026-08-31. `workbenchApplicationModules` and\n * `workbenchResourceRelationships` were projections of DIFFERENT companion behaviors on DIFFERENT\n * targets, so a graph drawn from both was drawn from two subprocess runs against a working tree an\n * operator is editing — its nodes could describe one state of the application and its edges the\n * next, with nothing able to detect it. The `application-domain-model` behavior answers all four\n * facts from a single import, which is the only shape in which \"resources, their relationships and\n * their module membership\" is internally consistent.\n *\n * The two were kept for a while on the argument that a flat module list and a flat edge list\n * answered two narrower questions this one did not. Both were then closed rather than argued: every\n * per-edge field the relationships table carried — `isDisabled`, `accessScopeStrategy`,\n * `parentResourceRequirement`, `primaryScope`, `allowCycle` — now rides in\n * `Workbench_DomainResourceRelationship`, and `isDisabled` in particular was a defect while it was\n * missing rather than a gap, because the graph drew a disabled edge exactly like a live one.\n *\n * One thing genuinely did NOT survive, and it is recorded here rather than in a commit message: a\n * module registering ZERO resources produces no row, so it has no node. Wonder CRM's `engine`\n * module is exactly that. The judgement was that a module contributing nothing to the DOMAIN has no\n * place in a domain model, and that engine-scaffolding modules are what\n * `workbenchSpecificationArtifacts` is for — not that the case was overlooked.\n */\n DOMAIN_RESOURCES = 'workbenchDomainResources',\n /**\n * Every application-specification family the journey produces that is NOT the application's own\n * structure — the vision, the market, the requirements, the roadmap, the obligations — as one row\n * each, carrying the artifact rendered for a human to read.\n *\n * ## Why the PRODUCT half needed its own resource\n *\n * The three siblings above all project the application's STRUCTURE: modules, edges, resources.\n * None of them can carry a vision brief, because a vision brief is not a resource, an edge or a\n * module — it is a prose document about the product the application is meant to be. Those\n * documents were reachable only by opening a TypeScript file in an editor, which is not a product\n * (issue #162).\n *\n * ## Why one resource rather than one per family\n *\n * The families are heterogeneous, and the two failure modes are symmetric: one destination per\n * family risks a dozen half-built pages, one destination navigating all of them risks a\n * lowest-common-denominator renderer. The answer taken is one destination whose rows are DERIVED\n * from `APPLICATION_SPECIFICATION_SEMANTIC_SCHEMA_BINDINGS` — so the population cannot drift from\n * the authority — grouped by the question each family answers, with an outline renderer as the\n * floor and the artifacts already committed beside a family (`DIAGRAM.md`, `DECISIONS.md`)\n * surfaced verbatim on top of it. The decision and its rejected alternatives are recorded on\n * issue #162.\n */\n SPECIFICATION_ARTIFACTS = 'workbenchSpecificationArtifacts',\n\n /*\n * ── FAMILY ASPECT RESOURCES ──────────────────────────────────────────────────────────────────\n *\n * One resource per SECOND-LEVEL aspect of a specification family (the vision's success\n * criteria, the market's ICPs, the roadmap's phases, …), so the product graph the snapshots\n * flatten becomes navigable. Their canonical declaration — item schemas, business keys, edges —\n * is `FAMILY_ASPECTS_REGISTRY` in `@wildo-ai/saas-specifications` (`_core/family-aspects.*`):\n * this enum and the descriptor table beside it are the SPINE's schema-agnostic transcription,\n * held to the registry by a companion-side parity test (the spine deliberately never imports\n * saas-specifications).\n *\n * Same nature as their two siblings above: INTROSPECTION-backed, derived per read from the\n * landed files, READ/LIST only. Their READ pages are NOT addressable — references open them as\n * POPUPS (decided 2026-09-01); the artifacts resource stays the primary surface.\n */\n /*\n * ── The CREATION PLANE (added 2026-09-01, `workbench-creation-board-resources.md` Phase 2) ──\n *\n * The four families below are NOT projections of the application's source: they are the\n * COMPANION'S OWN RUNTIME projections for the one application it serves — the playbook\n * eligibility board, the build-plan dispatch view, the run write-register and the execution\n * traces. They ride the same INTROSPECTION adapter through the same port, but their behaviors\n * materialize IN-PROCESS (no subprocess, no app-dist import), their binding declares the\n * `APPLICATION_RUNTIME` tenancy stance, and their read variants are AUTHENTICATED (`APP_USER`) —\n * the structural projections' `APP_PUBLIC` argument (\"anyone with the working tree can already\n * read this\") does not extend to runtime state.\n */\n /**\n * One row per compiled playbook, carrying its ELIGIBILITY VERDICT — can it run right now, and if\n * not, why not — plus the overwrite/stale annotations a creator weighs before dispatching.\n *\n * The rows are a projection of `listPlaybookEligibility()`, the ~10s recompute the creation\n * board's Playbooks pane renders; the companion serves them through a `{board, computedAt}` cache\n * so resource-surface consumers (RMM, lists) do not multiply the recompute. `computedAt` and the\n * derived journey `phase` are projected onto every row — board-level scalars become row fields,\n * because a resource row must be complete on its own.\n */\n PLAYBOOKS = 'workbenchPlaybooks',\n /**\n * One row per build-plan task, in the DISPATCH view: its status (`ready` / `landed` / `blocked`),\n * objective and target kind.\n *\n * DELIBERATELY THIN beside `ASPECT_BUILD_TASK` (`workbenchBuildTasks`), which projects the SAME\n * authored population from the specification artifact with its traceability edges. The two answer\n * different questions — the aspect answers \"what did the journey author\" (subprocess, from the\n * artifact), this one answers \"what can the dispatcher run next and what has landed\" (in-process,\n * computed against git by the dispatch service). Authored detail (skillRefs, serves edges) stays\n * on the aspect row sharing the same `taskRef`; duplicating it here would be a second enumeration\n * of the authored shape, one drift away from lying.\n */\n BUILD_PLAN_TASKS = 'workbenchBuildPlanTasks',\n /**\n * One row per playbook run's WRITE RECORD — which files it wrote, with `existedBefore` per file —\n * the evidence lane that makes every dispatch on the creation board revertable. Pre-image BYTES\n * are deliberately not projected (they belong to the revert mechanism, not to a list row).\n */\n RUN_WRITE_RECORDS = 'workbenchRunWriteRecords',\n /**\n * One row per execution-trace session — the session id, when it started, and how many events and\n * steps it recorded. The detail (events, artifacts) stays on the companion's trace routes for\n * now; this resource is the queryable index the board links from.\n */\n TRACE_SESSIONS = 'workbenchTraceSessions',\n /**\n * The governance questions a creator still owes an answer to, one row per question.\n *\n * A RESOURCE rather than a companion read, which is the distinction the client's own doctrine\n * draws and which this row is on the right side of: a questionnaire prompt has a stable identity\n * (`definitionRef` + `questionRef`), so it lists, it reads, and it can be referenced. What stays a\n * companion read is the shapes that genuinely have no row identity — the runs-in-flight board, the\n * coding-agent status, the mutation lock.\n */\n /**\n * The GOVERNED DOCUMENTS whose questionnaires a person must answer — one row per document.\n *\n * The document half of governance: what the generator derives for it, and how much is left for a\n * person. Distinct from the questions below, which are its children — a document-level fact\n * carried on every question row would be a value with no owner.\n */\n GOVERNANCE_DOCUMENTS = 'workbenchGovernanceDocuments',\n GOVERNANCE_QUESTIONS = 'workbenchGovernanceQuestions',\n /**\n * What the build lane has DISPATCHED, one row per attempt — the coding lane's own history.\n *\n * A resource for the same reason as the questions above: a dispatch is identified by the task it\n * ran (`taskRef`) and it persists, so it lists and it reads. What stays a companion read is the\n * NEXT-task selection beside it, which is a singleton answer rather than a collection.\n */\n /**\n * The NEXT build task a dispatch would run, with the guard rails it would carry — at most one row.\n *\n * The SELECTION, distinct from `BUILD_PLAN_TASKS`, which is every task and its status. Two\n * resources because they answer different questions, and the task list must not change because a\n * selection did.\n */\n BUILD_DISPATCH_PLAN = 'workbenchBuildDispatchPlan',\n BUILD_DISPATCHES = 'workbenchBuildDispatches',\n /**\n * Every playbook run this companion knows about, one row per run, carrying the STATE it is in.\n *\n * It replaced a companion read answering four separate collections — running, running-detached,\n * interrupted, last-completed — which a board had to know the meaning of before it could render\n * anything. They are one thing in four states; `Workbench_PlaybookRunState` names them.\n */\n PLAYBOOK_RUNS = 'workbenchPlaybookRuns',\n /**\n * The playbook runs SUSPENDED waiting on a person, one row per run.\n *\n * Distinct from the runs above, and deliberately its own resource: a suspended run carries the\n * QUESTIONS it is waiting on, it is read from the checkpoint DIRECTORY so it survives the companion\n * restarts an engine rebuild causes several times a day, and the operator's action on it is to\n * answer rather than to watch.\n */\n WAITING_PLAYBOOK_RUNS = 'workbenchWaitingPlaybookRuns',\n /**\n * The coding lane's own posture — ONE row: is an agent registered, is a run in flight, what are\n * the dispatch ceilings, and where is the workspace mutation lock.\n *\n * A singleton, deliberately. It used to be a companion read that ALSO carried the parked-question\n * queue, which is a different thing and is its own resource below.\n */\n CODING_LANE_STATUS = 'workbenchCodingLaneStatus',\n /**\n * The coding runs PARKED on a question, one row per parked task.\n *\n * It arrives today inside the coding-agent STATUS payload — a singleton that legitimately stays a\n * read — but the parked questions inside it are a collection keyed by `taskId`, and a queue of\n * things waiting on a person is the last thing that should only exist inside a status blob.\n */\n PARKED_CODING_QUESTIONS = 'workbenchParkedCodingQuestions',\n /**\n * THE DOSSIER — one row per question a playbook interview asks, joined with the creator's answer\n * when there is one (#1454, Step 5).\n *\n * The answers live in the committed `creator-inputs` family; the questions live in the compiled\n * playbook catalog. Neither alone is what a person reads (\"what did I say, what am I still asked\"),\n * so the row is the JOIN, derived in-process by the companion, and the family deliberately has no\n * aspect resource of its own (see its aspects declaration). Writable through ONE verb, `answer`,\n * which is also the assistant's `record_answer` tool — one door, the resource operation.\n */\n DOSSIER_ENTRIES = 'workbenchDossierEntries',\n /**\n * HOME's LINES (#1454): what happened since the creator was here, what is asked of them now, what\n * they could do next — one row per line, derived by the companion from the rows above, so the\n * page renders and the assistant reads the same facts. Filtered by `section`.\n */\n HOME_LINES = 'workbenchCreationHomeLines',\n /** The four creation OUTCOMES with their standing — always four rows, in reading order. */\n CREATION_OUTCOMES = 'workbenchCreationOutcomes',\n ASPECT_VISION_IDEA = 'workbenchVisionIdeas',\n ASPECT_VISION_PROBLEM = 'workbenchVisionProblems',\n ASPECT_VISION_MISSION = 'workbenchVisionMissions',\n ASPECT_VISION_SUCCESS_CRITERION = 'workbenchVisionSuccessCriteria',\n ASPECT_VISION_CONSTRAINT = 'workbenchVisionConstraints',\n ASPECT_MARKET_CATEGORY = 'workbenchMarketCategories',\n ASPECT_MARKET_ICP = 'workbenchMarketIcps',\n ASPECT_MARKET_PERSONA = 'workbenchMarketPersonas',\n ASPECT_MARKET_JOB = 'workbenchMarketJobs',\n ASPECT_MARKET_PAIN = 'workbenchMarketPains',\n ASPECT_MARKET_GAIN = 'workbenchMarketGains',\n ASPECT_MARKET_TONE_OF_VOICE = 'workbenchMarketTonesOfVoice',\n ASPECT_MARKET_BENEFIT = 'workbenchMarketBenefits',\n ASPECT_MARKET_POSITIONING = 'workbenchMarketPositionings',\n ASPECT_MARKET_CHANNEL = 'workbenchMarketChannels',\n ASPECT_MARKET_ALTERNATIVE = 'workbenchMarketAlternatives',\n ASPECT_MARKET_TRIGGER = 'workbenchMarketTriggers',\n ASPECT_MARKET_BUYING_JOURNEY = 'workbenchMarketBuyingJourneys',\n ASPECT_MARKET_PROOF = 'workbenchMarketProofs',\n ASPECT_MARKET_OBJECTION = 'workbenchMarketObjections',\n ASPECT_MARKET_MESSAGE_TEMPLATE = 'workbenchMarketMessageTemplates',\n ASPECT_REQUIREMENT_FUNCTIONAL = 'workbenchFunctionalRequirements',\n ASPECT_REQUIREMENT_NON_FUNCTIONAL = 'workbenchNonFunctionalRequirements',\n ASPECT_FEATURE_DRAFT = 'workbenchFeatureDrafts',\n ASPECT_ROADMAP_PHASE = 'workbenchRoadmapPhases',\n ASPECT_PRICING_PLAN = 'workbenchPricingPlans',\n ASPECT_BRAND_NAME = 'workbenchBrandNames',\n ASPECT_BRAND_LOGO_DIRECTION = 'workbenchBrandLogoDirections',\n ASPECT_BRAND_VISUAL_TONE = 'workbenchBrandVisualTones',\n ASPECT_BRAND_AUDIENCE = 'workbenchBrandAudiences',\n ASPECT_BRAND_ASSET = 'workbenchBrandAssets',\n ASPECT_DOMAIN_PLAN_MODULE = 'workbenchDomainPlanModules',\n /*\n * The COMPLIANCE PROGRAMME's ten aspects (#1431, surfaced #1512). The largest family in the\n * catalog and the one whose elements every assurance consumer addresses — an obligation, the\n * decision that made it applicable, who is responsible, and what is missing. Until these rows\n * existed the graph could declare those links and not follow one of them.\n */\n ASPECT_COMPLIANCE_SCOPE_SELECTOR = 'workbenchComplianceScopeSelectors',\n ASPECT_COMPLIANCE_APPLICABILITY_DECISION = 'workbenchComplianceApplicabilityDecisions',\n ASPECT_COMPLIANCE_OBLIGATION = 'workbenchComplianceObligations',\n ASPECT_COMPLIANCE_COVERAGE_DECISION = 'workbenchComplianceCoverageDecisions',\n ASPECT_COMPLIANCE_IMPLEMENTATION_DECISION = 'workbenchComplianceImplementationDecisions',\n ASPECT_COMPLIANCE_RESPONSIBILITY_ASSIGNMENT = 'workbenchComplianceResponsibilityAssignments',\n ASPECT_COMPLIANCE_GAP = 'workbenchComplianceGaps',\n ASPECT_COMPLIANCE_DOCUMENTATION_REQUIREMENT = 'workbenchComplianceDocumentationRequirements',\n ASPECT_COMPLIANCE_ROLE_AUTHORITY = 'workbenchComplianceRoleAuthorities',\n ASPECT_COMPLIANCE_SHARED_RESPONSIBILITY_RULE = 'workbenchComplianceSharedResponsibilityRules',\n ASPECT_DOMAIN_PLAN_RESOURCE = 'workbenchDomainPlanResources',\n ASPECT_DOMAIN_PLAN_RELATIONSHIP = 'workbenchDomainPlanRelationships',\n ASPECT_BUILD_TASK = 'workbenchBuildTasks',\n ASPECT_CAPABILITY_COMPOSITION_DECISION = 'workbenchCompositionDecisions',\n ASPECT_WEBSITE_PAGE = 'workbenchWebsitePages',\n ASPECT_DOCUMENTATION_CHAPTER = 'workbenchDocumentationChapters',\n ASPECT_EXPERIENCE_VIEW = 'workbenchExperienceViews',\n ASPECT_EXPERIENCE_CONFIGURATION = 'workbenchExperienceConfigurations',\n ASPECT_EXPERIENCE_MILESTONE = 'workbenchExperienceMilestones',\n ASPECT_EXPERIENCE_GUIDANCE = 'workbenchExperienceGuidance',\n ASPECT_INTEGRATION_WORKER = 'workbenchIntegrationWorkers',\n ASPECT_INTEGRATION_MINION = 'workbenchIntegrationMinions',\n ASPECT_INTEGRATION_PROVIDER_BINDING = 'workbenchIntegrationProviderBindings',\n ASPECT_REQUIREMENT_MATURITY = 'workbenchRequirementMaturities',\n ASPECT_PLACEMENT_GROUP = 'workbenchPlacementGroups',\n ASPECT_PLACEMENT_DECISION = 'workbenchPlacementDecisions',\n ASPECT_COMPLIANCE_CANDIDATE_SECTION = 'workbenchComplianceCandidateSections',\n ASPECT_COMPLIANCE_CANDIDATE_VARIANT_SELECTION = 'workbenchComplianceCandidateVariantSelections',\n ASPECT_DOCUMENT_FACT_DECLARATION = 'workbenchDocumentFactDeclarations',\n ASPECT_AUTHORED_DOCUMENT_FACT_DECLARATION = 'workbenchAuthoredDocumentFactDeclarations',\n ASPECT_PROCESSOR_REGISTER_ENTRY = 'workbenchProcessorRegisterEntries',\n ASPECT_RISK_REGISTER_ENTRY = 'workbenchRiskRegisterEntries',\n ASPECT_RELEASE_POLICY_SELECTION = 'workbenchReleasePolicySelections',\n ASPECT_DOCUMENT_PUBLICATION_VARIANT = 'workbenchDocumentPublicationVariants',\n /** The governed-document candidate SET's candidates — the landed shape of a drafting run (#1105). */\n ASPECT_COMPLIANCE_CANDIDATE = 'workbenchComplianceCandidates',\n /** One SECTION of a landed candidate, addressed `<documentRef>/<sectionRef>` (#1465). */\n ASPECT_COMPLIANCE_CANDIDATE_SET_SECTION = 'workbenchComplianceCandidateSetSections',\n /** The document release SET's releases — a composed release of a governed document (#1105). */\n ASPECT_DOCUMENT_RELEASE = 'workbenchDocumentReleases',\n}\n\n/**\n * The field each resource is ADDRESSED BY — and it must be a field the rows actually carry.\n *\n * ## The rule, and the defect that produced it\n *\n * A convention-shaped name declared here that no row carries makes every consumer addressing a row\n * THROUGH this map look for a field that does not exist. The resource this was measured on\n * (`workbenchApplicationModules`, removed 2026-08-31) declared `workbenchApplicationModuleId` while\n * its schema, its behavior and its `identityFields` all said `moduleId`.\n *\n * READ still worked, which is what kept it hidden: the adapter filters by `identityFields`, so the\n * addressed route answered 200 while the frontend list refused every row click with \"could not\n * resolve resource id from list item\" — the id it was told to read was absent from the item. A green\n * addressed READ is therefore NOT evidence that this map is right; the list row click is.\n *\n * So an entry here is either the source's OWN key, or a name COMPOSED by `identityFields` and\n * declared as a real field of the schema. Never a name that merely follows the convention.\n */\nexport const WorkbenchShared_ResourceFieldIdentifier: { [key in WorkbenchShared_ResourceType]: string } = {\n /*\n * COMPOSED from `resourceType`, following the relationships sibling rather than the modules one.\n *\n * The behavior's rows do carry `resourceType`, so the source's own key could have been used\n * directly — as `moduleId` is. It is composed instead because `resourceType` is a name the FIELD\n * IDENTIFIER MAP would then publish globally: that map is merged with the engine's and consumed by\n * `buildFieldIdentifierToResourceTypeMap`, which resolves a foreign-key field NAME to the resource\n * it points at. A generic identifier there is a name any application could collide with, on a map\n * whose whole job is that names are unambiguous.\n */\n [WorkbenchShared_ResourceType.DOMAIN_RESOURCES]: 'workbenchDomainResourceId',\n /*\n * The FAMILY id, which is the source's own key — the `moduleId` case rather than the composed one.\n *\n * A family id (`vision-brief`, `compliance-program`) is unique by construction: the semantic\n * authority is a map keyed by it. And unlike `resourceType`, it is not a name any application's\n * foreign-key field could collide with on the global field-identifier map, so there is nothing for\n * a composed name to protect against here.\n */\n [WorkbenchShared_ResourceType.SPECIFICATION_ARTIFACTS]: 'family',\n /*\n * Aspect identifiers are all COMPOSED (`workbenchMarketIcpId`), for the same reason as\n * DOMAIN_RESOURCES: the raw business-key field is `ref` on most aspects — a name applications\n * collide with constantly — and this map publishes globally. The projection emits the composed\n * field on every row (value = the business key, the aspect key for singletons, or the indexed\n * fallback), so the \"a name the rows actually carry\" rule above holds.\n */\n /*\n * The creation-plane identifiers are all COMPOSED (`workbenchPlaybookId` from `playbookRef`, …):\n * the raw business keys (`playbookRef`, `taskRef`, `runId`, `sessionId`) are names an\n * application's own foreign-key fields could collide with on the global field-identifier map,\n * which is the same reason DOMAIN_RESOURCES composes. Unlike DOMAIN_RESOURCES the field is\n * EMITTED BY THE BEHAVIOR rather than composed by `identityFields` — composition refuses any\n * value outside `[a-zA-Z0-9_-]`, and playbook refs (`top_down.phase-gate`) and trace session ids\n * legitimately carry dots — so the projection service sanitizes and duplicate-checks. The \"a name\n * the rows actually carry\" rule holds either way.\n */\n [WorkbenchShared_ResourceType.PLAYBOOKS]: 'workbenchPlaybookId',\n [WorkbenchShared_ResourceType.BUILD_PLAN_TASKS]: 'workbenchBuildPlanTaskId',\n [WorkbenchShared_ResourceType.RUN_WRITE_RECORDS]: 'workbenchRunWriteRecordId',\n [WorkbenchShared_ResourceType.TRACE_SESSIONS]: 'workbenchTraceSessionId',\n [WorkbenchShared_ResourceType.GOVERNANCE_DOCUMENTS]: 'workbenchGovernanceDocumentId',\n [WorkbenchShared_ResourceType.GOVERNANCE_QUESTIONS]: 'workbenchGovernanceQuestionId',\n [WorkbenchShared_ResourceType.BUILD_DISPATCH_PLAN]: 'workbenchBuildDispatchPlanId',\n [WorkbenchShared_ResourceType.BUILD_DISPATCHES]: 'workbenchBuildDispatchId',\n [WorkbenchShared_ResourceType.PLAYBOOK_RUNS]: 'workbenchPlaybookRunId',\n [WorkbenchShared_ResourceType.WAITING_PLAYBOOK_RUNS]: 'workbenchWaitingPlaybookRunId',\n [WorkbenchShared_ResourceType.CODING_LANE_STATUS]: 'workbenchCodingLaneStatusId',\n [WorkbenchShared_ResourceType.PARKED_CODING_QUESTIONS]: 'workbenchParkedCodingQuestionId',\n [WorkbenchShared_ResourceType.DOSSIER_ENTRIES]: 'workbenchDossierEntryId',\n [WorkbenchShared_ResourceType.HOME_LINES]: 'workbenchCreationHomeLineId',\n [WorkbenchShared_ResourceType.CREATION_OUTCOMES]: 'workbenchCreationOutcomeId',\n [WorkbenchShared_ResourceType.ASPECT_VISION_IDEA]: 'workbenchVisionIdeaId',\n [WorkbenchShared_ResourceType.ASPECT_VISION_PROBLEM]: 'workbenchVisionProblemId',\n [WorkbenchShared_ResourceType.ASPECT_VISION_MISSION]: 'workbenchVisionMissionId',\n [WorkbenchShared_ResourceType.ASPECT_VISION_SUCCESS_CRITERION]: 'workbenchVisionSuccessCriterionId',\n [WorkbenchShared_ResourceType.ASPECT_VISION_CONSTRAINT]: 'workbenchVisionConstraintId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_CATEGORY]: 'workbenchMarketCategoryId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_ICP]: 'workbenchMarketIcpId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_PERSONA]: 'workbenchMarketPersonaId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_JOB]: 'workbenchMarketJobId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_PAIN]: 'workbenchMarketPainId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_GAIN]: 'workbenchMarketGainId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_TONE_OF_VOICE]: 'workbenchMarketToneOfVoiceId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_BENEFIT]: 'workbenchMarketBenefitId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_POSITIONING]: 'workbenchMarketPositioningId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_CHANNEL]: 'workbenchMarketChannelId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_ALTERNATIVE]: 'workbenchMarketAlternativeId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_TRIGGER]: 'workbenchMarketTriggerId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_BUYING_JOURNEY]: 'workbenchMarketBuyingJourneyId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_PROOF]: 'workbenchMarketProofId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_OBJECTION]: 'workbenchMarketObjectionId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_MESSAGE_TEMPLATE]: 'workbenchMarketMessageTemplateId',\n [WorkbenchShared_ResourceType.ASPECT_REQUIREMENT_FUNCTIONAL]: 'workbenchFunctionalRequirementId',\n [WorkbenchShared_ResourceType.ASPECT_REQUIREMENT_NON_FUNCTIONAL]: 'workbenchNonFunctionalRequirementId',\n [WorkbenchShared_ResourceType.ASPECT_FEATURE_DRAFT]: 'workbenchFeatureDraftId',\n [WorkbenchShared_ResourceType.ASPECT_ROADMAP_PHASE]: 'workbenchRoadmapPhaseId',\n [WorkbenchShared_ResourceType.ASPECT_PRICING_PLAN]: 'workbenchPricingPlanId',\n [WorkbenchShared_ResourceType.ASPECT_BRAND_NAME]: 'workbenchBrandNameId',\n [WorkbenchShared_ResourceType.ASPECT_BRAND_LOGO_DIRECTION]: 'workbenchBrandLogoDirectionId',\n [WorkbenchShared_ResourceType.ASPECT_BRAND_VISUAL_TONE]: 'workbenchBrandVisualToneId',\n [WorkbenchShared_ResourceType.ASPECT_BRAND_AUDIENCE]: 'workbenchBrandAudienceId',\n [WorkbenchShared_ResourceType.ASPECT_BRAND_ASSET]: 'workbenchBrandAssetId',\n [WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_MODULE]: 'workbenchDomainPlanModuleId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_SCOPE_SELECTOR]: 'workbenchComplianceScopeSelectorId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_APPLICABILITY_DECISION]: 'workbenchComplianceApplicabilityDecisionId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_OBLIGATION]: 'workbenchComplianceObligationId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_COVERAGE_DECISION]: 'workbenchComplianceCoverageDecisionId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_IMPLEMENTATION_DECISION]: 'workbenchComplianceImplementationDecisionId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_RESPONSIBILITY_ASSIGNMENT]: 'workbenchComplianceResponsibilityAssignmentId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_GAP]: 'workbenchComplianceGapId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_DOCUMENTATION_REQUIREMENT]: 'workbenchComplianceDocumentationRequirementId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_ROLE_AUTHORITY]: 'workbenchComplianceRoleAuthorityId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_SHARED_RESPONSIBILITY_RULE]: 'workbenchComplianceSharedResponsibilityRuleId',\n [WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_RESOURCE]: 'workbenchDomainPlanResourceId',\n [WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_RELATIONSHIP]: 'workbenchDomainPlanRelationshipId',\n [WorkbenchShared_ResourceType.ASPECT_BUILD_TASK]: 'workbenchBuildTaskId',\n [WorkbenchShared_ResourceType.ASPECT_CAPABILITY_COMPOSITION_DECISION]: 'workbenchCompositionDecisionId',\n [WorkbenchShared_ResourceType.ASPECT_WEBSITE_PAGE]: 'workbenchWebsitePageId',\n [WorkbenchShared_ResourceType.ASPECT_DOCUMENTATION_CHAPTER]: 'workbenchDocumentationChapterId',\n [WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_VIEW]: 'workbenchExperienceViewId',\n [WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_CONFIGURATION]: 'workbenchExperienceConfigurationId',\n [WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_MILESTONE]: 'workbenchExperienceMilestoneId',\n [WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_GUIDANCE]: 'workbenchExperienceGuidanceId',\n [WorkbenchShared_ResourceType.ASPECT_INTEGRATION_WORKER]: 'workbenchIntegrationWorkerId',\n [WorkbenchShared_ResourceType.ASPECT_INTEGRATION_MINION]: 'workbenchIntegrationMinionId',\n [WorkbenchShared_ResourceType.ASPECT_INTEGRATION_PROVIDER_BINDING]: 'workbenchIntegrationProviderBindingId',\n [WorkbenchShared_ResourceType.ASPECT_REQUIREMENT_MATURITY]: 'workbenchRequirementMaturityId',\n [WorkbenchShared_ResourceType.ASPECT_PLACEMENT_GROUP]: 'workbenchPlacementGroupId',\n [WorkbenchShared_ResourceType.ASPECT_PLACEMENT_DECISION]: 'workbenchPlacementDecisionId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE_SECTION]: 'workbenchComplianceCandidateSectionId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE_VARIANT_SELECTION]: 'workbenchComplianceCandidateVariantSelectionId',\n [WorkbenchShared_ResourceType.ASPECT_DOCUMENT_FACT_DECLARATION]: 'workbenchDocumentFactDeclarationId',\n [WorkbenchShared_ResourceType.ASPECT_AUTHORED_DOCUMENT_FACT_DECLARATION]: 'workbenchAuthoredDocumentFactDeclarationId',\n [WorkbenchShared_ResourceType.ASPECT_PROCESSOR_REGISTER_ENTRY]: 'workbenchProcessorRegisterEntryId',\n [WorkbenchShared_ResourceType.ASPECT_RISK_REGISTER_ENTRY]: 'workbenchRiskRegisterEntryId',\n [WorkbenchShared_ResourceType.ASPECT_RELEASE_POLICY_SELECTION]: 'workbenchReleasePolicySelectionId',\n [WorkbenchShared_ResourceType.ASPECT_DOCUMENT_PUBLICATION_VARIANT]: 'workbenchDocumentPublicationVariantId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE]: 'workbenchComplianceCandidateId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE_SET_SECTION]: 'workbenchComplianceCandidateSetSectionId',\n [WorkbenchShared_ResourceType.ASPECT_DOCUMENT_RELEASE]: 'workbenchDocumentReleaseId',\n};\n\n/**\n * The frontend-service name the application-creation workbench identifies itself by.\n *\n * Shared because BOTH sides must agree and neither owns it alone: the workbench sends it as\n * `VITE_FRONTEND_SERVICE_NAME` on every `/application-config` and `/i18n/labels` request, and the\n * companion seeds an entry under exactly this key so the engine's `ApplicationConfigController` can\n * answer instead of refusing with `app_configuration_unknown_frontend_service`.\n *\n * Two string literals in two packages would compile perfectly and fail at runtime with an error that\n * names neither of them.\n */\nexport const WORKBENCH_FRONTEND_SERVICE_NAME = 'application-creation-workbench';\n"]}
1
+ {"version":3,"file":"workbench-resources-types.custom.shared.schemas.js","sourceRoot":"","sources":["../../../src/workbench/workbench-resources-types.custom.shared.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The workbench's own resource vocabulary.\n *\n * A SEPARATE enum and factory map from `CustomShared_ResourceType`, deliberately. That map has six\n * consumers, two of which must not receive these: `platform-apps-manager` (which would register\n * resources it has no use for, and whose INIT lifecycle applies migrations) and the companion's i18n\n * labelling planner, which enumerates `Object.keys(...)` and would generate labels for them.\n *\n * These resources are INTROSPECTION-backed: nothing is stored, nothing is migrated, and only the\n * companion can serve them.\n */\nexport enum WorkbenchShared_ResourceType {\n /**\n * The application's domain model as ONE row per resource — module membership, specification prose\n * and the relationships that resource participates in, all in the same row.\n *\n * ## Why ONE resource rather than a module list beside an edge list\n *\n * It replaced exactly that, on 2026-08-31. `workbenchApplicationModules` and\n * `workbenchResourceRelationships` were projections of DIFFERENT companion behaviors on DIFFERENT\n * targets, so a graph drawn from both was drawn from two subprocess runs against a working tree an\n * operator is editing — its nodes could describe one state of the application and its edges the\n * next, with nothing able to detect it. The `application-domain-model` behavior answers all four\n * facts from a single import, which is the only shape in which \"resources, their relationships and\n * their module membership\" is internally consistent.\n *\n * The two were kept for a while on the argument that a flat module list and a flat edge list\n * answered two narrower questions this one did not. Both were then closed rather than argued: every\n * per-edge field the relationships table carried — `isDisabled`, `accessScopeStrategy`,\n * `parentResourceRequirement`, `primaryScope`, `allowCycle` — now rides in\n * `Workbench_DomainResourceRelationship`, and `isDisabled` in particular was a defect while it was\n * missing rather than a gap, because the graph drew a disabled edge exactly like a live one.\n *\n * One thing genuinely did NOT survive, and it is recorded here rather than in a commit message: a\n * module registering ZERO resources produces no row, so it has no node. Wonder CRM's `engine`\n * module is exactly that. The judgement was that a module contributing nothing to the DOMAIN has no\n * place in a domain model, and that engine-scaffolding modules are what\n * `workbenchSpecificationArtifacts` is for — not that the case was overlooked.\n */\n DOMAIN_RESOURCES = 'workbenchDomainResources',\n /**\n * Every application-specification family the journey produces that is NOT the application's own\n * structure — the vision, the market, the requirements, the roadmap, the obligations — as one row\n * each, carrying the artifact rendered for a human to read.\n *\n * ## Why the PRODUCT half needed its own resource\n *\n * The three siblings above all project the application's STRUCTURE: modules, edges, resources.\n * None of them can carry a vision brief, because a vision brief is not a resource, an edge or a\n * module — it is a prose document about the product the application is meant to be. Those\n * documents were reachable only by opening a TypeScript file in an editor, which is not a product\n * (issue #162).\n *\n * ## Why one resource rather than one per family\n *\n * The families are heterogeneous, and the two failure modes are symmetric: one destination per\n * family risks a dozen half-built pages, one destination navigating all of them risks a\n * lowest-common-denominator renderer. The answer taken is one destination whose rows are DERIVED\n * from `APPLICATION_SPECIFICATION_SEMANTIC_SCHEMA_BINDINGS` — so the population cannot drift from\n * the authority — grouped by the question each family answers, with an outline renderer as the\n * floor and the artifacts already committed beside a family (`DIAGRAM.md`, `DECISIONS.md`)\n * surfaced verbatim on top of it. The decision and its rejected alternatives are recorded on\n * issue #162.\n */\n SPECIFICATION_ARTIFACTS = 'workbenchSpecificationArtifacts',\n\n /*\n * ── FAMILY ASPECT RESOURCES ──────────────────────────────────────────────────────────────────\n *\n * One resource per SECOND-LEVEL aspect of a specification family (the vision's success\n * criteria, the market's ICPs, the roadmap's phases, …), so the product graph the snapshots\n * flatten becomes navigable. Their canonical declaration — item schemas, business keys, edges —\n * is `FAMILY_ASPECTS_REGISTRY` in `@wildo-ai/saas-specifications` (`_core/family-aspects.*`):\n * this enum and the descriptor table beside it are the SPINE's schema-agnostic transcription,\n * held to the registry by a companion-side parity test (the spine deliberately never imports\n * saas-specifications).\n *\n * Same nature as their two siblings above: INTROSPECTION-backed, derived per read from the\n * landed files, READ/LIST only. Their READ pages are NOT addressable — references open them as\n * POPUPS (decided 2026-09-01); the artifacts resource stays the primary surface.\n */\n /*\n * ── The CREATION PLANE (added 2026-09-01, `workbench-creation-board-resources.md` Phase 2) ──\n *\n * The four families below are NOT projections of the application's source: they are the\n * COMPANION'S OWN RUNTIME projections for the one application it serves — the playbook\n * eligibility board, the build-plan dispatch view, the run write-register and the execution\n * traces. They ride the same INTROSPECTION adapter through the same port, but their behaviors\n * materialize IN-PROCESS (no subprocess, no app-dist import), their binding declares the\n * `APPLICATION_RUNTIME` tenancy stance, and their read variants are AUTHENTICATED (`APP_USER`) —\n * the structural projections' `APP_PUBLIC` argument (\"anyone with the working tree can already\n * read this\") does not extend to runtime state.\n */\n /**\n * One row per compiled playbook, carrying its ELIGIBILITY VERDICT — can it run right now, and if\n * not, why not — plus the overwrite/stale annotations a creator weighs before dispatching.\n *\n * The rows are a projection of `listPlaybookEligibility()`, the ~10s recompute the creation\n * board's Playbooks pane renders; the companion serves them through a `{board, computedAt}` cache\n * so resource-surface consumers (RMM, lists) do not multiply the recompute. `computedAt` and the\n * derived journey `phase` are projected onto every row — board-level scalars become row fields,\n * because a resource row must be complete on its own.\n */\n PLAYBOOKS = 'workbenchPlaybooks',\n /**\n * One row per build-plan task, in the DISPATCH view: its status (`ready` / `landed` / `blocked`),\n * objective and target kind.\n *\n * DELIBERATELY THIN beside `ASPECT_BUILD_TASK` (`workbenchBuildTasks`), which projects the SAME\n * authored population from the specification artifact with its traceability edges. The two answer\n * different questions — the aspect answers \"what did the journey author\" (subprocess, from the\n * artifact), this one answers \"what can the dispatcher run next and what has landed\" (in-process,\n * computed against git by the dispatch service). Authored detail (skillRefs, serves edges) stays\n * on the aspect row sharing the same `taskRef`; duplicating it here would be a second enumeration\n * of the authored shape, one drift away from lying.\n */\n BUILD_PLAN_TASKS = 'workbenchBuildPlanTasks',\n /**\n * One row per playbook run's WRITE RECORD — which files it wrote, with `existedBefore` per file —\n * the evidence lane that makes every dispatch on the creation board revertable. Pre-image BYTES\n * are deliberately not projected (they belong to the revert mechanism, not to a list row).\n */\n RUN_WRITE_RECORDS = 'workbenchRunWriteRecords',\n /**\n * One row per execution-trace session — the session id, when it started, and how many events and\n * steps it recorded. The detail (events, artifacts) stays on the companion's trace routes for\n * now; this resource is the queryable index the board links from.\n */\n TRACE_SESSIONS = 'workbenchTraceSessions',\n /**\n * The governance questions a creator still owes an answer to, one row per question.\n *\n * A RESOURCE rather than a companion read, which is the distinction the client's own doctrine\n * draws and which this row is on the right side of: a questionnaire prompt has a stable identity\n * (`definitionRef` + `questionRef`), so it lists, it reads, and it can be referenced. What stays a\n * companion read is the shapes that genuinely have no row identity — the runs-in-flight board, the\n * coding-agent status, the mutation lock.\n */\n /**\n * The GOVERNED DOCUMENTS whose questionnaires a person must answer — one row per document.\n *\n * The document half of governance: what the generator derives for it, and how much is left for a\n * person. Distinct from the questions below, which are its children — a document-level fact\n * carried on every question row would be a value with no owner.\n */\n GOVERNANCE_DOCUMENTS = 'workbenchGovernanceDocuments',\n GOVERNANCE_QUESTIONS = 'workbenchGovernanceQuestions',\n /**\n * What the build lane has DISPATCHED, one row per attempt — the coding lane's own history.\n *\n * A resource for the same reason as the questions above: a dispatch is identified by the task it\n * ran (`taskRef`) and it persists, so it lists and it reads. What stays a companion read is the\n * NEXT-task selection beside it, which is a singleton answer rather than a collection.\n */\n /**\n * The NEXT build task a dispatch would run, with the guard rails it would carry — at most one row.\n *\n * The SELECTION, distinct from `BUILD_PLAN_TASKS`, which is every task and its status. Two\n * resources because they answer different questions, and the task list must not change because a\n * selection did.\n */\n BUILD_DISPATCH_PLAN = 'workbenchBuildDispatchPlan',\n BUILD_DISPATCHES = 'workbenchBuildDispatches',\n /**\n * Every playbook run this companion knows about, one row per run, carrying the STATE it is in.\n *\n * It replaced a companion read answering four separate collections — running, running-detached,\n * interrupted, last-completed — which a board had to know the meaning of before it could render\n * anything. They are one thing in four states; `Workbench_PlaybookRunState` names them.\n */\n PLAYBOOK_RUNS = 'workbenchPlaybookRuns',\n /**\n * The playbook runs SUSPENDED waiting on a person, one row per run.\n *\n * Distinct from the runs above, and deliberately its own resource: a suspended run carries the\n * QUESTIONS it is waiting on, it is read from the checkpoint DIRECTORY so it survives the companion\n * restarts an engine rebuild causes several times a day, and the operator's action on it is to\n * answer rather than to watch.\n */\n WAITING_PLAYBOOK_RUNS = 'workbenchWaitingPlaybookRuns',\n /**\n * The coding lane's own posture — ONE row: is an agent registered, is a run in flight, what are\n * the dispatch ceilings, and where is the workspace mutation lock.\n *\n * A singleton, deliberately. It used to be a companion read that ALSO carried the parked-question\n * queue, which is a different thing and is its own resource below.\n */\n CODING_LANE_STATUS = 'workbenchCodingLaneStatus',\n /**\n * The coding runs PARKED on a question, one row per parked task.\n *\n * It arrives today inside the coding-agent STATUS payload — a singleton that legitimately stays a\n * read — but the parked questions inside it are a collection keyed by `taskId`, and a queue of\n * things waiting on a person is the last thing that should only exist inside a status blob.\n */\n PARKED_CODING_QUESTIONS = 'workbenchParkedCodingQuestions',\n /**\n * The application's provider secrets, one row per (environment, secret) it declares a use for —\n * names and standings, never values — with `set` and `unset` per row (#1637).\n */\n APPLICATION_SECRETS = 'workbenchApplicationSecrets',\n /**\n * THE DOSSIER — one row per question a playbook interview asks, joined with the creator's answer\n * when there is one (#1454, Step 5).\n *\n * The answers live in the committed `creator-inputs` family; the questions live in the compiled\n * playbook catalog. Neither alone is what a person reads (\"what did I say, what am I still asked\"),\n * so the row is the JOIN, derived in-process by the companion, and the family deliberately has no\n * aspect resource of its own (see its aspects declaration). Writable through ONE verb, `answer`,\n * which is also the assistant's `record_answer` tool — one door, the resource operation.\n */\n DOSSIER_ENTRIES = 'workbenchDossierEntries',\n /**\n * HOME's LINES (#1454): what happened since the creator was here, what is asked of them now, what\n * they could do next — one row per line, derived by the companion from the rows above, so the\n * page renders and the assistant reads the same facts. Filtered by `section`.\n */\n HOME_LINES = 'workbenchCreationHomeLines',\n /** The four creation OUTCOMES with their standing — always four rows, in reading order. */\n CREATION_OUTCOMES = 'workbenchCreationOutcomes',\n ASPECT_VISION_IDEA = 'workbenchVisionIdeas',\n ASPECT_VISION_PROBLEM = 'workbenchVisionProblems',\n ASPECT_VISION_MISSION = 'workbenchVisionMissions',\n ASPECT_VISION_SUCCESS_CRITERION = 'workbenchVisionSuccessCriteria',\n ASPECT_VISION_CONSTRAINT = 'workbenchVisionConstraints',\n ASPECT_MARKET_CATEGORY = 'workbenchMarketCategories',\n ASPECT_MARKET_ICP = 'workbenchMarketIcps',\n ASPECT_MARKET_PERSONA = 'workbenchMarketPersonas',\n ASPECT_MARKET_JOB = 'workbenchMarketJobs',\n ASPECT_MARKET_PAIN = 'workbenchMarketPains',\n ASPECT_MARKET_GAIN = 'workbenchMarketGains',\n ASPECT_MARKET_TONE_OF_VOICE = 'workbenchMarketTonesOfVoice',\n ASPECT_MARKET_BENEFIT = 'workbenchMarketBenefits',\n ASPECT_MARKET_POSITIONING = 'workbenchMarketPositionings',\n ASPECT_MARKET_CHANNEL = 'workbenchMarketChannels',\n ASPECT_MARKET_ALTERNATIVE = 'workbenchMarketAlternatives',\n ASPECT_MARKET_TRIGGER = 'workbenchMarketTriggers',\n ASPECT_MARKET_BUYING_JOURNEY = 'workbenchMarketBuyingJourneys',\n ASPECT_MARKET_PROOF = 'workbenchMarketProofs',\n ASPECT_MARKET_OBJECTION = 'workbenchMarketObjections',\n ASPECT_MARKET_MESSAGE_TEMPLATE = 'workbenchMarketMessageTemplates',\n ASPECT_REQUIREMENT_FUNCTIONAL = 'workbenchFunctionalRequirements',\n ASPECT_REQUIREMENT_NON_FUNCTIONAL = 'workbenchNonFunctionalRequirements',\n ASPECT_FEATURE_DRAFT = 'workbenchFeatureDrafts',\n ASPECT_ROADMAP_PHASE = 'workbenchRoadmapPhases',\n ASPECT_PRICING_PLAN = 'workbenchPricingPlans',\n ASPECT_BRAND_NAME = 'workbenchBrandNames',\n ASPECT_BRAND_LOGO_DIRECTION = 'workbenchBrandLogoDirections',\n ASPECT_BRAND_VISUAL_TONE = 'workbenchBrandVisualTones',\n ASPECT_BRAND_AUDIENCE = 'workbenchBrandAudiences',\n ASPECT_BRAND_ASSET = 'workbenchBrandAssets',\n ASPECT_DOMAIN_PLAN_MODULE = 'workbenchDomainPlanModules',\n /*\n * The COMPLIANCE PROGRAMME's ten aspects (#1431, surfaced #1512). The largest family in the\n * catalog and the one whose elements every assurance consumer addresses — an obligation, the\n * decision that made it applicable, who is responsible, and what is missing. Until these rows\n * existed the graph could declare those links and not follow one of them.\n */\n ASPECT_COMPLIANCE_SCOPE_SELECTOR = 'workbenchComplianceScopeSelectors',\n ASPECT_COMPLIANCE_APPLICABILITY_DECISION = 'workbenchComplianceApplicabilityDecisions',\n ASPECT_COMPLIANCE_OBLIGATION = 'workbenchComplianceObligations',\n ASPECT_COMPLIANCE_COVERAGE_DECISION = 'workbenchComplianceCoverageDecisions',\n ASPECT_COMPLIANCE_IMPLEMENTATION_DECISION = 'workbenchComplianceImplementationDecisions',\n ASPECT_COMPLIANCE_RESPONSIBILITY_ASSIGNMENT = 'workbenchComplianceResponsibilityAssignments',\n ASPECT_COMPLIANCE_GAP = 'workbenchComplianceGaps',\n ASPECT_COMPLIANCE_DOCUMENTATION_REQUIREMENT = 'workbenchComplianceDocumentationRequirements',\n ASPECT_COMPLIANCE_ROLE_AUTHORITY = 'workbenchComplianceRoleAuthorities',\n ASPECT_COMPLIANCE_SHARED_RESPONSIBILITY_RULE = 'workbenchComplianceSharedResponsibilityRules',\n ASPECT_DOMAIN_PLAN_RESOURCE = 'workbenchDomainPlanResources',\n ASPECT_DOMAIN_PLAN_RELATIONSHIP = 'workbenchDomainPlanRelationships',\n ASPECT_BUILD_TASK = 'workbenchBuildTasks',\n ASPECT_CAPABILITY_COMPOSITION_DECISION = 'workbenchCompositionDecisions',\n ASPECT_WEBSITE_PAGE = 'workbenchWebsitePages',\n ASPECT_DOCUMENTATION_CHAPTER = 'workbenchDocumentationChapters',\n ASPECT_EXPERIENCE_VIEW = 'workbenchExperienceViews',\n ASPECT_EXPERIENCE_CONFIGURATION = 'workbenchExperienceConfigurations',\n ASPECT_EXPERIENCE_MILESTONE = 'workbenchExperienceMilestones',\n ASPECT_EXPERIENCE_GUIDANCE = 'workbenchExperienceGuidance',\n ASPECT_INTEGRATION_WORKER = 'workbenchIntegrationWorkers',\n ASPECT_INTEGRATION_MINION = 'workbenchIntegrationMinions',\n ASPECT_INTEGRATION_PROVIDER_BINDING = 'workbenchIntegrationProviderBindings',\n ASPECT_INTEGRATION_INBOUND_CHANNEL = 'workbenchIntegrationInboundChannels',\n ASPECT_REQUIREMENT_MATURITY = 'workbenchRequirementMaturities',\n ASPECT_PLACEMENT_GROUP = 'workbenchPlacementGroups',\n ASPECT_PLACEMENT_DECISION = 'workbenchPlacementDecisions',\n ASPECT_COMPLIANCE_CANDIDATE_SECTION = 'workbenchComplianceCandidateSections',\n ASPECT_COMPLIANCE_CANDIDATE_VARIANT_SELECTION = 'workbenchComplianceCandidateVariantSelections',\n ASPECT_DOCUMENT_FACT_DECLARATION = 'workbenchDocumentFactDeclarations',\n ASPECT_AUTHORED_DOCUMENT_FACT_DECLARATION = 'workbenchAuthoredDocumentFactDeclarations',\n ASPECT_PROCESSOR_REGISTER_ENTRY = 'workbenchProcessorRegisterEntries',\n ASPECT_RISK_REGISTER_ENTRY = 'workbenchRiskRegisterEntries',\n ASPECT_RELEASE_POLICY_SELECTION = 'workbenchReleasePolicySelections',\n ASPECT_DOCUMENT_PUBLICATION_VARIANT = 'workbenchDocumentPublicationVariants',\n /** The governed-document candidate SET's candidates — the landed shape of a drafting run (#1105). */\n ASPECT_COMPLIANCE_CANDIDATE = 'workbenchComplianceCandidates',\n /** One SECTION of a landed candidate, addressed `<documentRef>/<sectionRef>` (#1465). */\n ASPECT_COMPLIANCE_CANDIDATE_SET_SECTION = 'workbenchComplianceCandidateSetSections',\n /** The document release SET's releases — a composed release of a governed document (#1105). */\n ASPECT_DOCUMENT_RELEASE = 'workbenchDocumentReleases',\n}\n\n/**\n * The field each resource is ADDRESSED BY — and it must be a field the rows actually carry.\n *\n * ## The rule, and the defect that produced it\n *\n * A convention-shaped name declared here that no row carries makes every consumer addressing a row\n * THROUGH this map look for a field that does not exist. The resource this was measured on\n * (`workbenchApplicationModules`, removed 2026-08-31) declared `workbenchApplicationModuleId` while\n * its schema, its behavior and its `identityFields` all said `moduleId`.\n *\n * READ still worked, which is what kept it hidden: the adapter filters by `identityFields`, so the\n * addressed route answered 200 while the frontend list refused every row click with \"could not\n * resolve resource id from list item\" — the id it was told to read was absent from the item. A green\n * addressed READ is therefore NOT evidence that this map is right; the list row click is.\n *\n * So an entry here is either the source's OWN key, or a name COMPOSED by `identityFields` and\n * declared as a real field of the schema. Never a name that merely follows the convention.\n */\nexport const WorkbenchShared_ResourceFieldIdentifier: { [key in WorkbenchShared_ResourceType]: string } = {\n /*\n * COMPOSED from `resourceType`, following the relationships sibling rather than the modules one.\n *\n * The behavior's rows do carry `resourceType`, so the source's own key could have been used\n * directly — as `moduleId` is. It is composed instead because `resourceType` is a name the FIELD\n * IDENTIFIER MAP would then publish globally: that map is merged with the engine's and consumed by\n * `buildFieldIdentifierToResourceTypeMap`, which resolves a foreign-key field NAME to the resource\n * it points at. A generic identifier there is a name any application could collide with, on a map\n * whose whole job is that names are unambiguous.\n */\n [WorkbenchShared_ResourceType.DOMAIN_RESOURCES]: 'workbenchDomainResourceId',\n /*\n * The FAMILY id, which is the source's own key — the `moduleId` case rather than the composed one.\n *\n * A family id (`vision-brief`, `compliance-program`) is unique by construction: the semantic\n * authority is a map keyed by it. And unlike `resourceType`, it is not a name any application's\n * foreign-key field could collide with on the global field-identifier map, so there is nothing for\n * a composed name to protect against here.\n */\n [WorkbenchShared_ResourceType.SPECIFICATION_ARTIFACTS]: 'family',\n /*\n * Aspect identifiers are all COMPOSED (`workbenchMarketIcpId`), for the same reason as\n * DOMAIN_RESOURCES: the raw business-key field is `ref` on most aspects — a name applications\n * collide with constantly — and this map publishes globally. The projection emits the composed\n * field on every row (value = the business key, the aspect key for singletons, or the indexed\n * fallback), so the \"a name the rows actually carry\" rule above holds.\n */\n /*\n * The creation-plane identifiers are all COMPOSED (`workbenchPlaybookId` from `playbookRef`, …):\n * the raw business keys (`playbookRef`, `taskRef`, `runId`, `sessionId`) are names an\n * application's own foreign-key fields could collide with on the global field-identifier map,\n * which is the same reason DOMAIN_RESOURCES composes. Unlike DOMAIN_RESOURCES the field is\n * EMITTED BY THE BEHAVIOR rather than composed by `identityFields` — composition refuses any\n * value outside `[a-zA-Z0-9_-]`, and playbook refs (`top_down.phase-gate`) and trace session ids\n * legitimately carry dots — so the projection service sanitizes and duplicate-checks. The \"a name\n * the rows actually carry\" rule holds either way.\n */\n [WorkbenchShared_ResourceType.PLAYBOOKS]: 'workbenchPlaybookId',\n [WorkbenchShared_ResourceType.BUILD_PLAN_TASKS]: 'workbenchBuildPlanTaskId',\n [WorkbenchShared_ResourceType.RUN_WRITE_RECORDS]: 'workbenchRunWriteRecordId',\n [WorkbenchShared_ResourceType.TRACE_SESSIONS]: 'workbenchTraceSessionId',\n [WorkbenchShared_ResourceType.GOVERNANCE_DOCUMENTS]: 'workbenchGovernanceDocumentId',\n [WorkbenchShared_ResourceType.GOVERNANCE_QUESTIONS]: 'workbenchGovernanceQuestionId',\n [WorkbenchShared_ResourceType.BUILD_DISPATCH_PLAN]: 'workbenchBuildDispatchPlanId',\n [WorkbenchShared_ResourceType.BUILD_DISPATCHES]: 'workbenchBuildDispatchId',\n [WorkbenchShared_ResourceType.PLAYBOOK_RUNS]: 'workbenchPlaybookRunId',\n [WorkbenchShared_ResourceType.WAITING_PLAYBOOK_RUNS]: 'workbenchWaitingPlaybookRunId',\n [WorkbenchShared_ResourceType.CODING_LANE_STATUS]: 'workbenchCodingLaneStatusId',\n [WorkbenchShared_ResourceType.PARKED_CODING_QUESTIONS]: 'workbenchParkedCodingQuestionId',\n [WorkbenchShared_ResourceType.APPLICATION_SECRETS]: 'workbenchApplicationSecretId',\n [WorkbenchShared_ResourceType.DOSSIER_ENTRIES]: 'workbenchDossierEntryId',\n [WorkbenchShared_ResourceType.HOME_LINES]: 'workbenchCreationHomeLineId',\n [WorkbenchShared_ResourceType.CREATION_OUTCOMES]: 'workbenchCreationOutcomeId',\n [WorkbenchShared_ResourceType.ASPECT_VISION_IDEA]: 'workbenchVisionIdeaId',\n [WorkbenchShared_ResourceType.ASPECT_VISION_PROBLEM]: 'workbenchVisionProblemId',\n [WorkbenchShared_ResourceType.ASPECT_VISION_MISSION]: 'workbenchVisionMissionId',\n [WorkbenchShared_ResourceType.ASPECT_VISION_SUCCESS_CRITERION]: 'workbenchVisionSuccessCriterionId',\n [WorkbenchShared_ResourceType.ASPECT_VISION_CONSTRAINT]: 'workbenchVisionConstraintId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_CATEGORY]: 'workbenchMarketCategoryId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_ICP]: 'workbenchMarketIcpId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_PERSONA]: 'workbenchMarketPersonaId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_JOB]: 'workbenchMarketJobId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_PAIN]: 'workbenchMarketPainId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_GAIN]: 'workbenchMarketGainId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_TONE_OF_VOICE]: 'workbenchMarketToneOfVoiceId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_BENEFIT]: 'workbenchMarketBenefitId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_POSITIONING]: 'workbenchMarketPositioningId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_CHANNEL]: 'workbenchMarketChannelId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_ALTERNATIVE]: 'workbenchMarketAlternativeId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_TRIGGER]: 'workbenchMarketTriggerId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_BUYING_JOURNEY]: 'workbenchMarketBuyingJourneyId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_PROOF]: 'workbenchMarketProofId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_OBJECTION]: 'workbenchMarketObjectionId',\n [WorkbenchShared_ResourceType.ASPECT_MARKET_MESSAGE_TEMPLATE]: 'workbenchMarketMessageTemplateId',\n [WorkbenchShared_ResourceType.ASPECT_REQUIREMENT_FUNCTIONAL]: 'workbenchFunctionalRequirementId',\n [WorkbenchShared_ResourceType.ASPECT_REQUIREMENT_NON_FUNCTIONAL]: 'workbenchNonFunctionalRequirementId',\n [WorkbenchShared_ResourceType.ASPECT_FEATURE_DRAFT]: 'workbenchFeatureDraftId',\n [WorkbenchShared_ResourceType.ASPECT_ROADMAP_PHASE]: 'workbenchRoadmapPhaseId',\n [WorkbenchShared_ResourceType.ASPECT_PRICING_PLAN]: 'workbenchPricingPlanId',\n [WorkbenchShared_ResourceType.ASPECT_BRAND_NAME]: 'workbenchBrandNameId',\n [WorkbenchShared_ResourceType.ASPECT_BRAND_LOGO_DIRECTION]: 'workbenchBrandLogoDirectionId',\n [WorkbenchShared_ResourceType.ASPECT_BRAND_VISUAL_TONE]: 'workbenchBrandVisualToneId',\n [WorkbenchShared_ResourceType.ASPECT_BRAND_AUDIENCE]: 'workbenchBrandAudienceId',\n [WorkbenchShared_ResourceType.ASPECT_BRAND_ASSET]: 'workbenchBrandAssetId',\n [WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_MODULE]: 'workbenchDomainPlanModuleId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_SCOPE_SELECTOR]: 'workbenchComplianceScopeSelectorId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_APPLICABILITY_DECISION]: 'workbenchComplianceApplicabilityDecisionId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_OBLIGATION]: 'workbenchComplianceObligationId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_COVERAGE_DECISION]: 'workbenchComplianceCoverageDecisionId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_IMPLEMENTATION_DECISION]: 'workbenchComplianceImplementationDecisionId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_RESPONSIBILITY_ASSIGNMENT]: 'workbenchComplianceResponsibilityAssignmentId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_GAP]: 'workbenchComplianceGapId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_DOCUMENTATION_REQUIREMENT]: 'workbenchComplianceDocumentationRequirementId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_ROLE_AUTHORITY]: 'workbenchComplianceRoleAuthorityId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_SHARED_RESPONSIBILITY_RULE]: 'workbenchComplianceSharedResponsibilityRuleId',\n [WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_RESOURCE]: 'workbenchDomainPlanResourceId',\n [WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_RELATIONSHIP]: 'workbenchDomainPlanRelationshipId',\n [WorkbenchShared_ResourceType.ASPECT_BUILD_TASK]: 'workbenchBuildTaskId',\n [WorkbenchShared_ResourceType.ASPECT_CAPABILITY_COMPOSITION_DECISION]: 'workbenchCompositionDecisionId',\n [WorkbenchShared_ResourceType.ASPECT_WEBSITE_PAGE]: 'workbenchWebsitePageId',\n [WorkbenchShared_ResourceType.ASPECT_DOCUMENTATION_CHAPTER]: 'workbenchDocumentationChapterId',\n [WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_VIEW]: 'workbenchExperienceViewId',\n [WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_CONFIGURATION]: 'workbenchExperienceConfigurationId',\n [WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_MILESTONE]: 'workbenchExperienceMilestoneId',\n [WorkbenchShared_ResourceType.ASPECT_EXPERIENCE_GUIDANCE]: 'workbenchExperienceGuidanceId',\n [WorkbenchShared_ResourceType.ASPECT_INTEGRATION_WORKER]: 'workbenchIntegrationWorkerId',\n [WorkbenchShared_ResourceType.ASPECT_INTEGRATION_MINION]: 'workbenchIntegrationMinionId',\n [WorkbenchShared_ResourceType.ASPECT_INTEGRATION_PROVIDER_BINDING]: 'workbenchIntegrationProviderBindingId',\n [WorkbenchShared_ResourceType.ASPECT_INTEGRATION_INBOUND_CHANNEL]: 'workbenchIntegrationInboundChannelId',\n [WorkbenchShared_ResourceType.ASPECT_REQUIREMENT_MATURITY]: 'workbenchRequirementMaturityId',\n [WorkbenchShared_ResourceType.ASPECT_PLACEMENT_GROUP]: 'workbenchPlacementGroupId',\n [WorkbenchShared_ResourceType.ASPECT_PLACEMENT_DECISION]: 'workbenchPlacementDecisionId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE_SECTION]: 'workbenchComplianceCandidateSectionId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE_VARIANT_SELECTION]: 'workbenchComplianceCandidateVariantSelectionId',\n [WorkbenchShared_ResourceType.ASPECT_DOCUMENT_FACT_DECLARATION]: 'workbenchDocumentFactDeclarationId',\n [WorkbenchShared_ResourceType.ASPECT_AUTHORED_DOCUMENT_FACT_DECLARATION]: 'workbenchAuthoredDocumentFactDeclarationId',\n [WorkbenchShared_ResourceType.ASPECT_PROCESSOR_REGISTER_ENTRY]: 'workbenchProcessorRegisterEntryId',\n [WorkbenchShared_ResourceType.ASPECT_RISK_REGISTER_ENTRY]: 'workbenchRiskRegisterEntryId',\n [WorkbenchShared_ResourceType.ASPECT_RELEASE_POLICY_SELECTION]: 'workbenchReleasePolicySelectionId',\n [WorkbenchShared_ResourceType.ASPECT_DOCUMENT_PUBLICATION_VARIANT]: 'workbenchDocumentPublicationVariantId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE]: 'workbenchComplianceCandidateId',\n [WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE_SET_SECTION]: 'workbenchComplianceCandidateSetSectionId',\n [WorkbenchShared_ResourceType.ASPECT_DOCUMENT_RELEASE]: 'workbenchDocumentReleaseId',\n};\n\n/**\n * The frontend-service name the application-creation workbench identifies itself by.\n *\n * Shared because BOTH sides must agree and neither owns it alone: the workbench sends it as\n * `VITE_FRONTEND_SERVICE_NAME` on every `/application-config` and `/i18n/labels` request, and the\n * companion seeds an entry under exactly this key so the engine's `ApplicationConfigController` can\n * answer instead of refusing with `app_configuration_unknown_frontend_service`.\n *\n * Two string literals in two packages would compile perfectly and fail at runtime with an error that\n * names neither of them.\n */\nexport const WORKBENCH_FRONTEND_SERVICE_NAME = 'application-creation-workbench';\n"]}
@@ -121,6 +121,7 @@ export declare const workbenchDomainResources_ResourceConfiguration_Initializati
121
121
  isDisabled: z.ZodBoolean;
122
122
  requiresStepUpAuthentication: z.ZodBoolean;
123
123
  idempotencyKey: z.ZodNullable<z.ZodString>;
124
+ submissionChallengeAction: z.ZodNullable<z.ZodString>;
124
125
  admitsCrossTenantPlatformAdministration: z.ZodBoolean;
125
126
  auditableEventType: z.ZodNullable<z.ZodString>;
126
127
  isMcpExposed: z.ZodBoolean;
@@ -161,7 +162,7 @@ export declare const workbenchSpecificationArtifacts_ResourceConfiguration_Initi
161
162
  title: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>;
162
163
  description: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>;
163
164
  contentSummary: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodString>>;
164
- concern: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof WorkbenchSpecificationArtifactConcern>>;
165
+ concern: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof WorkbenchSpecificationArtifactConcern>>>;
165
166
  state: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof WorkbenchSpecificationArtifactState>>>;
166
167
  schemaRef: z.ZodString;
167
168
  sourcePath: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodString>>;
@@ -171,6 +172,10 @@ export declare const workbenchSpecificationArtifacts_ResourceConfiguration_Initi
171
172
  content: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
172
173
  document: z.ZodNullable<z.ZodString>;
173
174
  issues: z.ZodNullable<z.ZodString>;
175
+ warnings: z.ZodArray<z.ZodObject<{
176
+ path: z.ZodString;
177
+ message: z.ZodString;
178
+ }, z.core.$strip>>;
174
179
  decisionRecord: z.ZodNullable<z.ZodString>;
175
180
  diagram: z.ZodNullable<z.ZodString>;
176
181
  }, z.core.$strip>>;
@@ -197,6 +202,12 @@ export declare const workbenchShared_ResourcesConfigurationsFactoryMap: {
197
202
  family: z.ZodString;
198
203
  changedInputs: z.ZodArray<z.ZodString>;
199
204
  }, z.core.$strip>>>;
205
+ activeInLine: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodOptional<z.ZodBoolean>>;
206
+ activationDetail: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodOptional<z.ZodString>>;
207
+ openInstances: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodOptional<z.ZodArray<z.ZodObject<{
208
+ instanceKey: z.ZodString;
209
+ purpose: z.ZodString;
210
+ }, z.core.$strip>>>>;
200
211
  computedAt: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodDate>;
201
212
  }, z.core.$strip>>;
202
213
  workbenchBuildPlanTasks: (resourcesRelationships: ResourceRelationship[]) => import("@wildo-ai/saas-models").ResourceConfiguration<typeof import("./workbench-creation-plane.custom.shared.schemas").WorkbenchBuildPlanTasks_Operations, CoreResourceOperation.READ | CoreResourceOperation.LIST, z.ZodObject<{
@@ -286,6 +297,7 @@ export declare const workbenchShared_ResourcesConfigurationsFactoryMap: {
286
297
  workbenchBuildDispatches: (resourcesRelationships: ResourceRelationship[]) => import("@wildo-ai/saas-models").ResourceConfiguration<any, CoreResourceOperation.READ | CoreResourceOperation.LIST, z.ZodObject<{
287
298
  workbenchBuildDispatchId: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
288
299
  taskRef: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>;
300
+ objective: z.ZodNullable<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
289
301
  phase: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof import("./workbench-creation-plane.custom.shared.schemas").Workbench_BuildDispatchPhase>>>;
290
302
  startedAt: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodDate>;
291
303
  settledAt: z.ZodNullable<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodDate>>;
@@ -298,6 +310,7 @@ export declare const workbenchShared_ResourcesConfigurationsFactoryMap: {
298
310
  workbenchPlaybookRunId: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
299
311
  runId: z.ZodNullable<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
300
312
  playbookRef: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>;
313
+ instanceKey: z.ZodNullable<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
301
314
  traceSessionId: z.ZodNullable<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
302
315
  conversationId: z.ZodNullable<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
303
316
  state: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof import("./workbench-creation-plane.custom.shared.schemas").Workbench_PlaybookRunState>>>;
@@ -333,10 +346,15 @@ export declare const workbenchShared_ResourcesConfigurationsFactoryMap: {
333
346
  kind: z.ZodString;
334
347
  options: z.ZodArray<z.ZodString>;
335
348
  }, z.core.$strip>>>;
349
+ routedToUserId: z.ZodNullable<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
336
350
  }, z.core.$strip>>;
337
351
  workbenchCodingLaneStatus: (resourcesRelationships: ResourceRelationship[]) => import("@wildo-ai/saas-models").ResourceConfiguration<any, CoreResourceOperation.READ | CoreResourceOperation.LIST, z.ZodObject<{
338
352
  workbenchCodingLaneStatusId: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
339
353
  codingAgentRegistered: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>;
354
+ codingAgentProviderRef: z.ZodNullable<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
355
+ codingAgentSignedIn: z.ZodNullable<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>>;
356
+ codingAgentLoginDetail: z.ZodNullable<z.ZodString>;
357
+ codingAgentLoginRemedy: z.ZodNullable<z.ZodString>;
340
358
  activeRunTaskId: z.ZodNullable<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>>;
341
359
  activeRunStartedAt: z.ZodNullable<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodDate>>;
342
360
  lockFilePath: z.ZodNullable<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
@@ -352,11 +370,14 @@ export declare const workbenchShared_ResourcesConfigurationsFactoryMap: {
352
370
  question: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>;
353
371
  parkedAt: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodDate>;
354
372
  resumable: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>;
373
+ suspensionRef: z.ZodString;
355
374
  }, z.core.$strip>>;
356
375
  workbenchDossierEntries: (resourcesRelationships: ResourceRelationship[]) => import("@wildo-ai/saas-models").ResourceConfiguration<typeof import("./workbench-creation-plane.custom.shared.schemas").WorkbenchDossierEntries_Operations, CoreResourceOperation.READ | CoreResourceOperation.LIST, z.ZodObject<{
357
376
  workbenchDossierEntryId: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
358
377
  playbookRef: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>;
359
378
  questionRef: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>;
379
+ instanceKey: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodString>>;
380
+ instancePurpose: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodString>>;
360
381
  question: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>;
361
382
  kind: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>;
362
383
  options: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
@@ -368,6 +389,10 @@ export declare const workbenchShared_ResourcesConfigurationsFactoryMap: {
368
389
  playbookEligible: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>;
369
390
  askedNow: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>;
370
391
  affectsFamilies: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
392
+ subject: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof WorkbenchSpecificationArtifactConcern>>>;
393
+ outOfDate: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>;
394
+ outOfDateStepRefs: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
395
+ sharedWithPlaybookRefs: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
371
396
  }, z.core.$strip>>;
372
397
  workbenchCreationHomeLines: (resourcesRelationships: ResourceRelationship[]) => import("@wildo-ai/saas-models").ResourceConfiguration<any, CoreResourceOperation.READ | CoreResourceOperation.LIST, z.ZodObject<{
373
398
  workbenchCreationHomeLineId: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
@@ -398,6 +423,19 @@ export declare const workbenchShared_ResourcesConfigurationsFactoryMap: {
398
423
  tasksLanded: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodNumber>>;
399
424
  unavailableRuntimes: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodArray<z.ZodString>>>;
400
425
  }, z.core.$strip>>;
426
+ workbenchApplicationSecrets: (resourcesRelationships: ResourceRelationship[]) => import("@wildo-ai/saas-models").ResourceConfiguration<typeof import("./workbench-creation-plane.custom.shared.schemas").WorkbenchApplicationSecrets_Operations, CoreResourceOperation.READ | CoreResourceOperation.LIST, z.ZodObject<{
427
+ workbenchApplicationSecretId: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
428
+ environmentName: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>;
429
+ envVarName: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>;
430
+ standing: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof import("./workbench-creation-plane.custom.shared.schemas").ApplicationSecretStanding>>>;
431
+ kind: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof import("./workbench-creation-plane.custom.shared.schemas").ApplicationSecretKind>>>;
432
+ ownerRef: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodString>>;
433
+ description: z.ZodNullable<z.ZodString>;
434
+ capabilities: z.ZodArray<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof import("@wildo-ai/saas-models").EngineCapability>>>;
435
+ runtimes: z.ZodArray<z.ZodString>;
436
+ creationEssential: z.ZodBoolean;
437
+ remoteLevel: z.ZodNullable<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof import("./workbench-creation-plane.custom.shared.schemas").ApplicationSecretRemoteLevel>>>;
438
+ }, z.core.$strip>>;
401
439
  workbenchDomainResources: (resourcesRelationships: ResourceRelationship[]) => import("@wildo-ai/saas-models").ResourceConfiguration<any, WorkbenchDomainResource_CoreOperations, z.ZodObject<{
402
440
  workbenchDomainResourceId: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
403
441
  resourceType: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>;
@@ -424,6 +462,7 @@ export declare const workbenchShared_ResourcesConfigurationsFactoryMap: {
424
462
  isDisabled: z.ZodBoolean;
425
463
  requiresStepUpAuthentication: z.ZodBoolean;
426
464
  idempotencyKey: z.ZodNullable<z.ZodString>;
465
+ submissionChallengeAction: z.ZodNullable<z.ZodString>;
427
466
  admitsCrossTenantPlatformAdministration: z.ZodBoolean;
428
467
  auditableEventType: z.ZodNullable<z.ZodString>;
429
468
  isMcpExposed: z.ZodBoolean;
@@ -463,7 +502,7 @@ export declare const workbenchShared_ResourcesConfigurationsFactoryMap: {
463
502
  title: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>;
464
503
  description: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>;
465
504
  contentSummary: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodString>>;
466
- concern: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof WorkbenchSpecificationArtifactConcern>>;
505
+ concern: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof WorkbenchSpecificationArtifactConcern>>>;
467
506
  state: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof WorkbenchSpecificationArtifactState>>>;
468
507
  schemaRef: z.ZodString;
469
508
  sourcePath: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodString>>;
@@ -473,6 +512,10 @@ export declare const workbenchShared_ResourcesConfigurationsFactoryMap: {
473
512
  content: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
474
513
  document: z.ZodNullable<z.ZodString>;
475
514
  issues: z.ZodNullable<z.ZodString>;
515
+ warnings: z.ZodArray<z.ZodObject<{
516
+ path: z.ZodString;
517
+ message: z.ZodString;
518
+ }, z.core.$strip>>;
476
519
  decisionRecord: z.ZodNullable<z.ZodString>;
477
520
  diagram: z.ZodNullable<z.ZodString>;
478
521
  }, z.core.$strip>>;
@@ -1 +1 @@
1
- {"version":3,"file":"workbench-resources.custom.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../../src/workbench/workbench-resources.custom.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,qBAAqB,EAIrB,0BAA0B,EAC1B,4BAA4B,EAC5B,oBAAoB,EAMrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,OAAO,EAGL,qCAAqC,EACrC,mCAAmC,EACpC,MAAM,6CAA6C,CAAC;AAMrD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,yCAAyC,OAAO,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,wBAAwB;;;;;EA6BvC;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B;;;;;;EAK3C;AAGD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,sCAAsC,EAAE,oBAAoB,EA2CxE,CAAC;AAsBF,KAAK,sCAAsC,GACvC,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,IAAI,CAAC;AAE/B,eAAO,MAAM,oEAAoE,GAC9E,wBAAwB,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAkC7C,CAAC;AAiCL,KAAK,6CAA6C,GAC9C,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,IAAI,CAAC;AAE/B,eAAO,MAAM,2EAA2E,GACrF,wBAAwB,oBAAoB,EAAE;;;;;;;;;;;;;;;;;kBA+C7C,CAAC;AAEL,eAAO,MAAM,iDAAiD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDAzHnC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8DAwEtB,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;CA0DhD,CAAC"}
1
+ {"version":3,"file":"workbench-resources.custom.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../src/workbench/workbench-resources.custom.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,qBAAqB,EAIrB,0BAA0B,EAC1B,4BAA4B,EAC5B,oBAAoB,EAMrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,OAAO,EAGL,qCAAqC,EACrC,mCAAmC,EACpC,MAAM,6CAA6C,CAAC;AAMrD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,yCAAyC,OAAO,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,wBAAwB;;;;;EA6BvC;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B;;;;;;EAK3C;AAGD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,sCAAsC,EAAE,oBAAoB,EA2CxE,CAAC;AAsBF,KAAK,sCAAsC,GACvC,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,IAAI,CAAC;AAE/B,eAAO,MAAM,oEAAoE,GAC9E,wBAAwB,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAkC7C,CAAC;AAiCL,KAAK,6CAA6C,GAC9C,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,IAAI,CAAC;AAE/B,eAAO,MAAM,2EAA2E,GACrF,wBAAwB,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;kBA+C7C,CAAC;AAEL,eAAO,MAAM,iDAAiD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDAzHnC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8DAwEtB,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;CA0DhD,CAAC"}
@@ -265,7 +265,7 @@ export const workbenchSpecificationArtifacts_ResourceConfiguration_Initializatio
265
265
  * tab strip silently never renders.
266
266
  */
267
267
  filterFields: {
268
- concern: z.enum(WorkbenchSpecificationArtifactConcern),
268
+ concern: z.enum(WorkbenchSpecificationArtifactConcern).systemEnum('WorkbenchSpecificationArtifactConcern'),
269
269
  state: z.enum(WorkbenchSpecificationArtifactState).systemEnum('WorkbenchSpecificationArtifactState'),
270
270
  },
271
271
  }],
@@ -1 +1 @@
1
- {"version":3,"file":"workbench-resources.custom.shared.resources-config.schemas.js","sourceRoot":"","sources":["../../../../src/workbench/workbench-resources.custom.shared.resources-config.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CORE_APP_ROLES,\n CoreResourceOperation,\n CoreResourceType,\n IntrospectionTenancyStance,\n PersistenceAdapter,\n ResourceOperationRiskLevel,\n ResourceOperationVariantType,\n ResourceRelationship,\n ResourceRelationshipAccessScopeStrategy,\n ResourceRelationshipCardinality,\n RelationshipNature,\n createResourceConfiguration_Initialization,\n createResourcesRelationship,\n} from '@wildo-ai/saas-models';\n\nimport { z } from 'zod';\n\nimport {\n WorkbenchShared_ResourceFieldIdentifier,\n WorkbenchShared_ResourceType,\n} from './workbench-resources-types.custom.shared.schemas';\nimport {\n buildWorkbenchAspectRelationships,\n workbenchAspectResources_ConfigurationsFactoryMap,\n} from './workbench-aspect-resources.custom.shared.schemas';\nimport {\n Workbench_DomainResource_Schema,\n Workbench_SpecificationArtifact_Schema,\n WorkbenchSpecificationArtifactConcern,\n WorkbenchSpecificationArtifactState,\n} from './workbench-resources.custom.shared.schemas';\nimport {\n workbenchCreationPlane_ResourcesConfigurationsFactoryMap,\n workbenchCreationPlane_ResourcesRelationships,\n} from './workbench-creation-plane.custom.shared.resources-config.schemas';\n\n/**\n * The page ceiling every workbench LIST declares — and it is a correctness fix, not a tuning knob.\n *\n * `IntrospectionResourceRepository.list()` answers `pagination.limit = rows.length` over the WHOLE\n * derived set, deliberately: a behavior computes its entire answer in one subprocess run, there is no\n * cursor to seek, and reporting a total the caller cannot page past would be a lie. The response DTO\n * then bounds that `limit` by the operation's `maxPaginatedResultPerPageLimit`, whose default is\n * **100**. So any introspected resource whose derivation exceeds 100 rows fails with `too_big` at\n * `pagination.limit` — the request having been served correctly right up to the last hop.\n *\n * Measured 2026-08-31, and the measurement is why this ceiling is a CORRECTNESS FIX rather than\n * headroom. The domain model projects every resource the observed application RUNS, which is its own\n * plus the engine's whole merged vocabulary: `saas-models`' core map alone carries **82** resources\n * and **105** relationships before `saas-backend-lib`'s map or the application's own eight are\n * counted. So the domain-model LIST is already comfortably past the default 100 on the smallest\n * application there is, and would have failed with `too_big` at `pagination.limit` — the request\n * having been served correctly right up to the last hop, and the bound named in none of these\n * declarations. The number also scales with the OBSERVED application, which is the one input this\n * repository does not control.\n *\n * Declared on the shared variant so every workbench resource is bounded by the same number, rather\n * than one being raised and its siblings left waiting to hit the same wall.\n *\n * Above the ceiling the request FAILS rather than truncating, which is the correct direction: a\n * silently short domain model is indistinguishable from a complete one once it is drawn.\n */\nexport const WORKBENCH_INTROSPECTION_MAX_ROWS_PER_PAGE = 1000;\n\n/**\n * Read-only over HTTP, and PUBLIC.\n *\n * `APP_PUBLIC` means what its enum comment says — accessible to everyone, no credential — and as of\n * 2026-08-30 the runtime implements it: the authentication chain now admits an operation declaring\n * this role instead of demanding a credential it never required. Before that it was declared,\n * published as public by the OpenAPI generator, and refused at runtime.\n *\n * ## Why these rows are genuinely public\n *\n * They are a projection of the application's OWN SOURCE — module ids and the resource types each\n * registers — carrying no tenant dimension, which is exactly what the binding's\n * `APPLICATION_STRUCTURE` tenancy stance declares. There is no subject whose data could leak,\n * because no subject's data is here.\n *\n * This is the same category as a public price list, a frontend application configuration or an i18n\n * bundle: things every caller may read, which until now could only be served by escaping the\n * resource system into a manual controller.\n *\n * ## What still confines them\n *\n * The companion asserts a loopback bind at startup and fails closed otherwise, so this surface is\n * reachable only from the developer's own machine. `APP_PUBLIC` is the right declaration on its\n * merits; the loopback bind is what makes the whole workbench local, and both remain true\n * independently.\n *\n * If an introspected resource is ever added that projects something OTHER than the application's own\n * structure, this role is wrong for it — the stance and the role must move together.\n */\nexport function createReadOnlyApiVariant() {\n return {\n variantType: ResourceOperationVariantType.API_CALL as const,\n isDefault: true as const,\n /*\n * `APP_PUBLIC` ALONE, and that single entry is now load-bearing evidence rather than a shorthand.\n *\n * It briefly read `[APP_PUBLIC, APP_USER]`. That was a WORKAROUND for an engine defect (#153),\n * not a statement about these rows: the authorizer admitted a public operation only when the\n * caller was ALSO a public execution, so an AUTHENTICATED caller fell past that carve-out to the\n * ordinary role gate — where `APP_PUBLIC` is in nobody's granted set — and was refused. Measured\n * 2026-08-31 on the workbench's module projection (a resource retired the same day): with no\n * credential the LIST answered 200 with the eight modules; with a valid administrator bearer it\n * answered 403 `authorizations_access_denied`. The workbench's own sidebar could not read the\n * rows it exists to show, because its operator had logged in.\n *\n * `requiredRolesDeclarePublicAccess` in `@wildo-ai/saas-models` is now the one named source for\n * what `APP_PUBLIC` means, and every role gate in the engine consults it — so the sentinel\n * genuinely admits every caller and the second role has nothing left to add. Declaring it anyway\n * would say these rows need an authenticated reader, which is the opposite of what they are.\n *\n * Keeping the bare declaration is deliberate: it is the surface the fix is exercised on. If the\n * defect ever returns, the workbench sidebar goes blank for a logged-in operator — a loud,\n * immediate signal — instead of being silently masked by a role that was only ever there to hide\n * it.\n */\n roles: [CORE_APP_ROLES.APP_PUBLIC],\n riskLevel: ResourceOperationRiskLevel.LOW as const,\n };\n}\n\n/**\n * The LIST variant — the read-only variant plus the page ceiling.\n *\n * Separate from {@link createReadOnlyApiVariant} because `maxPaginatedResultPerPageLimit` is only\n * read on a LIST-like operation (`isListLike` in the resource factory); putting it on READ too would\n * declare a field that operation does not have, which reads as though it did something.\n */\nexport function createReadOnlyListApiVariant() {\n return {\n ...createReadOnlyApiVariant(),\n maxPaginatedResultPerPageLimit: WORKBENCH_INTROSPECTION_MAX_ROWS_PER_PAGE,\n };\n}\n\n\n/**\n * APPLICATION-scoped, anchored by a STANDALONE relationship.\n *\n * The form the resource factory's own migration note prescribes: STANDALONE \"keeps the rel inert for\n * URL routing while declaring the structural ownership anchor\", so the resource is reachable at a\n * flat path rather than nested under `/applications/:id/`.\n *\n * APPLICATION rather than ORGANIZATIONS on purpose: these rows describe the application's own\n * structure, so the application IS their scope. There is no tenant dimension to anchor on — the\n * binding's `APPLICATION_STRUCTURE` stance above says the same thing from the data's side.\n *\n * This originally read as a consequence of API-key scoping, because the workbench browser was\n * expected to authenticate with an application-scope key. `APP_PUBLIC` removed that requirement\n * entirely (see the role note above), so the scope now rests on its own merits rather than on a\n * credential's constraint. The tenant-scoping trade remains recorded in issue #118.\n */\nexport const workbenchShared_ResourcesRelationships: ResourceRelationship[] = [\n /*\n * A STANDALONE anchor for the domain-model resource. Every INTROSPECTION resource needs one:\n * `resourcePrimaryScope` is DERIVED from a relationship flagged `isPrimaryScope`, so a resource\n * without one has no scope at all — and STANDALONE keeps it off the URL, which is what gives these\n * resources a flat route instead of `/applications/:id/...`.\n */\n createResourcesRelationship(\n CoreResourceType.APPLICATION,\n WorkbenchShared_ResourceType.DOMAIN_RESOURCES,\n ResourceRelationshipCardinality.ONE,\n ResourceRelationshipCardinality.MANY,\n {\n nature: RelationshipNature.COMPOSITION,\n isPrimaryScope: true,\n accessScopeStrategy: ResourceRelationshipAccessScopeStrategy.STANDALONE,\n contextPolicy: {},\n },\n ),\n /* And for the specification-artifacts resource. Same anchor, same reason. */\n createResourcesRelationship(\n CoreResourceType.APPLICATION,\n WorkbenchShared_ResourceType.SPECIFICATION_ARTIFACTS,\n ResourceRelationshipCardinality.ONE,\n ResourceRelationshipCardinality.MANY,\n {\n nature: RelationshipNature.COMPOSITION,\n isPrimaryScope: true,\n accessScopeStrategy: ResourceRelationshipAccessScopeStrategy.STANDALONE,\n contextPolicy: {},\n },\n ),\n /*\n * Every family-aspect resource's relationships — the same STANDALONE anchor per aspect, plus\n * one REFERENCE per declared edge whose `foreignKeyField` is what makes reference navigation\n * resolve. Generated from the descriptor table beside the aspect configs.\n */\n ...buildWorkbenchAspectRelationships(),\n /*\n * The creation plane's four STANDALONE anchors — same form, declared beside its configs. Merged\n * here so the one array every registrar consumes stays the single relationship authority.\n */\n ...workbenchCreationPlane_ResourcesRelationships,\n];\n\n\n/**\n * The observed application's domain model — one row per resource, and the source the workbench's\n * domain-model graph is drawn from.\n *\n * ## Why a THIRD introspected resource beside modules and relationships\n *\n * Its two siblings project two DIFFERENT behaviors on two different targets, so a graph assembled\n * from both is assembled from two subprocess runs against a working tree an operator is editing —\n * nodes from one state of the application, edges from the next, with nothing to detect the mismatch.\n * `application-domain-model` answers ownership, edges, field names and specification prose from a\n * SINGLE import, which is the only shape in which the three are internally consistent. Speed is the\n * smaller half of the reason; consistency is the whole of it.\n *\n * Same tenancy stance and same PUBLIC role as its siblings, for the same reason: a resource, the\n * module that registers it and the edges it declares are facts about the application's SOURCE, with\n * no tenant dimension and no subject whose data could leak.\n */\nconst WorkbenchDomainResource_Operations = undefined;\n\ntype WorkbenchDomainResource_CoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.LIST;\n\nexport const workbenchDomainResources_ResourceConfiguration_InitializationFactory =\n (resourcesRelationships: ResourceRelationship[]) => createResourceConfiguration_Initialization<\n typeof WorkbenchDomainResource_Operations,\n WorkbenchDomainResource_CoreOperations,\n typeof Workbench_DomainResource_Schema\n >({\n mainSchema: Workbench_DomainResource_Schema,\n resourceIdentifier: WorkbenchShared_ResourceType.DOMAIN_RESOURCES,\n resourceFieldIdentifier:\n WorkbenchShared_ResourceFieldIdentifier[WorkbenchShared_ResourceType.DOMAIN_RESOURCES],\n resourceRelationships: resourcesRelationships,\n isSystemResource: false,\n persistenceAdapter: PersistenceAdapter.INTROSPECTION,\n introspectionBinding: {\n behavior: 'application-domain-model',\n rowsPath: 'domainResources',\n tenancy: IntrospectionTenancyStance.APPLICATION_STRUCTURE,\n /*\n * A resource type is unique in a registry by construction — a registry is keyed by it — so one\n * field is the whole key here, and no discriminator can be needed.\n *\n * Composed onto `workbenchDomainResourceId` rather than addressing the row by `resourceType`\n * directly: `resourceFieldIdentifier` values are published into the GLOBAL field-identifier map\n * that resolves a foreign-key field NAME to the resource it points at, and `resourceType` is a\n * name any application could collide with on a map whose whole job is that names are\n * unambiguous.\n */\n identityFields: ['resourceType'],\n },\n coreOperations: [CoreResourceOperation.READ, CoreResourceOperation.LIST],\n customOperation: WorkbenchDomainResource_Operations,\n operationsConfiguration: {\n [CoreResourceOperation.READ]: { variants: [createReadOnlyApiVariant()] },\n [CoreResourceOperation.LIST]: { variants: [createReadOnlyListApiVariant()] },\n },\n });\n\n/**\n * Every application-specification family the journey produces, projected for a human reviewer.\n *\n * ## What this is for\n *\n * Its three siblings project the application's STRUCTURE. This one projects the PRODUCT and its\n * obligations — vision, market, requirements, roadmap, brand, business model, the assurance\n * programme and the governed-document families — which until now were reachable only by opening a\n * TypeScript file in an editor (issue #162).\n *\n * ## Why the same behavior does not serve it\n *\n * `application-domain-model` answers questions about the resource registry. A family's content is\n * not in the registry at all: it is on the specifications package's companion exports, validated by\n * the `_core` validator the semantic authority names for it. Different target, different question,\n * different behavior — the split the two original workbench resources already demonstrate.\n *\n * ## Same posture as its siblings, for the same reason\n *\n * `APPLICATION_STRUCTURE` tenancy and `APP_PUBLIC`: a vision brief, a roadmap and a compliance\n * programme are facts about what the application's own source SAYS about itself. There is no tenant\n * dimension and no subject whose data could leak, and the companion's loopback bind is what keeps\n * the whole workbench local.\n *\n * READ and LIST only, and structurally so — `PersistenceAdapter.INTROSPECTION` refuses every write\n * verb, rows are derived per read and nothing is stored. Acceptance of a specification is a human\n * git commit (`.claude/rules/one-source-of-truth.md` rule 2), so there is deliberately no place here\n * for an acceptance state to accumulate, not even by accident.\n */\nconst WorkbenchSpecificationArtifact_Operations = undefined;\n\ntype WorkbenchSpecificationArtifact_CoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.LIST;\n\nexport const workbenchSpecificationArtifacts_ResourceConfiguration_InitializationFactory =\n (resourcesRelationships: ResourceRelationship[]) => createResourceConfiguration_Initialization<\n typeof WorkbenchSpecificationArtifact_Operations,\n WorkbenchSpecificationArtifact_CoreOperations,\n typeof Workbench_SpecificationArtifact_Schema\n >({\n mainSchema: Workbench_SpecificationArtifact_Schema,\n resourceIdentifier: WorkbenchShared_ResourceType.SPECIFICATION_ARTIFACTS,\n resourceFieldIdentifier:\n WorkbenchShared_ResourceFieldIdentifier[WorkbenchShared_ResourceType.SPECIFICATION_ARTIFACTS],\n resourceRelationships: resourcesRelationships,\n isSystemResource: false,\n persistenceAdapter: PersistenceAdapter.INTROSPECTION,\n introspectionBinding: {\n behavior: 'specification-artifacts',\n rowsPath: 'artifacts',\n tenancy: IntrospectionTenancyStance.APPLICATION_STRUCTURE,\n /*\n * NO `identityFields`, and the omission is the point.\n *\n * Every row already carries `family`, and `family` IS this resource's\n * `resourceFieldIdentifier` — so there is nothing to compose. This is the `moduleId` case, not\n * the relationships one: declaring an identity here would stamp a composed key over a real\n * field, replacing the source's own id with a copy of itself.\n */\n },\n coreOperations: [CoreResourceOperation.READ, CoreResourceOperation.LIST],\n customOperation: WorkbenchSpecificationArtifact_Operations,\n operationsConfiguration: {\n [CoreResourceOperation.READ]: { variants: [createReadOnlyApiVariant()] },\n [CoreResourceOperation.LIST]: {\n variants: [{\n ...createReadOnlyListApiVariant(),\n /*\n * The two review axes a reader slices fifteen rows by. Declaring them is an OBLIGATION,\n * not a hint: the introspection source honors exactly the scalar-equality/IN filters that\n * reach it and REFUSES shapes it cannot apply, because a declared filter that is silently\n * dropped returns the unfiltered set wearing a filtered label — the `--state ready` defect\n * class. The frontend's concern quick-filter tabs require `concern` to be here, or the\n * tab strip silently never renders.\n */\n filterFields: {\n concern: z.enum(WorkbenchSpecificationArtifactConcern),\n state: z.enum(WorkbenchSpecificationArtifactState).systemEnum('WorkbenchSpecificationArtifactState'),\n },\n }],\n },\n },\n });\n\nexport const workbenchShared_ResourcesConfigurationsFactoryMap = {\n [WorkbenchShared_ResourceType.DOMAIN_RESOURCES]:\n workbenchDomainResources_ResourceConfiguration_InitializationFactory,\n [WorkbenchShared_ResourceType.SPECIFICATION_ARTIFACTS]:\n workbenchSpecificationArtifacts_ResourceConfiguration_InitializationFactory,\n // The 40 family-aspect resources — generated from the descriptor table, one mold for all.\n ...workbenchAspectResources_ConfigurationsFactoryMap,\n // The creation plane — companion-RUNTIME projections (authenticated, APPLICATION_RUNTIME tenancy).\n ...workbenchCreationPlane_ResourcesConfigurationsFactoryMap,\n};\n"]}
1
+ {"version":3,"file":"workbench-resources.custom.shared.resources-config.schemas.js","sourceRoot":"","sources":["../../../src/workbench/workbench-resources.custom.shared.resources-config.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CORE_APP_ROLES,\n CoreResourceOperation,\n CoreResourceType,\n IntrospectionTenancyStance,\n PersistenceAdapter,\n ResourceOperationRiskLevel,\n ResourceOperationVariantType,\n ResourceRelationship,\n ResourceRelationshipAccessScopeStrategy,\n ResourceRelationshipCardinality,\n RelationshipNature,\n createResourceConfiguration_Initialization,\n createResourcesRelationship,\n} from '@wildo-ai/saas-models';\n\nimport { z } from 'zod';\n\nimport {\n WorkbenchShared_ResourceFieldIdentifier,\n WorkbenchShared_ResourceType,\n} from './workbench-resources-types.custom.shared.schemas';\nimport {\n buildWorkbenchAspectRelationships,\n workbenchAspectResources_ConfigurationsFactoryMap,\n} from './workbench-aspect-resources.custom.shared.schemas';\nimport {\n Workbench_DomainResource_Schema,\n Workbench_SpecificationArtifact_Schema,\n WorkbenchSpecificationArtifactConcern,\n WorkbenchSpecificationArtifactState,\n} from './workbench-resources.custom.shared.schemas';\nimport {\n workbenchCreationPlane_ResourcesConfigurationsFactoryMap,\n workbenchCreationPlane_ResourcesRelationships,\n} from './workbench-creation-plane.custom.shared.resources-config.schemas';\n\n/**\n * The page ceiling every workbench LIST declares — and it is a correctness fix, not a tuning knob.\n *\n * `IntrospectionResourceRepository.list()` answers `pagination.limit = rows.length` over the WHOLE\n * derived set, deliberately: a behavior computes its entire answer in one subprocess run, there is no\n * cursor to seek, and reporting a total the caller cannot page past would be a lie. The response DTO\n * then bounds that `limit` by the operation's `maxPaginatedResultPerPageLimit`, whose default is\n * **100**. So any introspected resource whose derivation exceeds 100 rows fails with `too_big` at\n * `pagination.limit` — the request having been served correctly right up to the last hop.\n *\n * Measured 2026-08-31, and the measurement is why this ceiling is a CORRECTNESS FIX rather than\n * headroom. The domain model projects every resource the observed application RUNS, which is its own\n * plus the engine's whole merged vocabulary: `saas-models`' core map alone carries **82** resources\n * and **105** relationships before `saas-backend-lib`'s map or the application's own eight are\n * counted. So the domain-model LIST is already comfortably past the default 100 on the smallest\n * application there is, and would have failed with `too_big` at `pagination.limit` — the request\n * having been served correctly right up to the last hop, and the bound named in none of these\n * declarations. The number also scales with the OBSERVED application, which is the one input this\n * repository does not control.\n *\n * Declared on the shared variant so every workbench resource is bounded by the same number, rather\n * than one being raised and its siblings left waiting to hit the same wall.\n *\n * Above the ceiling the request FAILS rather than truncating, which is the correct direction: a\n * silently short domain model is indistinguishable from a complete one once it is drawn.\n */\nexport const WORKBENCH_INTROSPECTION_MAX_ROWS_PER_PAGE = 1000;\n\n/**\n * Read-only over HTTP, and PUBLIC.\n *\n * `APP_PUBLIC` means what its enum comment says — accessible to everyone, no credential — and as of\n * 2026-08-30 the runtime implements it: the authentication chain now admits an operation declaring\n * this role instead of demanding a credential it never required. Before that it was declared,\n * published as public by the OpenAPI generator, and refused at runtime.\n *\n * ## Why these rows are genuinely public\n *\n * They are a projection of the application's OWN SOURCE — module ids and the resource types each\n * registers — carrying no tenant dimension, which is exactly what the binding's\n * `APPLICATION_STRUCTURE` tenancy stance declares. There is no subject whose data could leak,\n * because no subject's data is here.\n *\n * This is the same category as a public price list, a frontend application configuration or an i18n\n * bundle: things every caller may read, which until now could only be served by escaping the\n * resource system into a manual controller.\n *\n * ## What still confines them\n *\n * The companion asserts a loopback bind at startup and fails closed otherwise, so this surface is\n * reachable only from the developer's own machine. `APP_PUBLIC` is the right declaration on its\n * merits; the loopback bind is what makes the whole workbench local, and both remain true\n * independently.\n *\n * If an introspected resource is ever added that projects something OTHER than the application's own\n * structure, this role is wrong for it — the stance and the role must move together.\n */\nexport function createReadOnlyApiVariant() {\n return {\n variantType: ResourceOperationVariantType.API_CALL as const,\n isDefault: true as const,\n /*\n * `APP_PUBLIC` ALONE, and that single entry is now load-bearing evidence rather than a shorthand.\n *\n * It briefly read `[APP_PUBLIC, APP_USER]`. That was a WORKAROUND for an engine defect (#153),\n * not a statement about these rows: the authorizer admitted a public operation only when the\n * caller was ALSO a public execution, so an AUTHENTICATED caller fell past that carve-out to the\n * ordinary role gate — where `APP_PUBLIC` is in nobody's granted set — and was refused. Measured\n * 2026-08-31 on the workbench's module projection (a resource retired the same day): with no\n * credential the LIST answered 200 with the eight modules; with a valid administrator bearer it\n * answered 403 `authorizations_access_denied`. The workbench's own sidebar could not read the\n * rows it exists to show, because its operator had logged in.\n *\n * `requiredRolesDeclarePublicAccess` in `@wildo-ai/saas-models` is now the one named source for\n * what `APP_PUBLIC` means, and every role gate in the engine consults it — so the sentinel\n * genuinely admits every caller and the second role has nothing left to add. Declaring it anyway\n * would say these rows need an authenticated reader, which is the opposite of what they are.\n *\n * Keeping the bare declaration is deliberate: it is the surface the fix is exercised on. If the\n * defect ever returns, the workbench sidebar goes blank for a logged-in operator — a loud,\n * immediate signal — instead of being silently masked by a role that was only ever there to hide\n * it.\n */\n roles: [CORE_APP_ROLES.APP_PUBLIC],\n riskLevel: ResourceOperationRiskLevel.LOW as const,\n };\n}\n\n/**\n * The LIST variant — the read-only variant plus the page ceiling.\n *\n * Separate from {@link createReadOnlyApiVariant} because `maxPaginatedResultPerPageLimit` is only\n * read on a LIST-like operation (`isListLike` in the resource factory); putting it on READ too would\n * declare a field that operation does not have, which reads as though it did something.\n */\nexport function createReadOnlyListApiVariant() {\n return {\n ...createReadOnlyApiVariant(),\n maxPaginatedResultPerPageLimit: WORKBENCH_INTROSPECTION_MAX_ROWS_PER_PAGE,\n };\n}\n\n\n/**\n * APPLICATION-scoped, anchored by a STANDALONE relationship.\n *\n * The form the resource factory's own migration note prescribes: STANDALONE \"keeps the rel inert for\n * URL routing while declaring the structural ownership anchor\", so the resource is reachable at a\n * flat path rather than nested under `/applications/:id/`.\n *\n * APPLICATION rather than ORGANIZATIONS on purpose: these rows describe the application's own\n * structure, so the application IS their scope. There is no tenant dimension to anchor on — the\n * binding's `APPLICATION_STRUCTURE` stance above says the same thing from the data's side.\n *\n * This originally read as a consequence of API-key scoping, because the workbench browser was\n * expected to authenticate with an application-scope key. `APP_PUBLIC` removed that requirement\n * entirely (see the role note above), so the scope now rests on its own merits rather than on a\n * credential's constraint. The tenant-scoping trade remains recorded in issue #118.\n */\nexport const workbenchShared_ResourcesRelationships: ResourceRelationship[] = [\n /*\n * A STANDALONE anchor for the domain-model resource. Every INTROSPECTION resource needs one:\n * `resourcePrimaryScope` is DERIVED from a relationship flagged `isPrimaryScope`, so a resource\n * without one has no scope at all — and STANDALONE keeps it off the URL, which is what gives these\n * resources a flat route instead of `/applications/:id/...`.\n */\n createResourcesRelationship(\n CoreResourceType.APPLICATION,\n WorkbenchShared_ResourceType.DOMAIN_RESOURCES,\n ResourceRelationshipCardinality.ONE,\n ResourceRelationshipCardinality.MANY,\n {\n nature: RelationshipNature.COMPOSITION,\n isPrimaryScope: true,\n accessScopeStrategy: ResourceRelationshipAccessScopeStrategy.STANDALONE,\n contextPolicy: {},\n },\n ),\n /* And for the specification-artifacts resource. Same anchor, same reason. */\n createResourcesRelationship(\n CoreResourceType.APPLICATION,\n WorkbenchShared_ResourceType.SPECIFICATION_ARTIFACTS,\n ResourceRelationshipCardinality.ONE,\n ResourceRelationshipCardinality.MANY,\n {\n nature: RelationshipNature.COMPOSITION,\n isPrimaryScope: true,\n accessScopeStrategy: ResourceRelationshipAccessScopeStrategy.STANDALONE,\n contextPolicy: {},\n },\n ),\n /*\n * Every family-aspect resource's relationships — the same STANDALONE anchor per aspect, plus\n * one REFERENCE per declared edge whose `foreignKeyField` is what makes reference navigation\n * resolve. Generated from the descriptor table beside the aspect configs.\n */\n ...buildWorkbenchAspectRelationships(),\n /*\n * The creation plane's four STANDALONE anchors — same form, declared beside its configs. Merged\n * here so the one array every registrar consumes stays the single relationship authority.\n */\n ...workbenchCreationPlane_ResourcesRelationships,\n];\n\n\n/**\n * The observed application's domain model — one row per resource, and the source the workbench's\n * domain-model graph is drawn from.\n *\n * ## Why a THIRD introspected resource beside modules and relationships\n *\n * Its two siblings project two DIFFERENT behaviors on two different targets, so a graph assembled\n * from both is assembled from two subprocess runs against a working tree an operator is editing —\n * nodes from one state of the application, edges from the next, with nothing to detect the mismatch.\n * `application-domain-model` answers ownership, edges, field names and specification prose from a\n * SINGLE import, which is the only shape in which the three are internally consistent. Speed is the\n * smaller half of the reason; consistency is the whole of it.\n *\n * Same tenancy stance and same PUBLIC role as its siblings, for the same reason: a resource, the\n * module that registers it and the edges it declares are facts about the application's SOURCE, with\n * no tenant dimension and no subject whose data could leak.\n */\nconst WorkbenchDomainResource_Operations = undefined;\n\ntype WorkbenchDomainResource_CoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.LIST;\n\nexport const workbenchDomainResources_ResourceConfiguration_InitializationFactory =\n (resourcesRelationships: ResourceRelationship[]) => createResourceConfiguration_Initialization<\n typeof WorkbenchDomainResource_Operations,\n WorkbenchDomainResource_CoreOperations,\n typeof Workbench_DomainResource_Schema\n >({\n mainSchema: Workbench_DomainResource_Schema,\n resourceIdentifier: WorkbenchShared_ResourceType.DOMAIN_RESOURCES,\n resourceFieldIdentifier:\n WorkbenchShared_ResourceFieldIdentifier[WorkbenchShared_ResourceType.DOMAIN_RESOURCES],\n resourceRelationships: resourcesRelationships,\n isSystemResource: false,\n persistenceAdapter: PersistenceAdapter.INTROSPECTION,\n introspectionBinding: {\n behavior: 'application-domain-model',\n rowsPath: 'domainResources',\n tenancy: IntrospectionTenancyStance.APPLICATION_STRUCTURE,\n /*\n * A resource type is unique in a registry by construction — a registry is keyed by it — so one\n * field is the whole key here, and no discriminator can be needed.\n *\n * Composed onto `workbenchDomainResourceId` rather than addressing the row by `resourceType`\n * directly: `resourceFieldIdentifier` values are published into the GLOBAL field-identifier map\n * that resolves a foreign-key field NAME to the resource it points at, and `resourceType` is a\n * name any application could collide with on a map whose whole job is that names are\n * unambiguous.\n */\n identityFields: ['resourceType'],\n },\n coreOperations: [CoreResourceOperation.READ, CoreResourceOperation.LIST],\n customOperation: WorkbenchDomainResource_Operations,\n operationsConfiguration: {\n [CoreResourceOperation.READ]: { variants: [createReadOnlyApiVariant()] },\n [CoreResourceOperation.LIST]: { variants: [createReadOnlyListApiVariant()] },\n },\n });\n\n/**\n * Every application-specification family the journey produces, projected for a human reviewer.\n *\n * ## What this is for\n *\n * Its three siblings project the application's STRUCTURE. This one projects the PRODUCT and its\n * obligations — vision, market, requirements, roadmap, brand, business model, the assurance\n * programme and the governed-document families — which until now were reachable only by opening a\n * TypeScript file in an editor (issue #162).\n *\n * ## Why the same behavior does not serve it\n *\n * `application-domain-model` answers questions about the resource registry. A family's content is\n * not in the registry at all: it is on the specifications package's companion exports, validated by\n * the `_core` validator the semantic authority names for it. Different target, different question,\n * different behavior — the split the two original workbench resources already demonstrate.\n *\n * ## Same posture as its siblings, for the same reason\n *\n * `APPLICATION_STRUCTURE` tenancy and `APP_PUBLIC`: a vision brief, a roadmap and a compliance\n * programme are facts about what the application's own source SAYS about itself. There is no tenant\n * dimension and no subject whose data could leak, and the companion's loopback bind is what keeps\n * the whole workbench local.\n *\n * READ and LIST only, and structurally so — `PersistenceAdapter.INTROSPECTION` refuses every write\n * verb, rows are derived per read and nothing is stored. Acceptance of a specification is a human\n * git commit (`.claude/rules/one-source-of-truth.md` rule 2), so there is deliberately no place here\n * for an acceptance state to accumulate, not even by accident.\n */\nconst WorkbenchSpecificationArtifact_Operations = undefined;\n\ntype WorkbenchSpecificationArtifact_CoreOperations =\n | CoreResourceOperation.READ\n | CoreResourceOperation.LIST;\n\nexport const workbenchSpecificationArtifacts_ResourceConfiguration_InitializationFactory =\n (resourcesRelationships: ResourceRelationship[]) => createResourceConfiguration_Initialization<\n typeof WorkbenchSpecificationArtifact_Operations,\n WorkbenchSpecificationArtifact_CoreOperations,\n typeof Workbench_SpecificationArtifact_Schema\n >({\n mainSchema: Workbench_SpecificationArtifact_Schema,\n resourceIdentifier: WorkbenchShared_ResourceType.SPECIFICATION_ARTIFACTS,\n resourceFieldIdentifier:\n WorkbenchShared_ResourceFieldIdentifier[WorkbenchShared_ResourceType.SPECIFICATION_ARTIFACTS],\n resourceRelationships: resourcesRelationships,\n isSystemResource: false,\n persistenceAdapter: PersistenceAdapter.INTROSPECTION,\n introspectionBinding: {\n behavior: 'specification-artifacts',\n rowsPath: 'artifacts',\n tenancy: IntrospectionTenancyStance.APPLICATION_STRUCTURE,\n /*\n * NO `identityFields`, and the omission is the point.\n *\n * Every row already carries `family`, and `family` IS this resource's\n * `resourceFieldIdentifier` — so there is nothing to compose. This is the `moduleId` case, not\n * the relationships one: declaring an identity here would stamp a composed key over a real\n * field, replacing the source's own id with a copy of itself.\n */\n },\n coreOperations: [CoreResourceOperation.READ, CoreResourceOperation.LIST],\n customOperation: WorkbenchSpecificationArtifact_Operations,\n operationsConfiguration: {\n [CoreResourceOperation.READ]: { variants: [createReadOnlyApiVariant()] },\n [CoreResourceOperation.LIST]: {\n variants: [{\n ...createReadOnlyListApiVariant(),\n /*\n * The two review axes a reader slices fifteen rows by. Declaring them is an OBLIGATION,\n * not a hint: the introspection source honors exactly the scalar-equality/IN filters that\n * reach it and REFUSES shapes it cannot apply, because a declared filter that is silently\n * dropped returns the unfiltered set wearing a filtered label — the `--state ready` defect\n * class. The frontend's concern quick-filter tabs require `concern` to be here, or the\n * tab strip silently never renders.\n */\n filterFields: {\n concern: z.enum(WorkbenchSpecificationArtifactConcern).systemEnum('WorkbenchSpecificationArtifactConcern'),\n state: z.enum(WorkbenchSpecificationArtifactState).systemEnum('WorkbenchSpecificationArtifactState'),\n },\n }],\n },\n },\n });\n\nexport const workbenchShared_ResourcesConfigurationsFactoryMap = {\n [WorkbenchShared_ResourceType.DOMAIN_RESOURCES]:\n workbenchDomainResources_ResourceConfiguration_InitializationFactory,\n [WorkbenchShared_ResourceType.SPECIFICATION_ARTIFACTS]:\n workbenchSpecificationArtifacts_ResourceConfiguration_InitializationFactory,\n // The 40 family-aspect resources — generated from the descriptor table, one mold for all.\n ...workbenchAspectResources_ConfigurationsFactoryMap,\n // The creation plane — companion-RUNTIME projections (authenticated, APPLICATION_RUNTIME tenancy).\n ...workbenchCreationPlane_ResourcesConfigurationsFactoryMap,\n};\n"]}