@beehexa/hexasync-template-model 2608.8.3 → 2608.15.1

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.
@@ -0,0 +1,195 @@
1
+ /**
2
+ * A node's address — [AD-33](AD-33-node-addressing.md), decided by Jazz on 2026-08-10.
3
+ *
4
+ * An address is the **path to the node**, segments joined by `:`. It replaces three schemes that three
5
+ * implementations invented independently, two of which were positional:
6
+ *
7
+ * | | scheme | how it failed |
8
+ * | --- | --- | --- |
9
+ * | VS Code extension | `n0`, `s0n0`, `g0`, `c0` | ordinal — every id shifts when step order changes |
10
+ * | CLI + dashboard | `<stage>_<stepKey>`, plus `_D_<n>` / `_IF_<n>` for branches | stable for authored steps; the **branch counter is positional** |
11
+ *
12
+ * A counter re-numbers on an edit that renamed nothing, which is exactly the breakage a click contract exists to
13
+ * prevent. A path does not: the diamond at `…:key_STEP:next:if` keeps that address however many steps are added
14
+ * around it. **That is the whole argument**, and it is why AD-33 replaced an earlier recommendation to standardise
15
+ * on `_D_<n>` — a recommendation that was itself the defect it criticised.
16
+ *
17
+ * ### Why this is in `model` and not in a flow package
18
+ *
19
+ * `objects:id_X:metrics:id_Y:facet:Z` is not a flow. It addresses **any** node in a profile, so it serves three
20
+ * consumers at once: a diagram's click target, a provenance anchor, and the citation FR-24–28 needs for an MCP
21
+ * resource. A flow package owning the scheme would force the other two to invent a second one.
22
+ *
23
+ * ### Two layers, because mermaid cannot hold a `:`
24
+ *
25
+ * | layer | form | example |
26
+ * | --- | --- | --- |
27
+ * | canonical address | `:`-joined | `pullers:id_**XPullerId**:pullSteps:key_GET_ORDERS:next:if` |
28
+ * | rendered mermaid id | `:` → `__`, then sanitised | `pullers__id___XPullerId____pullSteps__key_GET_ORDERS__next__if` |
29
+ *
30
+ * The projection is safe because of a measurement, re-taken 2026-08-10 over every array-valued step stage in the
31
+ * corpus (5,819 authored `key` values, 12,366 including `output.yaml`): **0 contain `:`** and **0 contain `__`**, in
32
+ * both populations. So `__` is an unambiguous segment boundary and the round trip is lossless.
33
+ *
34
+ * ⚠️ The same re-measurement corrected AD-33's third claim: **1** key is not `[A-Za-z0-9_]` —
35
+ * `!CHECK_EXISTS_ITEMS` — and the `!` is the composer's REMOVAL directive, not part of the name. Hence rule 6 and
36
+ * `normalizeComponentKey` below. Read raw, that address would name a node the composer deletes.
37
+ */
38
+ import { normalizeComponentKey } from './componentKey.js';
39
+ /** The separator between address segments. Measured absent from all 2,144+ authored keys. */
40
+ export const ADDRESS_SEPARATOR = ':';
41
+ /** What a `:` becomes when rendered into a mermaid id, which admits only `[A-Za-z0-9_]`. */
42
+ export const RENDERED_SEPARATOR = '__';
43
+ /** A key segment — `pullers`, `pullSteps`, `next`, `if`. */
44
+ export const keySegment = (name) => ({
45
+ kind: 'key',
46
+ name,
47
+ });
48
+ /**
49
+ * An identity segment, from a component's raw `id` or `key` value.
50
+ *
51
+ * ### `id_` carries the AUTHORED value, tokens and all
52
+ *
53
+ * Jazz's own example is `pullers:id_**LightspeedXSeriesPullerId**`, not the composed GUID. An address describes the
54
+ * **source**, and the authored form is identical across environments where a resolved GUID is not. It renders as
55
+ * `id___LightspeedXSeriesPullerId__`, which is ugly and harmless: nothing parses a rendered id for navigation,
56
+ * because the node index carries file, location and source text.
57
+ *
58
+ * Returns `undefined` for an absent identity, and for a value whose `!` marks it **removed** — a node the composer
59
+ * deletes has no address in the composed document, and minting one would be a citation to something that is not
60
+ * there.
61
+ */
62
+ export function identitySegment(raw, which) {
63
+ const normalized = normalizeComponentKey(raw);
64
+ if (!normalized || normalized.id === '' || normalized.removes)
65
+ return undefined;
66
+ if (carriesSeparator(normalized.id))
67
+ return undefined;
68
+ return which === 'id'
69
+ ? { kind: 'id', value: normalized.id }
70
+ : { kind: 'componentKey', value: normalized.id };
71
+ }
72
+ /** A dictionary tail, e.g. a metric facet's key. */
73
+ export function entrySegment(raw) {
74
+ const normalized = normalizeComponentKey(raw);
75
+ if (!normalized || normalized.id === '' || normalized.removes)
76
+ return undefined;
77
+ if (carriesSeparator(normalized.id))
78
+ return undefined;
79
+ return { kind: 'entry', value: normalized.id };
80
+ }
81
+ /**
82
+ * A value that cannot be a segment, because it carries the separator.
83
+ *
84
+ * AD-33's `:`-freedom measurement covers **step keys** — 0 of 12,366 — and rule 5's "dictionary tail" has no such
85
+ * measurement. The corpus already contains one: `pullers[0].pullSteps[0].data.queries.date_modified:min`. Accepted
86
+ * verbatim, `entrySegment('date_modified:min')` makes a 7-segment path yield 8 segments, so `addressSegments` and
87
+ * `addressMatches` split at the wrong place — and `nodeAddress([keySegment('pullers'), identitySegment('X:pullSteps:key_Y', 'id')])`
88
+ * is byte-identical to the address of step `Y` in stage `pullSteps` of puller `X`.
89
+ *
90
+ * Nothing is broken today, and that is exactly why this is a guard rather than a comment: the algebra should be
91
+ * structurally safe, not statistically safe. A refused segment is dropped, which is the same treatment a removed
92
+ * component gets — an address that would be ambiguous is worse than a shorter one.
93
+ */
94
+ function carriesSeparator(value) {
95
+ return value.includes(ADDRESS_SEPARATOR);
96
+ }
97
+ /** One segment's canonical text. */
98
+ function textOf(segment) {
99
+ switch (segment.kind) {
100
+ case 'key':
101
+ return segment.name;
102
+ case 'id':
103
+ return `id_${segment.value}`;
104
+ case 'componentKey':
105
+ return `key_${segment.value}`;
106
+ case 'entry':
107
+ return segment.value;
108
+ }
109
+ }
110
+ /**
111
+ * The canonical address for a path.
112
+ *
113
+ * `undefined` segments are dropped rather than rendered as blanks, so a caller can pass
114
+ * `identitySegment(step.key, 'key')` without first checking it — a step with no key still gets the address of the
115
+ * stage that holds it, which is a true statement about a lesser-known node rather than an address with a hole in it.
116
+ *
117
+ * A segment whose TEXT is empty is dropped for the same reason, and this is the structural home of that rule (Story
118
+ * 4.6 review, LOW-1). `identitySegment` already refuses an empty id, but `keySegment('')` is a defined segment holding
119
+ * no text, so an empty `collection` or an empty base string produced `:creationSteps:key_FORM` — an address whose
120
+ * separator claims a level that was never there. That was first patched at one call site in `frontend-flow`; the class
121
+ * belongs here, where every caller gets it. Whitespace counts as empty: a segment of spaces is not a level either.
122
+ */
123
+ export function nodeAddress(segments) {
124
+ return segments
125
+ .filter((s) => s !== undefined)
126
+ .map(textOf)
127
+ .filter((text) => text.trim() !== '')
128
+ .join(ADDRESS_SEPARATOR);
129
+ }
130
+ /**
131
+ * The rendered form for a mermaid node id.
132
+ *
133
+ * Two steps, in this order: `:` → `__`, then sanitise anything still outside `[A-Za-z0-9_]`. Sanitising first would
134
+ * turn a stray character into `_` and make it indistinguishable from a separator.
135
+ */
136
+ export function renderedNodeId(address) {
137
+ return address
138
+ .split(ADDRESS_SEPARATOR)
139
+ .join(RENDERED_SEPARATOR)
140
+ .replace(/[^A-Za-z0-9_]/g, '_');
141
+ }
142
+ /** The segments of a canonical address, as text. */
143
+ export function addressSegments(address) {
144
+ return address === '' ? [] : address.split(ADDRESS_SEPARATOR);
145
+ }
146
+ /**
147
+ * Does `address` name this node, or one inside it?
148
+ *
149
+ * **Whole-segment**, which is what makes AD-33's prefix-capture fix structural rather than a rule. The corpus has
150
+ * **924 pairs** of unique step keys where one prefixes another, and fixture 01 contains one directly:
151
+ * `SAVE_SALES_RETURN` and `SAVE_SALES_RETURN_DETAILS`, both named in one Scriban expression. As segments they are
152
+ * simply different, so `includes()`-style capture cannot happen — no word-boundary regex, no side payload map.
153
+ */
154
+ export function addressMatches(address, candidate) {
155
+ /**
156
+ * An EMPTY address matches nothing (Story 4.1 review, LOW-4). `[].every(...)` is `true`, so an empty `address`
157
+ * previously "contained" every node in the profile — and it is reachable: `nodeAddress([])` and a path whose only
158
+ * segment was refused both return `''`. A node with no address is not an ancestor of anything.
159
+ */
160
+ if (address === '' || candidate === '')
161
+ return false;
162
+ if (address === candidate)
163
+ return true;
164
+ const own = addressSegments(address);
165
+ const other = addressSegments(candidate);
166
+ if (other.length <= own.length)
167
+ return false;
168
+ return own.every((segment, index) => other[index] === segment);
169
+ }
170
+ /**
171
+ * The address, among those a caller already knows, that a rendered mermaid id refers to.
172
+ *
173
+ * ### There is deliberately NO reverse function, and the first draft of this module had one
174
+ *
175
+ * `addressOfRenderedId` looked reasonable and was unsound. It reversed `__` → `:` and accepted the result if it
176
+ * re-rendered to the same id — but that check proves round-trip *consistency*, not *uniqueness*, and the projection
177
+ * is genuinely many-to-one once sanitisation is involved. Its own test caught it: both
178
+ *
179
+ * ```
180
+ * pullers:id_**XPullerId**:pullSteps:key_GET_ORDERS:next:if ← the real address
181
+ * pullers:id:_XPullerId::pullSteps:key_GET_ORDERS:next:if ← a different node entirely
182
+ * ```
183
+ *
184
+ * render to `pullers__id___XPullerId____pullSteps__key_GET_ORDERS__next__if`. So it would have returned the second
185
+ * for a click on the first: precisely the wrong-node navigation its own docblock claimed to prevent.
186
+ *
187
+ * The direction that IS sound is forward-only, and it is all a consumer needs — Story 4.1 AC-4 puts the address on
188
+ * every node in the index, so a click handler always has the candidates in hand and never has to invert anything.
189
+ */
190
+ export function addressForRenderedId(rendered, known) {
191
+ const matches = known.filter((address) => renderedNodeId(address) === rendered);
192
+ // Two known addresses rendering alike is not a node to navigate to — it is an ambiguity to report as none.
193
+ return matches.length === 1 ? matches[0] : undefined;
194
+ }
195
+ //# sourceMappingURL=nodeAddress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeAddress.js","sourceRoot":"","sources":["../src/nodeAddress.ts"],"names":[],"mappings":"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"}
@@ -69,6 +69,23 @@ export interface ReferenceProperty {
69
69
  * "not a component reference" instead of "a reference that is broken".
70
70
  */
71
71
  readonly tokenFormOnly?: boolean;
72
+ /**
73
+ * Collections whose OWN entries this property does not reference from (FR-47, Story 1.7).
74
+ *
75
+ * A property name can mean two different things depending on where it sits. `connectorId` in a step
76
+ * argument names a connection in this project and resolves 413/413. `connectorId` on a `connectors[]`
77
+ * entry is the entry's own **platform** identity — the connector product it reaches — and points at
78
+ * nothing in the workspace, exactly as its legacy spelling `providerId` does (measured 0/27, which is why
79
+ * `providerId` sits in `NON_REFERENCE_ID_PROPERTIES`).
80
+ *
81
+ * Without this, FR-3's rename would give every converted connection a dangling-reference finding, and
82
+ * FR-2's own promise — that writing the modern spelling produces no error — would be broken by the rule
83
+ * registry immediately after the schema stopped breaking it.
84
+ *
85
+ * Position, not value: the value is a well-formed id either way, so no amount of inspecting it can tell
86
+ * the two apart. The enclosing collection is the only thing that can.
87
+ */
88
+ readonly opaqueInCollections?: readonly string[];
72
89
  }
