@wildo-ai/platform-core-shared 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.resources-config.schemas.d.ts +3 -3
- package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.resources-config.schemas.js +39 -8
- package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.resources-config.schemas.d.ts +4 -3
- package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.resources-config.schemas.js +37 -6
- package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.schemas.d.ts +1 -0
- package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.schemas.d.ts.map +1 -1
- package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.schemas.js +13 -0
- package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.schemas.js.map +1 -1
- package/dist/esm/workbench/workbench-aspect-resources.custom.shared.schemas.d.ts +100 -0
- package/dist/esm/workbench/workbench-aspect-resources.custom.shared.schemas.d.ts.map +1 -0
- package/dist/esm/workbench/workbench-aspect-resources.custom.shared.schemas.js +578 -0
- package/dist/esm/workbench/workbench-aspect-resources.custom.shared.schemas.js.map +1 -0
- package/dist/esm/workbench/workbench-creation-board.custom.shared.schemas.d.ts +98 -0
- package/dist/esm/workbench/workbench-creation-board.custom.shared.schemas.d.ts.map +1 -0
- package/dist/esm/workbench/workbench-creation-board.custom.shared.schemas.js +86 -0
- package/dist/esm/workbench/workbench-creation-board.custom.shared.schemas.js.map +1 -0
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.d.ts +157 -0
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.js +258 -0
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.d.ts +221 -0
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.d.ts.map +1 -0
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.js +292 -0
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.js.map +1 -0
- package/dist/esm/workbench/workbench-domain-model.custom.shared.schemas.d.ts +48 -0
- package/dist/esm/workbench/workbench-domain-model.custom.shared.schemas.d.ts.map +1 -0
- package/dist/esm/workbench/workbench-domain-model.custom.shared.schemas.js +48 -0
- package/dist/esm/workbench/workbench-domain-model.custom.shared.schemas.js.map +1 -0
- package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.d.ts +146 -6
- package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.d.ts.map +1 -1
- package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.js +256 -8
- package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.js.map +1 -1
- package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.d.ts +280 -55
- package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.js +191 -85
- package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/workbench/workbench-resources.custom.shared.schemas.d.ts +227 -49
- package/dist/esm/workbench/workbench-resources.custom.shared.schemas.d.ts.map +1 -1
- package/dist/esm/workbench/workbench-resources.custom.shared.schemas.js +466 -78
- package/dist/esm/workbench/workbench-resources.custom.shared.schemas.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -5
- package/dist/esm/.builder.pid +0 -9
|
@@ -11,19 +11,267 @@
|
|
|
11
11
|
*/
|
|
12
12
|
export var WorkbenchShared_ResourceType;
|
|
13
13
|
(function (WorkbenchShared_ResourceType) {
|
|
14
|
-
WorkbenchShared_ResourceType["APPLICATION_MODULES"] = "workbenchApplicationModules";
|
|
15
14
|
/**
|
|
16
|
-
*
|
|
15
|
+
* The application's domain model as ONE row per resource — module membership, specification prose
|
|
16
|
+
* and the relationships that resource participates in, all in the same row.
|
|
17
17
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
18
|
+
* ## Why ONE resource rather than a module list beside an edge list
|
|
19
|
+
*
|
|
20
|
+
* It replaced exactly that, on 2026-08-31. `workbenchApplicationModules` and
|
|
21
|
+
* `workbenchResourceRelationships` were projections of DIFFERENT companion behaviors on DIFFERENT
|
|
22
|
+
* targets, so a graph drawn from both was drawn from two subprocess runs against a working tree an
|
|
23
|
+
* operator is editing — its nodes could describe one state of the application and its edges the
|
|
24
|
+
* next, with nothing able to detect it. The `application-domain-model` behavior answers all four
|
|
25
|
+
* facts from a single import, which is the only shape in which "resources, their relationships and
|
|
26
|
+
* their module membership" is internally consistent.
|
|
27
|
+
*
|
|
28
|
+
* The two were kept for a while on the argument that a flat module list and a flat edge list
|
|
29
|
+
* answered two narrower questions this one did not. Both were then closed rather than argued: every
|
|
30
|
+
* per-edge field the relationships table carried — `isDisabled`, `accessScopeStrategy`,
|
|
31
|
+
* `parentResourceRequirement`, `primaryScope`, `allowCycle` — now rides in
|
|
32
|
+
* `Workbench_DomainResourceRelationship`, and `isDisabled` in particular was a defect while it was
|
|
33
|
+
* missing rather than a gap, because the graph drew a disabled edge exactly like a live one.
|
|
34
|
+
*
|
|
35
|
+
* One thing genuinely did NOT survive, and it is recorded here rather than in a commit message: a
|
|
36
|
+
* module registering ZERO resources produces no row, so it has no node. Wonder CRM's `engine`
|
|
37
|
+
* module is exactly that. The judgement was that a module contributing nothing to the DOMAIN has no
|
|
38
|
+
* place in a domain model, and that engine-scaffolding modules are what
|
|
39
|
+
* `workbenchSpecificationArtifacts` is for — not that the case was overlooked.
|
|
40
|
+
*/
|
|
41
|
+
WorkbenchShared_ResourceType["DOMAIN_RESOURCES"] = "workbenchDomainResources";
|
|
42
|
+
/**
|
|
43
|
+
* Every application-specification family the journey produces that is NOT the application's own
|
|
44
|
+
* structure — the vision, the market, the requirements, the roadmap, the obligations — as one row
|
|
45
|
+
* each, carrying the artifact rendered for a human to read.
|
|
46
|
+
*
|
|
47
|
+
* ## Why the PRODUCT half needed its own resource
|
|
48
|
+
*
|
|
49
|
+
* The three siblings above all project the application's STRUCTURE: modules, edges, resources.
|
|
50
|
+
* None of them can carry a vision brief, because a vision brief is not a resource, an edge or a
|
|
51
|
+
* module — it is a prose document about the product the application is meant to be. Those
|
|
52
|
+
* documents were reachable only by opening a TypeScript file in an editor, which is not a product
|
|
53
|
+
* (issue #162).
|
|
54
|
+
*
|
|
55
|
+
* ## Why one resource rather than one per family
|
|
56
|
+
*
|
|
57
|
+
* The families are heterogeneous, and the two failure modes are symmetric: one destination per
|
|
58
|
+
* family risks a dozen half-built pages, one destination navigating all of them risks a
|
|
59
|
+
* lowest-common-denominator renderer. The answer taken is one destination whose rows are DERIVED
|
|
60
|
+
* from `APPLICATION_SPECIFICATION_SEMANTIC_SCHEMA_BINDINGS` — so the population cannot drift from
|
|
61
|
+
* the authority — grouped by the question each family answers, with an outline renderer as the
|
|
62
|
+
* floor and the artifacts already committed beside a family (`DIAGRAM.md`, `DECISIONS.md`)
|
|
63
|
+
* surfaced verbatim on top of it. The decision and its rejected alternatives are recorded on
|
|
64
|
+
* issue #162.
|
|
65
|
+
*/
|
|
66
|
+
WorkbenchShared_ResourceType["SPECIFICATION_ARTIFACTS"] = "workbenchSpecificationArtifacts";
|
|
67
|
+
/*
|
|
68
|
+
* ── FAMILY ASPECT RESOURCES ──────────────────────────────────────────────────────────────────
|
|
69
|
+
*
|
|
70
|
+
* One resource per SECOND-LEVEL aspect of a specification family (the vision's success
|
|
71
|
+
* criteria, the market's ICPs, the roadmap's phases, …), so the product graph the snapshots
|
|
72
|
+
* flatten becomes navigable. Their canonical declaration — item schemas, business keys, edges —
|
|
73
|
+
* is `FAMILY_ASPECTS_REGISTRY` in `@wildo-ai/saas-specifications` (`_core/family-aspects.*`):
|
|
74
|
+
* this enum and the descriptor table beside it are the SPINE's schema-agnostic transcription,
|
|
75
|
+
* held to the registry by a companion-side parity test (the spine deliberately never imports
|
|
76
|
+
* saas-specifications).
|
|
77
|
+
*
|
|
78
|
+
* Same nature as their two siblings above: INTROSPECTION-backed, derived per read from the
|
|
79
|
+
* landed files, READ/LIST only. Their READ pages are NOT addressable — references open them as
|
|
80
|
+
* POPUPS (decided 2026-09-01); the artifacts resource stays the primary surface.
|
|
81
|
+
*/
|
|
82
|
+
/*
|
|
83
|
+
* ── The CREATION PLANE (added 2026-09-01, `workbench-creation-board-resources.md` Phase 2) ──
|
|
84
|
+
*
|
|
85
|
+
* The four families below are NOT projections of the application's source: they are the
|
|
86
|
+
* COMPANION'S OWN RUNTIME projections for the one application it serves — the playbook
|
|
87
|
+
* eligibility board, the build-plan dispatch view, the run write-register and the execution
|
|
88
|
+
* traces. They ride the same INTROSPECTION adapter through the same port, but their behaviors
|
|
89
|
+
* materialize IN-PROCESS (no subprocess, no app-dist import), their binding declares the
|
|
90
|
+
* `APPLICATION_RUNTIME` tenancy stance, and their read variants are AUTHENTICATED (`APP_USER`) —
|
|
91
|
+
* the structural projections' `APP_PUBLIC` argument ("anyone with the working tree can already
|
|
92
|
+
* read this") does not extend to runtime state.
|
|
93
|
+
*/
|
|
94
|
+
/**
|
|
95
|
+
* One row per compiled playbook, carrying its ELIGIBILITY VERDICT — can it run right now, and if
|
|
96
|
+
* not, why not — plus the overwrite/stale annotations a creator weighs before dispatching.
|
|
97
|
+
*
|
|
98
|
+
* The rows are a projection of `listPlaybookEligibility()`, the ~10s recompute the creation
|
|
99
|
+
* board's Playbooks pane renders; the companion serves them through a `{board, computedAt}` cache
|
|
100
|
+
* so resource-surface consumers (RMM, lists) do not multiply the recompute. `computedAt` and the
|
|
101
|
+
* derived journey `phase` are projected onto every row — board-level scalars become row fields,
|
|
102
|
+
* because a resource row must be complete on its own.
|
|
103
|
+
*/
|
|
104
|
+
WorkbenchShared_ResourceType["PLAYBOOKS"] = "workbenchPlaybooks";
|
|
105
|
+
/**
|
|
106
|
+
* One row per build-plan task, in the DISPATCH view: its status (`ready` / `landed` / `blocked`),
|
|
107
|
+
* objective and target kind.
|
|
108
|
+
*
|
|
109
|
+
* DELIBERATELY THIN beside `ASPECT_BUILD_TASK` (`workbenchBuildTasks`), which projects the SAME
|
|
110
|
+
* authored population from the specification artifact with its traceability edges. The two answer
|
|
111
|
+
* different questions — the aspect answers "what did the journey author" (subprocess, from the
|
|
112
|
+
* artifact), this one answers "what can the dispatcher run next and what has landed" (in-process,
|
|
113
|
+
* computed against git by the dispatch service). Authored detail (skillRefs, serves edges) stays
|
|
114
|
+
* on the aspect row sharing the same `taskRef`; duplicating it here would be a second enumeration
|
|
115
|
+
* of the authored shape, one drift away from lying.
|
|
21
116
|
*/
|
|
22
|
-
WorkbenchShared_ResourceType["
|
|
117
|
+
WorkbenchShared_ResourceType["BUILD_PLAN_TASKS"] = "workbenchBuildPlanTasks";
|
|
118
|
+
/**
|
|
119
|
+
* One row per playbook run's WRITE RECORD — which files it wrote, with `existedBefore` per file —
|
|
120
|
+
* the evidence lane that makes every dispatch on the creation board revertable. Pre-image BYTES
|
|
121
|
+
* are deliberately not projected (they belong to the revert mechanism, not to a list row).
|
|
122
|
+
*/
|
|
123
|
+
WorkbenchShared_ResourceType["RUN_WRITE_RECORDS"] = "workbenchRunWriteRecords";
|
|
124
|
+
/**
|
|
125
|
+
* One row per execution-trace session — the session id, when it started, and how many events and
|
|
126
|
+
* steps it recorded. The detail (events, artifacts) stays on the companion's trace routes for
|
|
127
|
+
* now; this resource is the queryable index the board links from.
|
|
128
|
+
*/
|
|
129
|
+
WorkbenchShared_ResourceType["TRACE_SESSIONS"] = "workbenchTraceSessions";
|
|
130
|
+
WorkbenchShared_ResourceType["ASPECT_VISION_IDEA"] = "workbenchVisionIdeas";
|
|
131
|
+
WorkbenchShared_ResourceType["ASPECT_VISION_PROBLEM"] = "workbenchVisionProblems";
|
|
132
|
+
WorkbenchShared_ResourceType["ASPECT_VISION_MISSION"] = "workbenchVisionMissions";
|
|
133
|
+
WorkbenchShared_ResourceType["ASPECT_VISION_SUCCESS_CRITERION"] = "workbenchVisionSuccessCriteria";
|
|
134
|
+
WorkbenchShared_ResourceType["ASPECT_VISION_CONSTRAINT"] = "workbenchVisionConstraints";
|
|
135
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_CATEGORY"] = "workbenchMarketCategories";
|
|
136
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_ICP"] = "workbenchMarketIcps";
|
|
137
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_PERSONA"] = "workbenchMarketPersonas";
|
|
138
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_JOB"] = "workbenchMarketJobs";
|
|
139
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_PAIN"] = "workbenchMarketPains";
|
|
140
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_GAIN"] = "workbenchMarketGains";
|
|
141
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_TONE_OF_VOICE"] = "workbenchMarketTonesOfVoice";
|
|
142
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_BENEFIT"] = "workbenchMarketBenefits";
|
|
143
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_POSITIONING"] = "workbenchMarketPositionings";
|
|
144
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_CHANNEL"] = "workbenchMarketChannels";
|
|
145
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_ALTERNATIVE"] = "workbenchMarketAlternatives";
|
|
146
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_TRIGGER"] = "workbenchMarketTriggers";
|
|
147
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_BUYING_JOURNEY"] = "workbenchMarketBuyingJourneys";
|
|
148
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_PROOF"] = "workbenchMarketProofs";
|
|
149
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_OBJECTION"] = "workbenchMarketObjections";
|
|
150
|
+
WorkbenchShared_ResourceType["ASPECT_MARKET_MESSAGE_TEMPLATE"] = "workbenchMarketMessageTemplates";
|
|
151
|
+
WorkbenchShared_ResourceType["ASPECT_REQUIREMENT_FUNCTIONAL"] = "workbenchFunctionalRequirements";
|
|
152
|
+
WorkbenchShared_ResourceType["ASPECT_REQUIREMENT_NON_FUNCTIONAL"] = "workbenchNonFunctionalRequirements";
|
|
153
|
+
WorkbenchShared_ResourceType["ASPECT_FEATURE_DRAFT"] = "workbenchFeatureDrafts";
|
|
154
|
+
WorkbenchShared_ResourceType["ASPECT_ROADMAP_PHASE"] = "workbenchRoadmapPhases";
|
|
155
|
+
WorkbenchShared_ResourceType["ASPECT_PRICING_PLAN"] = "workbenchPricingPlans";
|
|
156
|
+
WorkbenchShared_ResourceType["ASPECT_BRAND_NAME"] = "workbenchBrandNames";
|
|
157
|
+
WorkbenchShared_ResourceType["ASPECT_BRAND_LOGO_DIRECTION"] = "workbenchBrandLogoDirections";
|
|
158
|
+
WorkbenchShared_ResourceType["ASPECT_BRAND_VISUAL_TONE"] = "workbenchBrandVisualTones";
|
|
159
|
+
WorkbenchShared_ResourceType["ASPECT_BRAND_ASSET"] = "workbenchBrandAssets";
|
|
160
|
+
WorkbenchShared_ResourceType["ASPECT_DOMAIN_PLAN_MODULE"] = "workbenchDomainPlanModules";
|
|
161
|
+
WorkbenchShared_ResourceType["ASPECT_DOMAIN_PLAN_RELATIONSHIP"] = "workbenchDomainPlanRelationships";
|
|
162
|
+
WorkbenchShared_ResourceType["ASPECT_BUILD_TASK"] = "workbenchBuildTasks";
|
|
163
|
+
WorkbenchShared_ResourceType["ASPECT_PLACEMENT_GROUP"] = "workbenchPlacementGroups";
|
|
164
|
+
WorkbenchShared_ResourceType["ASPECT_PLACEMENT_DECISION"] = "workbenchPlacementDecisions";
|
|
165
|
+
WorkbenchShared_ResourceType["ASPECT_COMPLIANCE_CANDIDATE_SECTION"] = "workbenchComplianceCandidateSections";
|
|
166
|
+
WorkbenchShared_ResourceType["ASPECT_COMPLIANCE_CANDIDATE_VARIANT_SELECTION"] = "workbenchComplianceCandidateVariantSelections";
|
|
167
|
+
WorkbenchShared_ResourceType["ASPECT_DOCUMENT_FACT_DECLARATION"] = "workbenchDocumentFactDeclarations";
|
|
168
|
+
WorkbenchShared_ResourceType["ASPECT_AUTHORED_DOCUMENT_FACT_DECLARATION"] = "workbenchAuthoredDocumentFactDeclarations";
|
|
169
|
+
WorkbenchShared_ResourceType["ASPECT_PROCESSOR_REGISTER_ENTRY"] = "workbenchProcessorRegisterEntries";
|
|
170
|
+
WorkbenchShared_ResourceType["ASPECT_RELEASE_POLICY_SELECTION"] = "workbenchReleasePolicySelections";
|
|
171
|
+
WorkbenchShared_ResourceType["ASPECT_DOCUMENT_PUBLICATION_VARIANT"] = "workbenchDocumentPublicationVariants";
|
|
23
172
|
})(WorkbenchShared_ResourceType || (WorkbenchShared_ResourceType = {}));
|
|
173
|
+
/**
|
|
174
|
+
* The field each resource is ADDRESSED BY — and it must be a field the rows actually carry.
|
|
175
|
+
*
|
|
176
|
+
* ## The rule, and the defect that produced it
|
|
177
|
+
*
|
|
178
|
+
* A convention-shaped name declared here that no row carries makes every consumer addressing a row
|
|
179
|
+
* THROUGH this map look for a field that does not exist. The resource this was measured on
|
|
180
|
+
* (`workbenchApplicationModules`, removed 2026-08-31) declared `workbenchApplicationModuleId` while
|
|
181
|
+
* its schema, its behavior and its `identityFields` all said `moduleId`.
|
|
182
|
+
*
|
|
183
|
+
* READ still worked, which is what kept it hidden: the adapter filters by `identityFields`, so the
|
|
184
|
+
* addressed route answered 200 while the frontend list refused every row click with "could not
|
|
185
|
+
* resolve resource id from list item" — the id it was told to read was absent from the item. A green
|
|
186
|
+
* addressed READ is therefore NOT evidence that this map is right; the list row click is.
|
|
187
|
+
*
|
|
188
|
+
* So an entry here is either the source's OWN key, or a name COMPOSED by `identityFields` and
|
|
189
|
+
* declared as a real field of the schema. Never a name that merely follows the convention.
|
|
190
|
+
*/
|
|
24
191
|
export const WorkbenchShared_ResourceFieldIdentifier = {
|
|
25
|
-
|
|
26
|
-
|
|
192
|
+
/*
|
|
193
|
+
* COMPOSED from `resourceType`, following the relationships sibling rather than the modules one.
|
|
194
|
+
*
|
|
195
|
+
* The behavior's rows do carry `resourceType`, so the source's own key could have been used
|
|
196
|
+
* directly — as `moduleId` is. It is composed instead because `resourceType` is a name the FIELD
|
|
197
|
+
* IDENTIFIER MAP would then publish globally: that map is merged with the engine's and consumed by
|
|
198
|
+
* `buildFieldIdentifierToResourceTypeMap`, which resolves a foreign-key field NAME to the resource
|
|
199
|
+
* it points at. A generic identifier there is a name any application could collide with, on a map
|
|
200
|
+
* whose whole job is that names are unambiguous.
|
|
201
|
+
*/
|
|
202
|
+
[WorkbenchShared_ResourceType.DOMAIN_RESOURCES]: 'workbenchDomainResourceId',
|
|
203
|
+
/*
|
|
204
|
+
* The FAMILY id, which is the source's own key — the `moduleId` case rather than the composed one.
|
|
205
|
+
*
|
|
206
|
+
* A family id (`vision-brief`, `compliance-program`) is unique by construction: the semantic
|
|
207
|
+
* authority is a map keyed by it. And unlike `resourceType`, it is not a name any application's
|
|
208
|
+
* foreign-key field could collide with on the global field-identifier map, so there is nothing for
|
|
209
|
+
* a composed name to protect against here.
|
|
210
|
+
*/
|
|
211
|
+
[WorkbenchShared_ResourceType.SPECIFICATION_ARTIFACTS]: 'family',
|
|
212
|
+
/*
|
|
213
|
+
* Aspect identifiers are all COMPOSED (`workbenchMarketIcpId`), for the same reason as
|
|
214
|
+
* DOMAIN_RESOURCES: the raw business-key field is `ref` on most aspects — a name applications
|
|
215
|
+
* collide with constantly — and this map publishes globally. The projection emits the composed
|
|
216
|
+
* field on every row (value = the business key, the aspect key for singletons, or the indexed
|
|
217
|
+
* fallback), so the "a name the rows actually carry" rule above holds.
|
|
218
|
+
*/
|
|
219
|
+
/*
|
|
220
|
+
* The creation-plane identifiers are all COMPOSED (`workbenchPlaybookId` from `playbookRef`, …):
|
|
221
|
+
* the raw business keys (`playbookRef`, `taskRef`, `runId`, `sessionId`) are names an
|
|
222
|
+
* application's own foreign-key fields could collide with on the global field-identifier map,
|
|
223
|
+
* which is the same reason DOMAIN_RESOURCES composes. Unlike DOMAIN_RESOURCES the field is
|
|
224
|
+
* EMITTED BY THE BEHAVIOR rather than composed by `identityFields` — composition refuses any
|
|
225
|
+
* value outside `[a-zA-Z0-9_-]`, and playbook refs (`top_down.phase-gate`) and trace session ids
|
|
226
|
+
* legitimately carry dots — so the projection service sanitizes and duplicate-checks. The "a name
|
|
227
|
+
* the rows actually carry" rule holds either way.
|
|
228
|
+
*/
|
|
229
|
+
[WorkbenchShared_ResourceType.PLAYBOOKS]: 'workbenchPlaybookId',
|
|
230
|
+
[WorkbenchShared_ResourceType.BUILD_PLAN_TASKS]: 'workbenchBuildPlanTaskId',
|
|
231
|
+
[WorkbenchShared_ResourceType.RUN_WRITE_RECORDS]: 'workbenchRunWriteRecordId',
|
|
232
|
+
[WorkbenchShared_ResourceType.TRACE_SESSIONS]: 'workbenchTraceSessionId',
|
|
233
|
+
[WorkbenchShared_ResourceType.ASPECT_VISION_IDEA]: 'workbenchVisionIdeaId',
|
|
234
|
+
[WorkbenchShared_ResourceType.ASPECT_VISION_PROBLEM]: 'workbenchVisionProblemId',
|
|
235
|
+
[WorkbenchShared_ResourceType.ASPECT_VISION_MISSION]: 'workbenchVisionMissionId',
|
|
236
|
+
[WorkbenchShared_ResourceType.ASPECT_VISION_SUCCESS_CRITERION]: 'workbenchVisionSuccessCriterionId',
|
|
237
|
+
[WorkbenchShared_ResourceType.ASPECT_VISION_CONSTRAINT]: 'workbenchVisionConstraintId',
|
|
238
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_CATEGORY]: 'workbenchMarketCategoryId',
|
|
239
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_ICP]: 'workbenchMarketIcpId',
|
|
240
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_PERSONA]: 'workbenchMarketPersonaId',
|
|
241
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_JOB]: 'workbenchMarketJobId',
|
|
242
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_PAIN]: 'workbenchMarketPainId',
|
|
243
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_GAIN]: 'workbenchMarketGainId',
|
|
244
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_TONE_OF_VOICE]: 'workbenchMarketToneOfVoiceId',
|
|
245
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_BENEFIT]: 'workbenchMarketBenefitId',
|
|
246
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_POSITIONING]: 'workbenchMarketPositioningId',
|
|
247
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_CHANNEL]: 'workbenchMarketChannelId',
|
|
248
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_ALTERNATIVE]: 'workbenchMarketAlternativeId',
|
|
249
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_TRIGGER]: 'workbenchMarketTriggerId',
|
|
250
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_BUYING_JOURNEY]: 'workbenchMarketBuyingJourneyId',
|
|
251
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_PROOF]: 'workbenchMarketProofId',
|
|
252
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_OBJECTION]: 'workbenchMarketObjectionId',
|
|
253
|
+
[WorkbenchShared_ResourceType.ASPECT_MARKET_MESSAGE_TEMPLATE]: 'workbenchMarketMessageTemplateId',
|
|
254
|
+
[WorkbenchShared_ResourceType.ASPECT_REQUIREMENT_FUNCTIONAL]: 'workbenchFunctionalRequirementId',
|
|
255
|
+
[WorkbenchShared_ResourceType.ASPECT_REQUIREMENT_NON_FUNCTIONAL]: 'workbenchNonFunctionalRequirementId',
|
|
256
|
+
[WorkbenchShared_ResourceType.ASPECT_FEATURE_DRAFT]: 'workbenchFeatureDraftId',
|
|
257
|
+
[WorkbenchShared_ResourceType.ASPECT_ROADMAP_PHASE]: 'workbenchRoadmapPhaseId',
|
|
258
|
+
[WorkbenchShared_ResourceType.ASPECT_PRICING_PLAN]: 'workbenchPricingPlanId',
|
|
259
|
+
[WorkbenchShared_ResourceType.ASPECT_BRAND_NAME]: 'workbenchBrandNameId',
|
|
260
|
+
[WorkbenchShared_ResourceType.ASPECT_BRAND_LOGO_DIRECTION]: 'workbenchBrandLogoDirectionId',
|
|
261
|
+
[WorkbenchShared_ResourceType.ASPECT_BRAND_VISUAL_TONE]: 'workbenchBrandVisualToneId',
|
|
262
|
+
[WorkbenchShared_ResourceType.ASPECT_BRAND_ASSET]: 'workbenchBrandAssetId',
|
|
263
|
+
[WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_MODULE]: 'workbenchDomainPlanModuleId',
|
|
264
|
+
[WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_RELATIONSHIP]: 'workbenchDomainPlanRelationshipId',
|
|
265
|
+
[WorkbenchShared_ResourceType.ASPECT_BUILD_TASK]: 'workbenchBuildTaskId',
|
|
266
|
+
[WorkbenchShared_ResourceType.ASPECT_PLACEMENT_GROUP]: 'workbenchPlacementGroupId',
|
|
267
|
+
[WorkbenchShared_ResourceType.ASPECT_PLACEMENT_DECISION]: 'workbenchPlacementDecisionId',
|
|
268
|
+
[WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE_SECTION]: 'workbenchComplianceCandidateSectionId',
|
|
269
|
+
[WorkbenchShared_ResourceType.ASPECT_COMPLIANCE_CANDIDATE_VARIANT_SELECTION]: 'workbenchComplianceCandidateVariantSelectionId',
|
|
270
|
+
[WorkbenchShared_ResourceType.ASPECT_DOCUMENT_FACT_DECLARATION]: 'workbenchDocumentFactDeclarationId',
|
|
271
|
+
[WorkbenchShared_ResourceType.ASPECT_AUTHORED_DOCUMENT_FACT_DECLARATION]: 'workbenchAuthoredDocumentFactDeclarationId',
|
|
272
|
+
[WorkbenchShared_ResourceType.ASPECT_PROCESSOR_REGISTER_ENTRY]: 'workbenchProcessorRegisterEntryId',
|
|
273
|
+
[WorkbenchShared_ResourceType.ASPECT_RELEASE_POLICY_SELECTION]: 'workbenchReleasePolicySelectionId',
|
|
274
|
+
[WorkbenchShared_ResourceType.ASPECT_DOCUMENT_PUBLICATION_VARIANT]: 'workbenchDocumentPublicationVariantId',
|
|
27
275
|
};
|
|
28
276
|
/**
|
|
29
277
|
* The frontend-service name the application-creation workbench identifies itself by.
|
|
@@ -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":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAN,IAAY,4BAUX;AAVD,WAAY,4BAA4B;IACtC,mFAAmD,CAAA;IACnD;;;;;;OAMG;IACH,yFAAyD,CAAA;AAC3D,CAAC,EAVW,4BAA4B,KAA5B,4BAA4B,QAUvC;AAED,MAAM,CAAC,MAAM,uCAAuC,GAAsD;IACxG,CAAC,4BAA4B,CAAC,mBAAmB,CAAC,EAAE,8BAA8B;IAClF,CAAC,4BAA4B,CAAC,sBAAsB,CAAC,EAAE,iCAAiC;CACzF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,gCAAgC,CAAC","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 APPLICATION_MODULES = 'workbenchApplicationModules',\n /**\n * Every relationship edge the application's resources declare — how its domain is wired.\n *\n * Projected from a DIFFERENT behavior (`resources-registry`) than the modules beside it, which is\n * what makes it the surface that proves the adapter generalizes: one binding shape, two behaviors,\n * two row shapes, no adapter change.\n */\n RESOURCE_RELATIONSHIPS = 'workbenchResourceRelationships',\n}\n\nexport const WorkbenchShared_ResourceFieldIdentifier: { [key in WorkbenchShared_ResourceType]: string } = {\n [WorkbenchShared_ResourceType.APPLICATION_MODULES]: 'workbenchApplicationModuleId',\n [WorkbenchShared_ResourceType.RESOURCE_RELATIONSHIPS]: 'workbenchResourceRelationshipId',\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 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_ASSET = 'workbenchBrandAssets',\n ASPECT_DOMAIN_PLAN_MODULE = 'workbenchDomainPlanModules',\n ASPECT_DOMAIN_PLAN_RELATIONSHIP = 'workbenchDomainPlanRelationships',\n ASPECT_BUILD_TASK = 'workbenchBuildTasks',\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_RELEASE_POLICY_SELECTION = 'workbenchReleasePolicySelections',\n ASPECT_DOCUMENT_PUBLICATION_VARIANT = 'workbenchDocumentPublicationVariants',\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.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_ASSET]: 'workbenchBrandAssetId',\n [WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_MODULE]: 'workbenchDomainPlanModuleId',\n [WorkbenchShared_ResourceType.ASPECT_DOMAIN_PLAN_RELATIONSHIP]: 'workbenchDomainPlanRelationshipId',\n [WorkbenchShared_ResourceType.ASPECT_BUILD_TASK]: 'workbenchBuildTaskId',\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_RELEASE_POLICY_SELECTION]: 'workbenchReleasePolicySelectionId',\n [WorkbenchShared_ResourceType.ASPECT_DOCUMENT_PUBLICATION_VARIANT]: 'workbenchDocumentPublicationVariantId',\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"]}
|