@issuegraph/viewer 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,7 +5,7 @@ Render an [Issuegraph](https://github.com/autnmy/issuegraph) document as a **wor
5
5
  The innermost UI layer, and the whole of its contract:
6
6
 
7
7
  ```
8
- in { issues, edges, order } + a projection choice
8
+ in { issues, edges, order, cycles } + a projection choice
9
9
  out onSelect, onHover
10
10
  never fetching, mutation, auth, persistence, or a host's vocabulary
11
11
  ```
@@ -49,12 +49,15 @@ const document = {
49
49
  slots: [{ rank: 1, lead: '102', members: ['102'], ready: true, holds: [] }],
50
50
  excluded: [{ key: '106', canonical: '105', reason: 'duplicate-of' }],
51
51
  },
52
+ cycles: [],
52
53
  };
53
54
  ```
54
55
 
55
56
  **The order is an input, never something this computes.** `@issuegraph/derive` owns the derivation; a second implementation here would be a mirror whose input space drifts. Everything the viewer draws was given to it — including titles and deep links, because knowing a tracker's URL shape is exactly the knowledge this layer must not carry.
56
57
 
57
- `normalizeDocument` never throws. A hand-built document is untrusted input, so a dangling edge is dropped with a diagnostic rather than taking the render down.
58
+ **So is the cycle answer.** `cycles` is the `blocked-by` cycles the document contains, as the host's reader found them — a host fed by [`@issuegraph/reader`](../reader) passes `Model.cycles` verbatim, and a hand-built document passes `[]`. The graph refusal's `cycle` badge on a component capsule is that answer relayed, never a walk over the edges here: this document carries only the edges it can draw (a `together-with` the order does not group is dropped), so a local walk is a picture of the graph, not the graph, and it disagreed with the reader's on a cycle running through a together unit while both were on one screen. It is required rather than optional because a badge that is simply absent reads as "no cycle"; `[]` says none, and omission is a type error. A member the document does not carry is dropped from the cycle with a diagnostic.
59
+
60
+ `normalizeDocument` never throws on a document of the declared shape. A hand-built document is untrusted input, so a dangling edge is dropped with a diagnostic rather than taking the render down. A missing field is not a document: `order` absent has always thrown, and `cycles` absent throws the same way — a plain-JavaScript host migrating from `0.1.x` adds the field.
58
61
 
59
62
  **A deep link is checked, not just escaped.** `url` is the one field that becomes an executable surface in the DOM, so only `http:`, `https:`, `mailto:` and relative values are linked — a `javascript:` or `data:` value is dropped with a diagnostic. Escaping the attribute would not have stopped it.
60
63
 
@@ -66,12 +69,14 @@ const document = {
66
69
  | `graph` | what surrounds this issue — the spine with gutters and arcs. Bounded; see below. |
67
70
  | `tree` | where this work came from — the `decomposed-from` hierarchy. |
68
71
 
69
- **Held slots keep their position.** A hold the graph itself imposes renders *inline at the rank the work would have taken*, with `—` for the rank and a dashed station, because "why isn't my P1 running" has to be answerable in place. A hold the runner or tracker imposes is not a fact about the work, earns no rank slot, and collapses into a footer group with duplicates.
72
+ **Held slots keep their position.** A hold the graph itself imposes renders *inline at the rank the work would have taken*, with `—` for the rank and a dashed station, because "why isn't my P1 running" has to be answerable in place. A hold the runner or tracker imposes is not a fact about the work, earns no rank slot, and collapses into a footer group with duplicates. A hold's optional `code` and `subject` — the reader's machine-readable cause and the issue it names — are published as `data-code` and `data-subject` beside `data-family`, and omitted rather than emptied when the host stated neither; the viewer interprets neither and renders `reason` verbatim as before.
70
73
 
71
74
  **The rail sits on the canvas, not above it.** Ranks and readiness stations are HTML — SVG text is not selectable, not reflowable and announces poorly — but they are the labels *for* the spine nodes, so each row is positioned at the coordinates the layout computed for its own node. One stage carries both at the layout's own size, so one SVG unit is one CSS pixel and the two cannot drift; it scrolls rather than shrinking, because shrinking would silently break that alignment.
72
75
 
73
76
  **The graph refuses rather than degrades.** Past 60 nodes it stops drawing and shows connected components as capsules — size, blocking count, cycle flag, chain depth — and past 300 it shows clusters only. Each refusal names the next move. A refusal with a route forward reads as competence; a hairball reads as a bug.
74
77
 
78
+ **A row's badges are budgeted; the order is not.** The linear and tree projections draw every row at any size — that is the promise the refusal routes a reader to — so what they bound is the relationships *per row*: past `ROW_BADGE_BUDGET` (12) a row draws the first twelve in the format's field order, `blocked-by` first, and one `+N more relationships` chip carrying `data-omitted`, its name in its visible text because ARIA prohibits naming a generic span. Nothing is cut silently, and the chip carries no edge identity because it names no single edge; an omitted edge is still selectable, since the drawn-check answers from the document before it consults the markup.
79
+
75
80
  ## The edge grammar
76
81
 
77
82
  Every relationship is separable on **four** channels — dash, terminal marker, glyph, and hue — so removing colour entirely leaves all five distinguishable. That is asserted as a property of the table, not claimed about the rendering.
@@ -8,14 +8,27 @@
8
8
  * competence; a hairball reads as a bug.
9
9
  *
10
10
  * Components are undirected — every relationship connects, whatever its
11
- * direction — while the depth and cycle questions are asked of `blocked-by`
12
- * alone, because that is the only field that orders anything.
11
+ * direction — while the depth question is asked of `blocked-by` alone, because
12
+ * that is the only field that orders anything.
13
+ *
14
+ * THE CYCLE QUESTION IS NOT ASKED HERE AT ALL. It is answered by the host —
15
+ * `ViewerDocument.cycles`, the reader's own §6.6 stuck groups — and this module
16
+ * only reads which components those cycles touch. It used to walk the edges for
17
+ * the answer itself, and that walk disagreed with the host's on a cycle running
18
+ * through a together unit: the reader contracts a unit to one vertex and this
19
+ * document does not even carry every together edge, so the two were bound to
20
+ * differ, and both were on one screen. One answer, given, is the rule this
21
+ * package already applies to the order; the cycle badge follows it.
13
22
  */
14
23
  import type { NormalizedDocument } from './document.ts';
15
24
  export interface Cluster {
16
25
  /** Members in the document's own key order, so the output is deterministic. */
17
26
  readonly members: readonly string[];
18
27
  readonly blockedByEdges: number;
28
+ /**
29
+ * Whether the host's `cycles` name any member of this component. The host's
30
+ * answer, relayed — never derived from the edges here.
31
+ */
19
32
  readonly hasCycle: boolean;
20
33
  /** The longest `blocked-by` chain, in edges. `0` when nothing blocks. */
21
34
  readonly chainDepth: number;
@@ -1 +1 @@
1
- {"version":3,"file":"clusters.d.ts","sourceRoot":"","sources":["../src/clusters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,WAAW,OAAO;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAkID,kFAAkF;AAClF,wBAAgB,UAAU,CACxB,QAAQ,EAAE,kBAAkB;AAC5B;;;;;;;GAOG;AACH,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAC1B,SAAS,OAAO,EAAE,CAyCpB"}
1
+ {"version":3,"file":"clusters.d.ts","sourceRoot":"","sources":["../src/clusters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,WAAW,OAAO;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAuID,kFAAkF;AAClF,wBAAgB,UAAU,CACxB,QAAQ,EAAE,kBAAkB;AAC5B;;;;;;;GAOG;AACH,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAC1B,SAAS,OAAO,EAAE,CAiDpB"}
package/dist/clusters.js CHANGED
@@ -8,8 +8,17 @@
8
8
  * competence; a hairball reads as a bug.
9
9
  *
10
10
  * Components are undirected — every relationship connects, whatever its
11
- * direction — while the depth and cycle questions are asked of `blocked-by`
12
- * alone, because that is the only field that orders anything.
11
+ * direction — while the depth question is asked of `blocked-by` alone, because
12
+ * that is the only field that orders anything.
13
+ *
14
+ * THE CYCLE QUESTION IS NOT ASKED HERE AT ALL. It is answered by the host —
15
+ * `ViewerDocument.cycles`, the reader's own §6.6 stuck groups — and this module
16
+ * only reads which components those cycles touch. It used to walk the edges for
17
+ * the answer itself, and that walk disagreed with the host's on a cycle running
18
+ * through a together unit: the reader contracts a unit to one vertex and this
19
+ * document does not even carry every together edge, so the two were bound to
20
+ * differ, and both were on one screen. One answer, given, is the rule this
21
+ * package already applies to the order; the cycle badge follows it.
13
22
  */
14
23
  function connectedComponents(document, drawn) {
15
24
  const adjacency = new Map();
@@ -67,19 +76,25 @@ function connectedComponents(document, drawn) {
67
76
  return components;
68
77
  }
69
78
  /**
70
- * The longest `blocked-by` chain inside one component, and whether that
71
- * component contains a cycle.
79
+ * The longest `blocked-by` chain inside one component, in edges.
72
80
  *
73
81
  * A cycle makes "longest chain" undefined, so the walk reports the depth it
74
- * reached over the acyclic part and says a cycle exists rather than looping or
75
- * inventing a number. Both facts are useful to a reader; a hang is not.
82
+ * reached over the acyclic part rather than looping or inventing a number.
83
+ *
84
+ * IT MEETS BACK-EDGES AND PUBLISHES NOTHING ABOUT THEM. Skipping the edge that
85
+ * closes a loop is what makes this walk TERMINATE and its number finite; it is
86
+ * not a cycle answer, and it must not be read as one — whether a component
87
+ * contains a cycle is the host's `cycles`, read in `clustersOf` below. A raw
88
+ * loop this walk steps over (through a closed issue, say) can be one the
89
+ * reader does not report, and a stuck unit the reader does report can be one
90
+ * this walk cannot see. Two answers to one question is the defect this module
91
+ * was rewritten to remove.
76
92
  */
77
- function depthAndCycle(members, blockedBy) {
93
+ function chainDepthOf(members, blockedBy) {
78
94
  const memo = new Map();
79
95
  const onPath = new Set();
80
- let hasCycle = false;
81
96
  // The edges the discovery pass refused to follow, keyed `from\u0000to` so a
82
- // cycle through one member does not suppress that member's other edges.
97
+ // loop through one member does not suppress that member's other edges.
83
98
  const backEdges = new Set();
84
99
  // ITERATIVE, NOT RECURSIVE. This runs on the graph's REFUSAL path, which is
85
100
  // reached precisely because the component is large — so a per-node call frame
@@ -100,12 +115,11 @@ function depthAndCycle(members, blockedBy) {
100
115
  onPath.add(frame.key);
101
116
  for (const next of blockedBy.get(frame.key) ?? []) {
102
117
  if (onPath.has(next)) {
103
- hasCycle = true;
104
- // REMEMBER WHICH EDGE CLOSED THE CYCLE, not just that one did. The
105
- // collecting pass below walks the same adjacency and has no other
106
- // way to tell a back-edge from an ordinary one, so it counted this
107
- // edge against a memo that was never written — `?? 0` — and every
108
- // cycle came out one edge too long. Measured: a two-node cycle
118
+ // REMEMBER WHICH EDGE CLOSED THE LOOP. The collecting pass below
119
+ // walks the same adjacency and has no other way to tell a back-edge
120
+ // from an ordinary one, so it counted this edge against a memo that
121
+ // was never written `?? 0` and every loop came out one edge too
122
+ // long. Measured: a two-node cycle
109
123
  // published `chainDepth: 2` beside its cycle badge when the longest
110
124
  // acyclic chain through it is one edge, and a three-node cycle
111
125
  // published 3 for a chain of two.
@@ -135,7 +149,7 @@ function depthAndCycle(members, blockedBy) {
135
149
  let depth = 0;
136
150
  for (const member of members)
137
151
  depth = Math.max(depth, memo.get(member) ?? 0);
138
- return { depth, hasCycle };
152
+ return depth;
139
153
  }
140
154
  /** Every component the document declares, largest first, then by first member. */
141
155
  export function clustersOf(document,
@@ -158,6 +172,12 @@ drawn) {
158
172
  else
159
173
  existing.push(edge.to);
160
174
  }
175
+ // Every issue the host reports as inside a `blocked-by` cycle. Read off the
176
+ // document, which already narrowed the host's cycles to the keys it carries.
177
+ const stuck = new Set();
178
+ for (const cycle of document.cycles)
179
+ for (const member of cycle)
180
+ stuck.add(member);
161
181
  const clusters = connectedComponents(document, drawn).map((members) => {
162
182
  // SUMMED OFF THE ADJACENCY ABOVE, NOT RE-FILTERED PER COMPONENT. This used to
163
183
  // scan the WHOLE edge array once per component, which is quadratic in exactly
@@ -174,8 +194,11 @@ drawn) {
174
194
  let blockedByEdges = 0;
175
195
  for (const member of members)
176
196
  blockedByEdges += blockedBy.get(member)?.length ?? 0;
177
- const { depth, hasCycle } = depthAndCycle(members, blockedBy);
178
- return { members, blockedByEdges, hasCycle, chainDepth: depth };
197
+ // THE HOST'S ANSWER, LOOKED UP never re-derived. A cycle the reader
198
+ // found touches this component when any member of it is a member here; the
199
+ // set is built once above, so the whole pass stays linear.
200
+ const hasCycle = members.some((member) => stuck.has(member));
201
+ return { members, blockedByEdges, hasCycle, chainDepth: chainDepthOf(members, blockedBy) };
179
202
  });
180
203
  // CODE UNITS, NOT `localeCompare`. This package promises deterministic
181
204
  // rendering, and `localeCompare` without an explicit locale uses the RUNTIME's
@@ -1 +1 @@
1
- {"version":3,"file":"clusters.js","sourceRoot":"","sources":["../src/clusters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clusters.js","sourceRoot":"","sources":["../src/clusters.ts"],"names":[],"mappings":"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"}
@@ -14,10 +14,12 @@
14
14
  * source. The viewer derives no order, resolves no reference, and reads no
15
15
  * tracker — everything it draws was given to it.
16
16
  *
17
- * `normalizeDocument` is the one entry point. It never throws: a document
18
- * assembled by hand is untrusted input, not a contract, and a renderer that
19
- * dies on a dangling edge is worse than one that draws what it can and says
20
- * what it dropped.
17
+ * `normalizeDocument` is the one entry point. It never throws on a document of
18
+ * the declared shape: a document assembled by hand is untrusted input, not a
19
+ * contract, and a renderer that dies on a dangling edge is worse than one that
20
+ * draws what it can and says what it dropped. A MISSING FIELD IS OUTSIDE THAT
21
+ * PROMISE — `order` absent has always thrown, and `cycles` absent throws the
22
+ * same way — because a document without one is a type error, not a document.
21
23
  */
22
24
  import { type EdgeField } from '@issuegraph/core';
23
25
  /**
@@ -68,6 +70,23 @@ export interface ViewerHold {
68
70
  readonly family: HoldFamily;
69
71
  /** Human-readable, host-authored. The viewer renders it verbatim. */
70
72
  readonly reason: string;
73
+ /**
74
+ * The machine-readable cause, host-authored like `reason`. A host fed by
75
+ * `@issuegraph/reader` supplies its `ReadinessHold.code`; the viewer
76
+ * publishes whatever it is given as `data-code` and interprets none of it,
77
+ * because the vocabulary is the reader's and this layer restates nothing.
78
+ * OPTIONAL BY DESIGN: a hold the tracker or runner imposes has no reader
79
+ * code, and inventing one would be a second vocabulary.
80
+ */
81
+ readonly code?: string | undefined;
82
+ /**
83
+ * The issue the cause names — the open blocker, the claimed peer, the unready
84
+ * member — when it names one, as the document's own key for it. Published as
85
+ * `data-subject` so a host can turn the sentence into a link or a filter
86
+ * facet; the viewer draws it as text and links nothing (it has no URL shape
87
+ * to link with — see `ViewerIssue.url`).
88
+ */
89
+ readonly subject?: string | undefined;
71
90
  }
72
91
  /** One issue the document knows about. */
73
92
  export interface ViewerIssue {
@@ -137,11 +156,34 @@ export interface ViewerOrder {
137
156
  readonly slots: readonly ViewerSlot[];
138
157
  readonly excluded: readonly ViewerExclusion[];
139
158
  }
159
+ /**
160
+ * One `blocked-by` cycle, as the host's reader found it: every member key, in
161
+ * whatever order the host supplied. A cycle of one is a self-loop.
162
+ *
163
+ * ONCE NORMALISED IT IS THE MEMBERS THIS DOCUMENT CARRIES, which need not be
164
+ * a closed ring: a document that is a slice of the graph — a window, a focus
165
+ * — keeps the members it draws and drops the rest, exactly as it does for the
166
+ * edges. A cycle is still a stuck group, and a member of one is still stuck.
167
+ */
168
+ export type ViewerCycle = readonly string[];
140
169
  /** Everything the viewer draws. */
141
170
  export interface ViewerDocument {
142
171
  readonly issues: readonly ViewerIssue[];
143
172
  readonly edges: readonly ViewerEdge[];
144
173
  readonly order: ViewerOrder;
174
+ /**
175
+ * The `blocked-by` cycles the document contains, AS THE HOST DERIVED THEM.
176
+ * A host fed by `@issuegraph/reader` passes `Model.cycles` verbatim — the
177
+ * spec's §6.6 stuck groups; a hand-assembled document passes `[]`.
178
+ *
179
+ * REQUIRED, LIKE `order`, AND FOR THE SAME REASON: the viewer derives no
180
+ * cycle, as it derives no order — the edges here are the ones it can draw,
181
+ * not the graph, so a walk over them is a mirror whose input space drifts
182
+ * (see `clusters.ts`). And a badge that is simply absent reads as "no
183
+ * cycle", so an answer a host forgot to pass must not render as one: `[]`
184
+ * says none, and omission is a type error.
185
+ */
186
+ readonly cycles: readonly ViewerCycle[];
145
187
  }
146
188
  /**
147
189
  * A normalised document plus an index over it. The index exists so no
@@ -152,6 +194,12 @@ export interface NormalizedDocument {
152
194
  readonly issues: readonly ViewerIssue[];
153
195
  readonly edges: readonly ViewerEdge[];
154
196
  readonly order: ViewerOrder;
197
+ /**
198
+ * The host's cycles, narrowed to the keys this document carries. Every
199
+ * member here is present in `byKey`; a cycle none of whose members are is
200
+ * not here at all.
201
+ */
202
+ readonly cycles: readonly ViewerCycle[];
155
203
  /** Key -> issue. Every edge and slot member below is present here. */
156
204
  readonly byKey: ReadonlyMap<string, ViewerIssue>;
157
205
  /** Key -> the edges touching it, in document order. */
@@ -183,8 +231,9 @@ export interface NormalizeResult {
183
231
  /**
184
232
  * Read a document into the shape every projection consumes.
185
233
  *
186
- * Deterministic and total: the same input always produces the same output, and
187
- * no input produces a throw. Call it once per render and pass the result down.
234
+ * Deterministic and total over the declared shape: the same input always
235
+ * produces the same output, and no document produces a throw. Call it once per
236
+ * render and pass the result down.
188
237
  */
189
238
  export declare function normalizeDocument(input: ViewerDocument): NormalizeResult;
190
239
  //# sourceMappingURL=document.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"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"}
package/dist/document.js CHANGED
@@ -14,10 +14,12 @@
14
14
  * source. The viewer derives no order, resolves no reference, and reads no
15
15
  * tracker — everything it draws was given to it.
16
16
  *
17
- * `normalizeDocument` is the one entry point. It never throws: a document
18
- * assembled by hand is untrusted input, not a contract, and a renderer that
19
- * dies on a dangling edge is worse than one that draws what it can and says
20
- * what it dropped.
17
+ * `normalizeDocument` is the one entry point. It never throws on a document of
18
+ * the declared shape: a document assembled by hand is untrusted input, not a
19
+ * contract, and a renderer that dies on a dangling edge is worse than one that
20
+ * draws what it can and says what it dropped. A MISSING FIELD IS OUTSIDE THAT
21
+ * PROMISE — `order` absent has always thrown, and `cycles` absent throws the
22
+ * same way — because a document without one is a type error, not a document.
21
23
  */
22
24
  import { EDGE_CARDINALITY, isEdgeField, isSymmetricEdgeField, } from '@issuegraph/core';
23
25
  /**
@@ -250,11 +252,59 @@ function normalizeSlots(slots, byKey, diagnostics) {
250
252
  }
251
253
  return { kept, placed };
252
254
  }
255
+ /**
256
+ * A cycle survives with the members this document carries; an unknown member
257
+ * is dropped from it with a diagnostic, and a cycle left with no member is
258
+ * dropped whole. The host's ORDER of members is kept — it is the reader's own
259
+ * sorted order, and re-sorting it here would be a second opinion about a
260
+ * value this layer only relays.
261
+ *
262
+ * NOT VALIDATED AGAINST THE EDGES. The host's reader saw the whole graph; this
263
+ * document may carry a slice of it, so a cycle whose closing edge is absent
264
+ * here is still a cycle the reader found, and refusing it would make the badge
265
+ * depend on which edges the host chose to draw — the drift the field exists to
266
+ * remove.
267
+ */
268
+ function normalizeCycles(cycles, byKey, diagnostics) {
269
+ const kept = [];
270
+ cycles.forEach((cycle, index) => {
271
+ // AN EMPTY CYCLE IS THE HOST'S MISTAKE, NOT THIS DOCUMENT'S. The reader never
272
+ // emits one — a stuck group has at least one member — so it is reported as
273
+ // what it is rather than as a slice that happened to carry none of it.
274
+ if (cycle.length === 0) {
275
+ diagnostics.push(`cycle at index ${String(index)} is empty and was dropped`);
276
+ return;
277
+ }
278
+ // A MEMBER IS NAMED ONCE PER CYCLE, and the dedupe runs BEFORE the carry
279
+ // test so a repeated unknown key is reported once. A hand-built cycle can
280
+ // repeat a key, and the count `clustersOf` derives from it would then read
281
+ // one issue as two. First occurrence wins, as everywhere else in this reader.
282
+ const seen = new Set();
283
+ const members = cycle.filter((member) => {
284
+ if (seen.has(member)) {
285
+ diagnostics.push(`cycle member ${member} is named twice in one cycle; the repeat was dropped`);
286
+ return false;
287
+ }
288
+ seen.add(member);
289
+ if (byKey.has(member))
290
+ return true;
291
+ diagnostics.push(`cycle member ${member} is not an issue in this document and was dropped from the cycle`);
292
+ return false;
293
+ });
294
+ if (members.length === 0) {
295
+ diagnostics.push(`cycle at index ${String(index)} names no issue in this document and was dropped`);
296
+ return;
297
+ }
298
+ kept.push(Object.freeze(members));
299
+ });
300
+ return kept;
301
+ }
253
302
  /**
254
303
  * Read a document into the shape every projection consumes.
255
304
  *
256
- * Deterministic and total: the same input always produces the same output, and
257
- * no input produces a throw. Call it once per render and pass the result down.
305
+ * Deterministic and total over the declared shape: the same input always
306
+ * produces the same output, and no document produces a throw. Call it once per
307
+ * render and pass the result down.
258
308
  */
259
309
  export function normalizeDocument(input) {
260
310
  const diagnostics = [];
@@ -292,11 +342,13 @@ export function normalizeDocument(input) {
292
342
  const isolated = issues
293
343
  .filter((issue) => !placed.has(issue.key) && (edgesOf.get(issue.key) ?? []).length === 0)
294
344
  .map((issue) => issue.key);
345
+ const cycles = normalizeCycles(input.cycles, byKey, diagnostics);
295
346
  return Object.freeze({
296
347
  document: Object.freeze({
297
348
  issues: Object.freeze(issues),
298
349
  edges: Object.freeze(edges),
299
350
  order: Object.freeze({ slots: Object.freeze(slots), excluded: Object.freeze(excluded) }),
351
+ cycles: Object.freeze(cycles),
300
352
  byKey,
301
353
  edgesOf,
302
354
  isolated: Object.freeze(isolated),
@@ -1 +1 @@
1
- {"version":3,"file":"document.js","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * The innermost layer of the Issuegraph UI, and the whole of its contract:
5
5
  *
6
- * in {issues, edges, order} + a projection choice
6
+ * in {issues, edges, order, cycles} + a projection choice
7
7
  * out onSelect, onHover
8
8
  * never fetching, mutation, auth, persistence, or a host's vocabulary
9
9
  *
@@ -26,13 +26,13 @@
26
26
  * README states the rule: what a sibling does not export gets exported
27
27
  * deliberately, never reached past. The alternative for each was a second
28
28
  * implementation out there: a second HTML escaper over untrusted document text,
29
- * and a second components/cycle/depth pass whose input space drifts from this
29
+ * and a second components/depth pass whose input space drifts from this
30
30
  * one. `svg`, `materialize` and the mount-side element types stay internal —
31
31
  * nothing owes them yet.
32
32
  *
33
33
  * @see https://github.com/autnmy/issuegraph/blob/main/SPEC.md
34
34
  */
35
- export type { HoldFamily, NormalizeResult, NormalizedDocument, RankProvenance, ViewerDocument, ViewerEdge, ViewerExclusion, ViewerHold, ViewerIssue, ViewerOrder, ViewerSlot, } from './document.ts';
35
+ export type { HoldFamily, NormalizeResult, NormalizedDocument, RankProvenance, ViewerCycle, ViewerDocument, ViewerEdge, ViewerExclusion, ViewerHold, ViewerIssue, ViewerOrder, ViewerSlot, } from './document.ts';
36
36
  export { normalizeDocument } from './document.ts';
37
37
  export type { Projection, Scene } from './scene.ts';
38
38
  export { KEY_ATTRIBUTE } from './scene.ts';
@@ -48,6 +48,7 @@ export { viewerStylesheet } from './styles.ts';
48
48
  export type { EdgeDash, EdgeTerminal, EdgeTreatment, OrderingEffect } from './vocabulary.ts';
49
49
  export { EDGE_TREATMENTS, dashArrayFor, treatmentFor } from './vocabulary.ts';
50
50
  export { CLUSTER_ONLY_BUDGET, GRAPH_NODE_BUDGET } from './projections/graph.ts';
51
+ export { ROW_BADGE_BUDGET } from './parts.ts';
51
52
  export type { Cluster } from './clusters.ts';
52
53
  export { clustersOf } from './clusters.ts';
53
54
  export type { AttrValue, ElementSpec, SpecChild } from './element.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,YAAY,EACV,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,UAAU,EACV,eAAe,EACf,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,GACX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,YAAY,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE9E,YAAY,EACV,UAAU,EACV,WAAW,EACX,KAAK,EACL,aAAa,EACb,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EACnB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,YAAY,EACV,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,cAAc,EACd,UAAU,EACV,eAAe,EACf,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,GACX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,YAAY,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE9E,YAAY,EACV,UAAU,EACV,WAAW,EACX,KAAK,EACL,aAAa,EACb,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EACnB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * The innermost layer of the Issuegraph UI, and the whole of its contract:
5
5
  *
6
- * in {issues, edges, order} + a projection choice
6
+ * in {issues, edges, order, cycles} + a projection choice
7
7
  * out onSelect, onHover
8
8
  * never fetching, mutation, auth, persistence, or a host's vocabulary
9
9
  *
@@ -26,7 +26,7 @@
26
26
  * README states the rule: what a sibling does not export gets exported
27
27
  * deliberately, never reached past. The alternative for each was a second
28
28
  * implementation out there: a second HTML escaper over untrusted document text,
29
- * and a second components/cycle/depth pass whose input space drifts from this
29
+ * and a second components/depth pass whose input space drifts from this
30
30
  * one. `svg`, `materialize` and the mount-side element types stay internal —
31
31
  * nothing owes them yet.
32
32
  *
@@ -41,6 +41,7 @@ export { resolveTheme, COLOR_TOKENS, METRIC_TOKENS, THEME_TOKENS, TYPE_TOKENS, d
41
41
  export { viewerStylesheet } from "./styles.js";
42
42
  export { EDGE_TREATMENTS, dashArrayFor, treatmentFor } from "./vocabulary.js";
43
43
  export { CLUSTER_ONLY_BUDGET, GRAPH_NODE_BUDGET } from "./projections/graph.js";
44
+ export { ROW_BADGE_BUDGET } from "./parts.js";
44
45
  export { clustersOf } from "./clusters.js";
45
46
  export { element, renderMarkup } from "./element.js";
46
47
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAeH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAS9E,OAAO,EAAE,YAAY,EACnB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGhF,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAgBH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAS9E,OAAO,EAAE,YAAY,EACnB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
package/dist/parts.d.ts CHANGED
@@ -31,8 +31,36 @@ export declare function identity(issue: ViewerIssue): ElementSpec;
31
31
  * dependent the urgency arrived through.
32
32
  */
33
33
  export declare function provenanceLine(provenance: RankProvenance | undefined): ElementSpec | null;
34
- /** One hold, rendered with the family it belongs to visible in the markup. */
34
+ /**
35
+ * One hold, rendered with the family it belongs to visible in the markup — and
36
+ * its cause and subject beside it when the host supplied them, so a host reads
37
+ * WHY off an attribute instead of matching the sentence. Omitted, never empty,
38
+ * when absent: `data-code=""` would claim a cause the host did not state.
39
+ */
35
40
  export declare function holdLine(hold: ViewerHold): ElementSpec;
41
+ /**
42
+ * How many relationship badges one row draws before the rest collapse into a
43
+ * count.
44
+ *
45
+ * THE ROW IS THE UNIT, NOT THE DOCUMENT. The graph refuses past a node budget
46
+ * because a canvas is a local instrument; the linear and tree projections are
47
+ * not — the refusal's own last sentence promises that the order list is
48
+ * complete at any size, so a document-level budget here would break the one
49
+ * promise the refusal routes a reader to. What grows without bound on a dense
50
+ * document is not the row count, which these projections already draw in
51
+ * full, but the relationships PER row: `blocked-by` is a list field, so a
52
+ * valid document of a few hundred nodes admits tens of thousands of edges and
53
+ * every one of them was badged on both endpoint rows. Capping per row bounds
54
+ * the total at rows × budget, which is proportionate to what is drawn anyway.
55
+ *
56
+ * Twelve is the size the graph's refusal already lists its components at, and
57
+ * for the same reason: past that many chips a row is a wall, not a summary,
58
+ * whatever the exact count. It is a separate constant rather than that one
59
+ * imported, because this file sits beneath the projections and the refusal's
60
+ * limit is private to `graph.ts`; the two agree by choice, not by reference.
61
+ * Exported so a host reads it instead of restating it.
62
+ */
63
+ export declare const ROW_BADGE_BUDGET = 12;
36
64
  /**
37
65
  * Every relationship touching a ROW, as badges in the format's own field order
38
66
  * — so two rows with the same relationships always read identically.
@@ -1 +1 @@
1
- {"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../src/parts.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,WAAW,EACX,UAAU,EACX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,cAAc,CAAC;AAIzD,mEAAmE;AACnE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEzD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAIzD;AAQD,wBAAgB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAOtD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAgBxD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,IAAI,CAuBzF;AAED,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAEtD;AAgDD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,GAAG,IAAI,CAoCpG;AAED,2EAA2E;AAC3E,wBAAgB,MAAM,IAAI,WAAW,CAWpC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,kBAAkB,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAQpF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,EAChH,OAAO,EAAE,CAAC,EACV,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,CAAC,CAKH;AAED,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAIhF;AAED,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAGhF;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAEvD"}
1
+ {"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../src/parts.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,WAAW,EACX,UAAU,EACX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,cAAc,CAAC;AAIzD,mEAAmE;AACnE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEzD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAIzD;AAQD,wBAAgB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAOtD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAgBxD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,IAAI,CAuBzF;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAWtD;AAgDD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,gBAAgB,KAAK,CAAC;AA0BnC;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,GAAG,IAAI,CAkDpG;AAED,2EAA2E;AAC3E,wBAAgB,MAAM,IAAI,WAAW,CAWpC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,kBAAkB,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAQpF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,EAChH,OAAO,EAAE,CAAC,EACV,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,CAAC,CAKH;AAED,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAIhF;AAED,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAGhF;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAEvD"}
package/dist/parts.js CHANGED
@@ -83,9 +83,19 @@ export function provenanceLine(provenance) {
83
83
  }
84
84
  }
85
85
  }
86
- /** One hold, rendered with the family it belongs to visible in the markup. */
86
+ /**
87
+ * One hold, rendered with the family it belongs to visible in the markup — and
88
+ * its cause and subject beside it when the host supplied them, so a host reads
89
+ * WHY off an attribute instead of matching the sentence. Omitted, never empty,
90
+ * when absent: `data-code=""` would claim a cause the host did not state.
91
+ */
87
92
  export function holdLine(hold) {
88
- return element('p', { class: 'ig-hold', 'data-family': hold.family }, [hold.reason]);
93
+ return element('p', {
94
+ class: 'ig-hold',
95
+ 'data-family': hold.family,
96
+ 'data-code': hold.code,
97
+ 'data-subject': hold.subject,
98
+ }, [hold.reason]);
89
99
  }
90
100
  /**
91
101
  * A badge naming one relationship, on all four channels at once.
@@ -128,6 +138,48 @@ function edgeBadge(field, edgeId, detail) {
128
138
  element('span', {}, [detail]),
129
139
  ]);
130
140
  }
141
+ /**
142
+ * How many relationship badges one row draws before the rest collapse into a
143
+ * count.
144
+ *
145
+ * THE ROW IS THE UNIT, NOT THE DOCUMENT. The graph refuses past a node budget
146
+ * because a canvas is a local instrument; the linear and tree projections are
147
+ * not — the refusal's own last sentence promises that the order list is
148
+ * complete at any size, so a document-level budget here would break the one
149
+ * promise the refusal routes a reader to. What grows without bound on a dense
150
+ * document is not the row count, which these projections already draw in
151
+ * full, but the relationships PER row: `blocked-by` is a list field, so a
152
+ * valid document of a few hundred nodes admits tens of thousands of edges and
153
+ * every one of them was badged on both endpoint rows. Capping per row bounds
154
+ * the total at rows × budget, which is proportionate to what is drawn anyway.
155
+ *
156
+ * Twelve is the size the graph's refusal already lists its components at, and
157
+ * for the same reason: past that many chips a row is a wall, not a summary,
158
+ * whatever the exact count. It is a separate constant rather than that one
159
+ * imported, because this file sits beneath the projections and the refusal's
160
+ * limit is private to `graph.ts`; the two agree by choice, not by reference.
161
+ * Exported so a host reads it instead of restating it.
162
+ */
163
+ export const ROW_BADGE_BUDGET = 12;
164
+ /**
165
+ * The chip a row draws in place of the badges past its budget.
166
+ *
167
+ * IT SAYS WHAT WAS OMITTED. A silent cut would leave a reader unable to tell
168
+ * a row with twelve relationships from one with three hundred — the same
169
+ * under-reporting the refusal declines to do for its component list. It
170
+ * carries NO edge identity: it names no single edge, so it must not enter the
171
+ * pointer set as if it did. An omitted edge stays selectable regardless —
172
+ * `mount`'s drawn-check answers from the document first for an edge id.
173
+ */
174
+ function overflowBadge(omitted) {
175
+ // THE WHOLE PHRASE IS THE VISIBLE TEXT, and there is no `aria-label`. A
176
+ // plain span has the generic role, on which ARIA prohibits naming, so an
177
+ // attribute name here may be ignored and the announcement would be a bare
178
+ // "+N more" with nothing saying what was left out. Visible text is the one
179
+ // name every reader gets; `title` stays as a tooltip only.
180
+ const noun = omitted === 1 ? 'relationship' : 'relationships';
181
+ return element('span', { class: 'ig-badge', 'data-omitted': omitted, title: `${String(omitted)} more ${noun} not shown` }, [`+${String(omitted)} more ${noun}`]);
182
+ }
131
183
  /**
132
184
  * Every relationship touching a ROW, as badges in the format's own field order
133
185
  * — so two rows with the same relationships always read identically.
@@ -144,6 +196,10 @@ function edgeBadge(field, edgeId, detail) {
144
196
  export function edgeBadges(document, keys) {
145
197
  const mine = new Set(keys);
146
198
  const badges = [];
199
+ // COUNTED PAST THE BUDGET, NOT BUILT. The walk still visits every edge so
200
+ // the chip can name how many it left out, but it materialises nothing for
201
+ // them — which is the whole saving on a row with thousands of relationships.
202
+ let omitted = 0;
147
203
  // ONE EDGE, ONE BADGE. Both endpoints of an intra-unit edge are members, so
148
204
  // it appears in two `edgesOf` entries and would otherwise render twice on the
149
205
  // row that owns both ends.
@@ -167,6 +223,15 @@ export function edgeBadges(document, keys) {
167
223
  if (seen.has(edgeId))
168
224
  continue;
169
225
  seen.add(edgeId);
226
+ // AFTER the dedupe, so the count is of edges and never of a unit's
227
+ // second `edgesOf` entry for the same edge. BEFORE the field loop
228
+ // reaches later fields, so the budget is spent in the format's own
229
+ // order: `blocked-by` first, because that is the relationship a
230
+ // reader asking "why is this held" is looking for.
231
+ if (badges.length >= ROW_BADGE_BUDGET) {
232
+ omitted += 1;
233
+ continue;
234
+ }
170
235
  const treatment = treatmentFor(field);
171
236
  // A symmetric edge states one fact whichever end you read it from, so it
172
237
  // is announced as one relationship rather than as two directions.
@@ -179,6 +244,8 @@ export function edgeBadges(document, keys) {
179
244
  }
180
245
  if (badges.length === 0)
181
246
  return null;
247
+ if (omitted > 0)
248
+ badges.push(overflowBadge(omitted));
182
249
  return element('span', { class: 'ig-badges' }, badges);
183
250
  }
184
251
  /** The legend. Rendered once per scene so the grammar is readable cold. */
package/dist/parts.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"parts.js","sourceRoot":"","sources":["../src/parts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parts.js","sourceRoot":"","sources":["../src/parts.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@issuegraph/viewer",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "Render an Issuegraph document as a work order — the ordered spine with readiness stations, the five edge treatments, and three projections. Rendering only: no fetching, no mutation, no auth, and every value themeable through CSS custom properties.",
5
5
  "keywords": [
6
6
  "issuegraph",