73
90
  export declare const REFERENCE_PROPERTY_LIST: readonly ReferenceProperty[];
74
91
  /** What a property means at one position: whether it references, and what it points into. */
@@ -85,7 +102,13 @@ export interface ReferenceKind {
85
102
  * in `entityId`, or `entityType: SELF`. That is a distinct answer from "a reference that does not
86
103
  * resolve", and collapsing the two is what puts diagnostics on correct files.
87
104
  */
88
- export declare function resolveReferenceKind(property: string, value: string, siblings?: Record<string, unknown>): ReferenceKind | undefined;
105
+ export declare function resolveReferenceKind(property: string, value: string, siblings?: Record<string, unknown>,
106
+ /**
107
+ * The collection whose entry this property sits inside — `connectors`, `pullers`, `objects`, … — as the
108
+ * walker already tracks it. Optional so existing callers keep compiling; supplying it is what lets a
109
+ * property mean one thing in a step argument and another on a component of its own collection (FR-47).
110
+ */
111
+ enclosingCollection?: string): ReferenceKind | undefined;
89
112
  /** Fast membership test for the walk in `queries.ts`. */
90
113
  export declare const REFERENCE_PROPERTIES: readonly string[];
91
114
  export declare const referencePropertyFor: (property: string) => ReferenceProperty | undefined;
@@ -147,4 +170,31 @@ export declare const nestedReferenceBlockFor: (property: string) => ReferencePro
147
170
  export declare const COLLECTIONS_KEYED_BY_REFERENCE: ReadonlyMap<string, string>;
148
171
  /** The property name reported for a reference carried by a component's own key. */
149
172
  export declare const KEY_REFERENCE_PROPERTY = "(key)";
173
+ /**
174
+ * The connector a connection names — `connectorId` first, `providerId` second (FR-1, AD-24).
175
+ *
176
+ * The read order exists in four places: `BaseStepExecutor` (untyped), `ConnectorDefinition.ResolvedConnectorId`
177
+ * (typed), `WebhookPartitioner` (via the accessor) and — found missing by the Epic 1 review — the CLI's task
178
+ * tooling. FR-1 says *every* runtime path, and the CLI reading only the legacy spelling meant a
179
+ * `connectorId`-only connection, exactly what FR-3's rename produces at scale, hard-stopped task generation
180
+ * with *"Connector undefined not found"*.
181
+ *
182
+ * Blank counts as absent, matching the untyped path: `Guid.Empty` has no equivalent here, but an empty string
183
+ * does, and a half-written `connectorId: ""` must not beat a real legacy value.
184
+ */
185
+ export declare function resolvedConnectorIdOf(connection: {
186
+ connectorId?: unknown;
187
+ providerId?: unknown;
188
+ } | null | undefined): string | undefined;
189
+ /**
190
+ * An identity that is STILL a token after composition — the variable failed, and `VAR-1` owns that.
191
+ *
192
+ * ⛔ A NAME for `isTokenForm`, not a second implementation. It shipped as a byte-identical copy of the regex
193
+ * 350 lines above its original, in the file whose own docstring says *"ONE definition, deliberately … Epic 1's
194
+ * review found what happens when a rule this small gets written three times."* Found by the Epic 2 review; kept
195
+ * as an alias rather than deleted because the two names say different things at their call sites — one asks
196
+ * "is this the shape a reference resolves in", the other "did substitution fail here".
197
+ */
198
+ export declare const isUnresolvedToken: (value: string) => boolean;
199
+ export declare function isWellFormedConnectorIdentity(value: string): boolean;
150
200
  //# sourceMappingURL=references.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../src/references.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAwCH,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,OAAiC,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1D,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qGAAqG;AACrG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,qFAAqF;IACrF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,uFAAuF;IACvF,QAAQ,CAAC,aAAa,CAAC,EAAE,sBAAsB,CAAC;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAmBD,eAAO,MAAM,uBAAuB,EAAE,SAAS,iBAAiB,EA+C/D,CAAC;AAEF,6FAA6F;AAC7F,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,4FAA4F;IAC5F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,aAAa,GAAG,SAAS,CA4B3B;AAED,yDAAyD;AACzD,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EACF,CAAC;AAIjD,eAAO,MAAM,oBAAoB,GAC/B,UAAU,MAAM,KACf,iBAAiB,GAAG,SAAkC,CAAC;AAE1D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EASxD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,iBAAiB,EAI/D,CAAC;AAMF,eAAO,MAAM,uBAAuB,GAClC,UAAU,MAAM,KACf,iBAAiB,GAAG,SAAyC,CAAC;AAEjE;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAyBnE,CAAC;AAEL,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,UAAU,CAAC"}
1
+ {"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../src/references.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AA6CH,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,OACb,CAAC;AAEhC;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1D,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qGAAqG;AACrG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,qFAAqF;IACrF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,uFAAuF;IACvF,QAAQ,CAAC,aAAa,CAAC,EAAE,sBAAsB,CAAC;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClD;AAmBD,eAAO,MAAM,uBAAuB,EAAE,SAAS,iBAAiB,EAqD/D,CAAC;AAEF,6FAA6F;AAC7F,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,4FAA4F;IAC5F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;AAClC;;;;GAIG;AACH,mBAAmB,CAAC,EAAE,MAAM,GAC3B,aAAa,GAAG,SAAS,CAoC3B;AAED,yDAAyD;AACzD,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EACF,CAAC;AAIjD,eAAO,MAAM,oBAAoB,GAC/B,UAAU,MAAM,KACf,iBAAiB,GAAG,SAAkC,CAAC;AAE1D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EASxD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,iBAAiB,EAI/D,CAAC;AAMF,eAAO,MAAM,uBAAuB,GAClC,UAAU,MAAM,KACf,iBAAiB,GAAG,SAAyC,CAAC;AAEjE;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAyBnE,CAAC;AAEL,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAE9C;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EACR;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GACnE,MAAM,GAAG,SAAS,CAgBpB;AAqBD;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,UA7WK,MAAM,KAAG,OA6WA,CAAC;AAE7C,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMpE"}
@@ -73,9 +73,14 @@
73
73
  * The lesson generalises: a reference is a property, a target collection AND a value shape. Any
74
74
  * future re-derivation must assert all three, or it will score a wrong answer at 100% again.
75
75
  */
76
- /** Values that are `**Token**` form — the only shape a conditional reference resolves in. */
76
+ /**
77
+ * Values that are `**Token**` form — the only shape a conditional reference resolves in.
78
+ *
79
+ * TRIMMED, as of the Epic 2 review. It was not, while a second copy of this predicate 350 lines below was — so
80
+ * a quoted `" **Token** "` was a token to one and a literal to the other. One definition, one answer.
81
+ */
77
82
  const TOKEN_FORM = /^\*\*[^*]+\*\*$/;
78
- export const isTokenForm = (value) => TOKEN_FORM.test(value);
83
+ export const isTokenForm = (value) => TOKEN_FORM.test(value.trim());
79
84
  /** `entityType` → the collection an `entityId` beside it points into. */
80
85
  const ENTITY_TYPE_TARGETS = new Map([
81
86
  ['TASK', 'objects'],
@@ -117,7 +122,13 @@ export const REFERENCE_PROPERTY_LIST = [
117
122
  // One target, three spellings. See the CORRECTED note above.
118
123
  { property: 'connectionId', collection: 'connectors' },
119
124
  { property: 'fromConnectionId', collection: 'connectors' },
120
- { property: 'connectorId', collection: 'connectors' },
125
+ // ...except on a `connectors[]` entry, where it is that connection's own platform identity rather
126
+ // than a reference to one. See `opaqueInCollections` on `ReferenceProperty`.
127
+ {
128
+ property: 'connectorId',
129
+ collection: 'connectors',
130
+ opaqueInCollections: ['connectors'],
131
+ },
121
132
  {
122
133
  property: 'entityId',
123
134
  tokenFormOnly: true,
@@ -146,12 +157,24 @@ export const REFERENCE_PROPERTY_LIST = [
146
157
  * in `entityId`, or `entityType: SELF`. That is a distinct answer from "a reference that does not
147
158
  * resolve", and collapsing the two is what puts diagnostics on correct files.
148
159
  */
149
- export function resolveReferenceKind(property, value, siblings) {
160
+ export function resolveReferenceKind(property, value, siblings,
161
+ /**
162
+ * The collection whose entry this property sits inside — `connectors`, `pullers`, `objects`, … — as the
163
+ * walker already tracks it. Optional so existing callers keep compiling; supplying it is what lets a
164
+ * property mean one thing in a step argument and another on a component of its own collection (FR-47).
165
+ */
166
+ enclosingCollection) {
150
167
  const entry = BY_NAME.get(property);
151
168
  if (!entry)
152
169
  return undefined;
153
170
  if (entry.tokenFormOnly && !isTokenForm(value))
154
171
  return undefined;
172
+ // Checked BEFORE the discriminator: position decides whether there is a reference at all, and only then
173
+ // does anything ask what it points into.
174
+ if (enclosingCollection !== undefined &&
175
+ entry.opaqueInCollections?.includes(enclosingCollection)) {
176
+ return undefined;
177
+ }
155
178
  if (!entry.discriminator) {
156
179
  return {
157
180
  property,
@@ -278,4 +301,68 @@ export const COLLECTIONS_KEYED_BY_REFERENCE = new Map([
278
301
  ]);
279
302
  /** The property name reported for a reference carried by a component's own key. */
280
303
  export const KEY_REFERENCE_PROPERTY = '(key)';
304
+ /**
305
+ * The connector a connection names — `connectorId` first, `providerId` second (FR-1, AD-24).
306
+ *
307
+ * The read order exists in four places: `BaseStepExecutor` (untyped), `ConnectorDefinition.ResolvedConnectorId`
308
+ * (typed), `WebhookPartitioner` (via the accessor) and — found missing by the Epic 1 review — the CLI's task
309
+ * tooling. FR-1 says *every* runtime path, and the CLI reading only the legacy spelling meant a
310
+ * `connectorId`-only connection, exactly what FR-3's rename produces at scale, hard-stopped task generation
311
+ * with *"Connector undefined not found"*.
312
+ *
313
+ * Blank counts as absent, matching the untyped path: `Guid.Empty` has no equivalent here, but an empty string
314
+ * does, and a half-written `connectorId: ""` must not beat a real legacy value.
315
+ */
316
+ export function resolvedConnectorIdOf(connection) {
317
+ const usable = (value) => {
318
+ const text = typeof value === 'string'
319
+ ? value
320
+ : typeof value === 'number'
321
+ ? String(value)
322
+ : undefined;
323
+ if (text === undefined || text.trim() === '')
324
+ return undefined;
325
+ // All-zeros counts as absent, matching `ConnectorIdentity.IsDeclared` in C#. The Epic 1 review found the
326
+ // two sides disagreeing about exactly this literal.
327
+ return text.trim() === '00000000-0000-0000-0000-000000000000'
328
+ ? undefined
329
+ : text;
330
+ };
331
+ return usable(connection?.connectorId) ?? usable(connection?.providerId);
332
+ }
333
+ /**
334
+ * A connector identity that is written but cannot be used (FR-9, Story 2.1).
335
+ *
336
+ * "Well formed" means a GUID. Not a name, not a slug, not a URL — the platform's connector registry is keyed by
337
+ * GUID, so anything else cannot resolve however plausible it looks.
338
+ *
339
+ * ⛔ ONE definition, deliberately. The same rule is expressed as a `pattern` in the shipped connection schema
340
+ * and as `ConnectorIdentity` in C#, and Epic 1's review found what happens when a rule this small gets written
341
+ * three times: the copies disagreed about an all-zeros GUID and nobody noticed, because the disagreeing input
342
+ * was the one case no suite covered. The schema, the rule and the runtime must answer the same question the
343
+ * same way.
344
+ *
345
+ * A compose-time TOKEN is not judged here. In composed output an unresolved `**Token**` means the VARIABLE
346
+ * failed to resolve, which `VAR-1` already reports — and two findings for one cause is how a Problems panel
347
+ * stops being read.
348
+ */
349
+ const GUID = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
350
+ /**
351
+ * An identity that is STILL a token after composition — the variable failed, and `VAR-1` owns that.
352
+ *
353
+ * ⛔ A NAME for `isTokenForm`, not a second implementation. It shipped as a byte-identical copy of the regex
354
+ * 350 lines above its original, in the file whose own docstring says *"ONE definition, deliberately … Epic 1's
355
+ * review found what happens when a rule this small gets written three times."* Found by the Epic 2 review; kept
356
+ * as an alias rather than deleted because the two names say different things at their call sites — one asks
357
+ * "is this the shape a reference resolves in", the other "did substitution fail here".
358
+ */
359
+ export const isUnresolvedToken = isTokenForm;
360
+ export function isWellFormedConnectorIdentity(value) {
361
+ const trimmed = value.trim();
362
+ if (!GUID.test(trimmed))
363
+ return false;
364
+ // All-zeros is what an undeclared identity deserialises to on the typed side. It parses as a GUID and names
365
+ // no connector, so it is "absent" rather than "malformed" — `resolvedConnectorIdOf` already declines it.
366
+ return trimmed !== '00000000-0000-0000-0000-000000000000';
367
+ }
281
368
  //# sourceMappingURL=references.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"references.js","sourceRoot":"","sources":["../src/references.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"references.js","sourceRoot":"","sources":["../src/references.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beehexa/hexasync-template-model",
3
- "version": "2608.8.3",
3
+ "version": "2608.15.1",
4
4
  "description": "Domain types for HexaSync templates. No behaviour.",
5
5
  "license": "SEE LICENSE IN ../../LICENSE",
6
6
  "type": "module",