@toa.io/extensions.introspection 1.0.0-alpha.284 → 1.0.0-alpha.287

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/CHANGELOG.md +1 -419
  2. package/components/introspection.edges/manifest.toa.yaml +28 -30
  3. package/components/introspection.edges/migrations/0001-system-properties.yaml +14 -0
  4. package/components/introspection.edges/operations/merge.js +1 -1
  5. package/components/introspection.edges/source/merge.ts +3 -5
  6. package/components/introspection.edges/tsconfig.tsbuildinfo +1 -1
  7. package/components/introspection.edges/types/toa.d.ts +5 -5
  8. package/components/introspection.nodes/manifest.toa.yaml +16 -18
  9. package/components/introspection.nodes/migrations/0001-system-properties.yaml +14 -0
  10. package/components/introspection.nodes/operations/merge.js +1 -1
  11. package/components/introspection.nodes/source/merge.ts +2 -3
  12. package/components/introspection.nodes/tsconfig.tsbuildinfo +1 -1
  13. package/components/introspection.nodes/types/toa.d.ts +5 -5
  14. package/cucumber.mjs +3 -0
  15. package/features/site/index.html +6 -2
  16. package/features/steps/Map.ts +36 -25
  17. package/features/steps/UI.ts +20 -13
  18. package/features/steps/components/probe.discreet/operations/ping.js +1 -1
  19. package/features/steps/components/probe.quiet/operations/ping.js +1 -1
  20. package/features/steps/components/probe.source/manifest.toa.yaml +7 -8
  21. package/features/steps/components/probe.source/operations/crash.js +1 -1
  22. package/features/steps/components/probe.source/operations/fail.js +1 -1
  23. package/features/steps/components/probe.source/operations/relay.js +1 -1
  24. package/features/steps/components/probe.target/manifest.toa.yaml +5 -6
  25. package/features/steps/components/probe.target/operations/compute.js +1 -1
  26. package/features/steps/components/probe.target/operations/count.js +1 -1
  27. package/package.json +7 -7
  28. package/readme.md +7 -7
  29. package/schemas/annotation.cos.yaml +1 -1
  30. package/source/Composition.ts +6 -7
  31. package/source/Explorer.ts +2 -2
  32. package/source/Factory.ts +63 -29
  33. package/source/Reporter.ts +37 -38
  34. package/source/Tenant.ts +6 -7
  35. package/source/UI.ts +33 -32
  36. package/source/annotation.ts +30 -26
  37. package/source/const.ts +12 -0
  38. package/source/describe.ts +22 -16
  39. package/source/extension.ts +10 -6
  40. package/source/keys.ts +0 -0
  41. package/source/manifest.ts +2 -3
  42. package/source/model.ts +1 -1
  43. package/source/sample.ts +6 -8
  44. package/source/schemas.ts +4 -2
  45. package/transpiled/Composition.js.map +1 -1
  46. package/transpiled/Factory.d.ts +2 -1
  47. package/transpiled/Factory.js +27 -6
  48. package/transpiled/Factory.js.map +1 -1
  49. package/transpiled/Reporter.js +4 -1
  50. package/transpiled/Reporter.js.map +1 -1
  51. package/transpiled/Tenant.d.ts +1 -1
  52. package/transpiled/Tenant.js +1 -1
  53. package/transpiled/Tenant.js.map +1 -1
  54. package/transpiled/UI.js +2 -1
  55. package/transpiled/UI.js.map +1 -1
  56. package/transpiled/annotation.js.map +1 -1
  57. package/transpiled/const.d.ts +7 -0
  58. package/transpiled/const.js +10 -0
  59. package/transpiled/const.js.map +1 -1
  60. package/transpiled/describe.js +7 -7
  61. package/transpiled/describe.js.map +1 -1
  62. package/transpiled/extension.d.ts +3 -0
  63. package/transpiled/extension.js +6 -1
  64. package/transpiled/extension.js.map +1 -1
  65. package/transpiled/keys.js.map +1 -1
  66. package/transpiled/manifest.js.map +1 -1
  67. package/transpiled/model.d.ts +1 -1
  68. package/transpiled/sample.js.map +1 -1
  69. package/transpiled/schemas.js.map +1 -1
  70. package/tsconfig.tsbuildinfo +1 -1
  71. package/ui/dist/_app/immutable/chunks/{Dlhv3b0H.js → B0MLcJc_.js} +1 -1
  72. package/ui/dist/_app/immutable/chunks/{DAr41bMZ.js → CITltfg3.js} +2 -2
  73. package/ui/dist/_app/immutable/chunks/DRZKEYAh.js +1 -0
  74. package/ui/dist/_app/immutable/chunks/{DrodQShZ.js → DYJARrTz.js} +1 -1
  75. package/ui/dist/_app/immutable/chunks/{BiLog9K-.js → DeoAXouX.js} +1 -1
  76. package/ui/dist/_app/immutable/chunks/{Cw2o6qJ6.js → Dn4Y7fJx.js} +3 -3
  77. package/ui/dist/_app/immutable/chunks/RXI-NPRc.js +1 -0
  78. package/ui/dist/_app/immutable/chunks/{DZPtpe9B.js → eZwe85mS.js} +1 -1
  79. package/ui/dist/_app/immutable/chunks/{LxgdVMjV.js → nYZn_SsF.js} +1 -1
  80. package/ui/dist/_app/immutable/entry/{app.BZe_kjnw.js → app.pEBoNwdx.js} +2 -2
  81. package/ui/dist/_app/immutable/entry/start.CMxasWVg.js +1 -0
  82. package/ui/dist/_app/immutable/nodes/{0.Bp_WDf60.js → 0.CEBSADp-.js} +1 -1
  83. package/ui/dist/_app/immutable/nodes/{1.BhTvtURh.js → 1.BMwTq0Br.js} +1 -1
  84. package/ui/dist/_app/immutable/nodes/{2.DXBctzq4.js → 2.DptpRY6I.js} +1 -1
  85. package/ui/dist/_app/immutable/nodes/3.BcAS-pOw.js +1 -0
  86. package/ui/dist/_app/immutable/nodes/4.XrhtKTNL.js +1 -0
  87. package/ui/dist/_app/immutable/nodes/{5.Cvt5-NZz.js → 5.0v-ZuaBD.js} +1 -1
  88. package/ui/dist/_app/version.json +1 -1
  89. package/ui/dist/index.html +30 -25
  90. package/ui/dist/_app/immutable/chunks/D8JS8JwD.js +0 -1
  91. package/ui/dist/_app/immutable/chunks/ay3E8ALF.js +0 -1
  92. package/ui/dist/_app/immutable/entry/start.CeI0OHwu.js +0 -1
  93. package/ui/dist/_app/immutable/nodes/3.DJPUlbK5.js +0 -1
  94. package/ui/dist/_app/immutable/nodes/4.DTcjak2q.js +0 -1
package/CHANGELOG.md CHANGED
@@ -3,424 +3,6 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- # [1.0.0-alpha.284](https://github.com/toa-io/toa/compare/v1.0.0-alpha.283...v1.0.0-alpha.284) (2026-09-05)
7
-
8
- ### Bug Fixes
9
-
10
- * **build:** an operations directory holds modules and nothing else ([21a8ca1](https://github.com/toa-io/toa/commit/21a8ca19f1c45aef6cbb443ada0a909d325e76e8))
11
-
12
- ### Features
13
-
14
- * an operation states what it is ([b5e2f66](https://github.com/toa-io/toa/commit/b5e2f66c8bf67924e2eaaaa11f283dfb4d810981))
15
- * **cadence:** calls a component makes to itself, and calls it puts off ([8bbde5f](https://github.com/toa-io/toa/commit/8bbde5fc89e8e5549d5aa2bfcddb1beec0871565))
16
-
17
-
18
- # [1.0.0-alpha.283](https://github.com/toa-io/toa/compare/v1.0.0-alpha.282...v1.0.0-alpha.283) (2026-09-04)
19
-
20
- ### Bug Fixes
21
-
22
- * **cli:** an assignment hands back the new state, not nothing ([91304e9](https://github.com/toa-io/toa/commit/91304e9e9a3bba5933b7421b7a0ffff0c2e47795))
23
- * **exposition:** declare the errors the built-in components return ([27200c3](https://github.com/toa-io/toa/commit/27200c348ab09068d58c52c3e83208cb29cd7290))
24
-
25
- ### Features
26
-
27
- * **cli:** a type module is declarations, so it sits beside a component's source ([ca755d9](https://github.com/toa-io/toa/commit/ca755d93d1a04b7697dd0dd12eb59e5b6e2a71d1))
28
- * **cli:** the built-in components ship types generated from their manifests ([bd7db9e](https://github.com/toa-io/toa/commit/bd7db9e88e46c1060223761898932239127f389a))
29
-
30
-
31
- # [1.0.0-alpha.282](https://github.com/toa-io/toa/compare/v1.0.0-alpha.281...v1.0.0-alpha.282) (2026-09-03)
32
-
33
- ### Bug Fixes
34
-
35
- * **boot:** declare host, and build extensions with it in the step definitions ([915d957](https://github.com/toa-io/toa/commit/915d9571823358f8fca6fe19ef3aabd1b62e5605))
36
-
37
- ### Features
38
-
39
- * **core:** a Host for extensions ([6315eac](https://github.com/toa-io/toa/commit/6315eac1e9fb05be472272de06385c54ad5934ce))
40
-
41
-
42
- # [1.0.0-alpha.281](https://github.com/toa-io/toa/compare/v1.0.0-alpha.280...v1.0.0-alpha.281) (2026-09-03)
43
-
44
- ### Bug Fixes
45
-
46
- * **deps:** state the cookie bump where npm can resolve it ([11fcdf8](https://github.com/toa-io/toa/commit/11fcdf874ee33107901b5c06435ab10fba64870f))
47
-
48
-
49
- # [1.0.0-alpha.280](https://github.com/toa-io/toa/compare/v1.0.0-alpha.279...v1.0.0-alpha.280) (2026-09-03)
50
-
51
- ### Bug Fixes
52
-
53
- * **deps:** update cookie in UI lockfiles ([d32106b](https://github.com/toa-io/toa/commit/d32106be40728156e82858f37b4d04163d1e1652))
54
-
55
-
56
- # [1.0.0-alpha.278](https://github.com/toa-io/toa/compare/v1.0.0-alpha.277...v1.0.0-alpha.278) (2026-09-03)
6
+ # [1.0.0-alpha.287](https://github.com/toa-io/toa/compare/v1.0.0-alpha.286...v1.0.0-alpha.287) (2026-09-06)
57
7
 
58
8
  **Note:** Version bump only for package @toa.io/extensions.introspection
59
-
60
-
61
-
62
-
63
-
64
- # [1.0.0-alpha.277](https://github.com/toa-io/toa/compare/v1.0.0-alpha.276...v1.0.0-alpha.277) (2026-09-03)
65
-
66
- ### Bug Fixes
67
-
68
- * drop the build output that landed beside the sources ([a724f69](https://github.com/toa-io/toa/commit/a724f6921190e5c9d945e33c6035bb12d832e5c8))
69
- * settle what the module loader made asynchronous ([d4ab9df](https://github.com/toa-io/toa/commit/d4ab9dfb09e382da311dba08f52214e7645f4a6c))
70
-
71
-
72
- # [1.0.0-alpha.275](https://github.com/toa-io/toa/compare/v1.0.0-alpha.274...v1.0.0-alpha.275) (2026-09-02)
73
-
74
-
75
- ### Bug Fixes
76
-
77
- * **configuration:** ship the component's code and the built page ([6ffe988](https://github.com/toa-io/toa/commit/6ffe988a9e67025c114e74ba94665b28a2cafaa1))
78
- * **introspection:** draw a band to the width of the map ([b70650b](https://github.com/toa-io/toa/commit/b70650b0c91ac49945e887b30d1953836814226b))
79
- * **introspection:** keep a sideways scroll off the browser's back gesture ([419e012](https://github.com/toa-io/toa/commit/419e012ce093bcd0429dc93fe457bbd964cfc11c))
80
-
81
-
82
- ### Features
83
-
84
- * **ui:** give both consoles a favicon ([27d3881](https://github.com/toa-io/toa/commit/27d3881eda10e59dc4c9c5ef38c2a58b71e1448d))
85
- * **ui:** leave signing out to its icon ([a82fbab](https://github.com/toa-io/toa/commit/a82fbab513706436254348a5e35115dc3721873f))
86
-
87
-
88
-
89
-
90
-
91
- # [1.0.0-alpha.274](https://github.com/toa-io/toa/compare/v1.0.0-alpha.273...v1.0.0-alpha.274) (2026-09-02)
92
-
93
-
94
- * Configuration is served by a component, followed live, and kept per epoch (#1017) ([b05997d](https://github.com/toa-io/toa/commit/b05997d3adb784f238a222cb46878b23859339a2)), closes [#1017](https://github.com/toa-io/toa/issues/1017)
95
-
96
-
97
- ### BREAKING CHANGES
98
-
99
- * a secret configuration value is an object, not a string;
100
- read it with `unwrap()`.
101
-
102
- Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
103
-
104
- * test(configuration): wait for the second round rather than assume it
105
-
106
- Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
107
-
108
- * refactor(configuration)!: read a secret with its own unwrap
109
-
110
- Component code depends on no Toa package, so a secret is read as
111
- `context.configuration.apiKey.unwrap()` and the helper in `@toa.io/generic`
112
- goes. A value a component reads as a secret is therefore given as a reference:
113
- `identity.basic` no longer defaults `pepper` to `''`, the development context
114
- and the feature harness give the token keys, the federation client secret and
115
- the signing key as references, and the harness has a step for the secrets a
116
- scenario refers to. CONTRIBUTING states the rule.
117
- * `identity.basic` `pepper` has no default; a value read as a
118
- secret must be given as a `$NAME` reference.
119
-
120
- Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
121
-
122
- * feat(configuration): list the configurations
123
-
124
- `configuration.values.list` returns every component's configuration for its
125
- deployed epoch, by component name, and `GET /configuration/values/` serves it
126
- behind `system:configuration:get`.
127
-
128
- Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
129
-
130
- * fix(exposition): write a value in YAML the way its toJSON says
131
-
132
- A redacted secret in a reply was dumped as an empty object; it is written as
133
- `<REDACTED>`, as JSON and msgpack already write it.
134
-
135
- Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
136
-
137
- * test(configuration): a secret is an object, and stays redacted in a reply
138
-
139
- A component with `{ a: 1, b: $SECRET_B }` returns its configuration as
140
- `{ a: 1, b: '<REDACTED>' }` and the secret itself through `unwrap()`. The reply
141
- step also accepts a reply as a caller across a process boundary receives it,
142
- since a call within the process hands the object over as it is.
143
-
144
- Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
145
-
146
- * chore(schemas): bump the dependencies
147
-
148
- ajv 8.18.0 to 8.20.0, ajv-formats 2.1.1 to 3.0.1, better-ajv-errors 1.2.0
149
- to 2.0.3, fast-glob 3.2.12 to 3.3.3 and js-yaml 4.3.1 to 5.4.1 — the version
150
- exposition already uses. The three majors keep the CommonJS entry points this
151
- library calls: ajv-formats as a function, better-ajv-errors as .default, and
152
- js-yaml's load.
153
-
154
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
155
-
156
- * feat(configuration)!: serve the schema with the value
157
-
158
- GET /configuration/values/:component/ answers { configuration, schema, epoch }
159
- where it answered with the configuration alone, and list carries the schema of
160
- every component. Nothing reads a configuration without needing to know what it
161
- is checked against, and the schema was only ever on the values service.
162
-
163
- An epoch the deployment does not know has no schema; the value stored for it
164
- is still returned.
165
-
166
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
167
-
168
- * feat(configuration): publish a configuration UI
169
-
170
- The values service serves a page at /.configuration on port 8003, out of the
171
- directory ui builds: the configured components, a screen per component showing
172
- what it holds now, and a dialog creating the next one. Reading needs
173
- system:configuration:get and creating needs system:configuration:create.
174
-
175
- A configuration is immutable, so the dialog opens on the current value and what
176
- is left out of it is left out of the component. The editor takes YAML, the
177
- schema is applied before anything is sent, and a secret is a reference the page
178
- never shows.
179
-
180
- The page is always published: the annotation is the per-component values map
181
- and has nowhere to carry a switch.
182
-
183
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
184
-
185
- * feat(introspection): link a component to its configuration
186
-
187
- A card carrying @toa.io/extensions.configuration reads that extension as a link
188
- to the configuration UI rather than as a name, and configuration joins the
189
- namespaces the runtime provides, so its components band under System.
190
-
191
- Deployed, both pages sit behind the same ingress and the path alone is right;
192
- locally each console has its own port.
193
-
194
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
195
-
196
- * feat(introspection): scroll the map, zoom with a modifier
197
-
198
- The map was grabbed to move and zoomed with a bare wheel, which is neither what
199
- a page does nor what the wheel does anywhere else. A plain scroll now pans on
200
- both axes and the wheel scales only with the modifier held — a trackpad pinch
201
- arrives as one of those on every platform.
202
-
203
- A card's own scrollable box keeps its wheel, in both paths.
204
-
205
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
206
-
207
- * refactor(introspection): centre the filter in the header
208
-
209
- The sides take equal space, which is what leaves the filter between them.
210
- Neither side may shrink under what it holds, or the tabs run out from under
211
- their side and across the filter, and the filter across the sign-out button;
212
- the title gives way instead.
213
-
214
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
215
-
216
- * fix(configuration): connect the UI to the values service
217
-
218
- The page was declared as a dependency from inside `open`, and a connector connects
219
- what it depends on before `open` runs — so the server was constructed and never
220
- listened. Nothing caught it: the UI feature builds the server itself.
221
-
222
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
223
-
224
- * feat(configuration)!: reserve resources in the annotation
225
-
226
- The values service deploys like any other and must state what it may take, but the
227
- annotation is a map of component ids and had nowhere to put it — so `toa env` failed
228
- for every context using configuration unless it declared a context-wide `resources`.
229
-
230
- `resources` is now the service's own, read the way `introspection` and `realtime` read
231
- theirs. A component actually named `resources` is written `default.resources`, which is
232
- what its id is anyway.
233
-
234
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
235
-
236
- * feat(configuration): follow the system colour scheme
237
-
238
- The dark tokens were behind a `.dark` class nothing sets, and the `dark:` variant was
239
- pointed at that class too — so a component's own dark styling never applied either.
240
- Both now key off `prefers-color-scheme`, and `color-scheme` hands the native chrome
241
- the same answer.
242
-
243
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
244
-
245
- * feat(introspection): follow the system colour scheme
246
-
247
- The dark tokens were behind a `.dark` class nothing sets, and the `dark:` variant was
248
- pointed at that class too — so a component's own dark styling never applied either.
249
- Both now key off `prefers-color-scheme`, and `color-scheme` hands the native chrome
250
- the same answer.
251
-
252
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
253
-
254
- * feat(configuration): present a change as an edit of what is there
255
-
256
- A configuration is immutable and creating one replaces the whole of it, but the dialog
257
- opens on the current value and the page never shows an older one — so what the reader
258
- does is edit. The words follow: Edit rather than New, Update rather than Create, and
259
- the paragraph explaining the model goes, along with the field's label, which the title
260
- above it already said.
261
-
262
- The editor also stayed as wide as its longest line — `field-sizing: content` sizes to
263
- content, and no `max-width` clamps that — so a long value painted outside the dialog.
264
- It is fixed now, the dialog takes the width the screen has rather than a fixed step,
265
- and the band held for errors no longer leaves a gap when there are none.
266
-
267
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
268
-
269
- * feat(configuration): mark a component that keeps a secret
270
-
271
- A key after the name on the row, wherever the configuration holds a reference, however
272
- deep. The predicate reads the same lines the value screen renders, so the two cannot
273
- disagree about what counts as a secret.
274
-
275
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
276
-
277
- * feat(configuration): lead back to the list from the title
278
-
279
- Every address ends in a slash, so the way up is the address itself on the list and one
280
- level above it on a component's screen — which holds wherever the page is mounted.
281
-
282
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
283
-
284
-
285
-
286
-
287
-
288
- # [1.0.0-alpha.273](https://github.com/toa-io/toa/compare/v1.0.0-alpha.272...v1.0.0-alpha.273) (2026-09-02)
289
-
290
- **Note:** Version bump only for package @toa.io/extensions.introspection
291
-
292
-
293
-
294
-
295
-
296
- # [1.0.0-alpha.272](https://github.com/toa-io/toa/compare/v1.0.0-alpha.271...v1.0.0-alpha.272) (2026-09-01)
297
-
298
- **Note:** Version bump only for package @toa.io/extensions.introspection
299
-
300
-
301
-
302
-
303
-
304
- # [1.0.0-alpha.270](https://github.com/toa-io/toa/compare/v1.0.0-alpha.269...v1.0.0-alpha.270) (2026-08-31)
305
-
306
-
307
- ### Performance Improvements
308
-
309
- * stop rebuilding per-call values that never change ([4202504](https://github.com/toa-io/toa/commit/4202504c33fb9ef9694f9995f3d0397d3a186438))
310
-
311
-
312
-
313
-
314
-
315
- # [1.0.0-alpha.268](https://github.com/toa-io/toa/compare/v1.0.0-alpha.267...v1.0.0-alpha.268) (2026-08-30)
316
-
317
-
318
- ### Bug Fixes
319
-
320
- * **introspection:** treat exposition as a system namespace ([0374f22](https://github.com/toa-io/toa/commit/0374f229a0c822763c3d92c6384a61d66269a8cc))
321
-
322
-
323
-
324
-
325
-
326
- # [1.0.0-alpha.266](https://github.com/toa-io/toa/compare/v1.0.0-alpha.265...v1.0.0-alpha.266) (2026-08-29)
327
-
328
- **Note:** Version bump only for package @toa.io/extensions.introspection
329
-
330
-
331
-
332
-
333
-
334
- # [1.0.0-alpha.265](https://github.com/toa-io/toa/compare/v1.0.0-alpha.264...v1.0.0-alpha.265) (2026-08-29)
335
-
336
- **Note:** Version bump only for package @toa.io/extensions.introspection
337
-
338
-
339
-
340
-
341
-
342
- # [1.0.0-alpha.264](https://github.com/toa-io/toa/compare/v1.0.0-alpha.263...v1.0.0-alpha.264) (2026-08-29)
343
-
344
-
345
- ### Bug Fixes
346
-
347
- * **introspection:** stop the counts row being cut short ([8123fd5](https://github.com/toa-io/toa/commit/8123fd5d53e290cc0f6c05d30371af63572be5e6))
348
-
349
-
350
-
351
-
352
-
353
- # [1.0.0-alpha.263](https://github.com/toa-io/toa/compare/v1.0.0-alpha.262...v1.0.0-alpha.263) (2026-08-29)
354
-
355
-
356
- ### Bug Fixes
357
-
358
- * **introspection:** retain edges for seven days ([9b2c988](https://github.com/toa-io/toa/commit/9b2c988faddefad6a5b3a70d887f3e9a58d38b16))
359
-
360
-
361
- ### Features
362
-
363
- * **introspection:** give a service its own mark ([a01d66f](https://github.com/toa-io/toa/commit/a01d66fb7068efa5db45cddfdf24658b0d6dd92d))
364
- * **introspection:** limit topology update windows ([9b4cfab](https://github.com/toa-io/toa/commit/9b4cfab196f4b4b3e6f3af201c973df837cfa28a))
365
- * **introspection:** name the counts by what they are ([7244ba8](https://github.com/toa-io/toa/commit/7244ba86a7f9c2dd42cd22847082e20da325bc77))
366
-
367
-
368
-
369
-
370
-
371
- # [1.0.0-alpha.262](https://github.com/toa-io/toa/compare/v1.0.0-alpha.261...v1.0.0-alpha.262) (2026-08-28)
372
-
373
-
374
- ### Bug Fixes
375
-
376
- * **introspection:** keep the collector off the critical path ([965ec77](https://github.com/toa-io/toa/commit/965ec77482d361a5a9a88579152158c7e1c79e66))
377
- * **introspection:** meet a card across the edge the line touches ([2002de9](https://github.com/toa-io/toa/commit/2002de9bdc12400abc64d5234fa319339db4588f))
378
- * **introspection:** return the whole map over HTTP ([053c0cd](https://github.com/toa-io/toa/commit/053c0cd5c22b1a80bceb23d2cda68ede33a0d1c0))
379
- * **introspection:** serve a route that looks like a file ([b43bbb4](https://github.com/toa-io/toa/commit/b43bbb4a290819463c61bcba64357385c2423d25))
380
- * **introspection:** show the lines an opened neighbour sends ([5fe8aed](https://github.com/toa-io/toa/commit/5fe8aed64c1f1e54f1c10e29b91b50c5cdc296ab))
381
- * **introspection:** wait for the page before capturing it ([9e63af3](https://github.com/toa-io/toa/commit/9e63af34ee090a4f90dce9658b0d022f4acae50f))
382
-
383
-
384
- * feat(introspection)!: publish the UI ([81fe2cb](https://github.com/toa-io/toa/commit/81fe2cb4bafe91e74d3af8359327e3102e5b0e8a))
385
-
386
-
387
- ### Features
388
-
389
- * **introspection:** act on the only thing the filter left ([1a83709](https://github.com/toa-io/toa/commit/1a8370987b7d60c009f4d58f07005618899cdfd6))
390
- * **introspection:** add the introspection extension ([a07ed86](https://github.com/toa-io/toa/commit/a07ed8651404258d544f3b6d8236e58cf4da09ac))
391
- * **introspection:** animate a card opening on the map ([1d2180f](https://github.com/toa-io/toa/commit/1d2180f48fb9dc18d9fa0c2cc4eefa6f46626898))
392
- * **introspection:** animate every collapsible from one place ([0b6a32b](https://github.com/toa-io/toa/commit/0b6a32b69128f2db2d3e449896614ff478f2775b))
393
- * **introspection:** ask for the role rather than be refused it ([1ad01a7](https://github.com/toa-io/toa/commit/1ad01a7dd817ae37ed84e3a3b6b20b72049a4216))
394
- * **introspection:** cache the map API ([f550c27](https://github.com/toa-io/toa/commit/f550c2780a80bbe2fdd131984c33d9848daa8c82))
395
- * **introspection:** fold away a component's extensions ([de1bea6](https://github.com/toa-io/toa/commit/de1bea6329a1fd920cff6b5ad9a13eedfc527884))
396
- * **introspection:** give a card's rows their own space ([3253639](https://github.com/toa-io/toa/commit/32536395b9d25e743c25b61deb9dbd5b79d966b6))
397
- * **introspection:** give the map's two screens their own addresses ([90fd5af](https://github.com/toa-io/toa/commit/90fd5af39b8b6c38e22e05df46c70de533eb15c6))
398
- * **introspection:** open a component on the map ([6382740](https://github.com/toa-io/toa/commit/63827403407fc5a305d95e9fde72ed5a99a1499a))
399
- * **introspection:** open an operation onto what it takes ([f16a683](https://github.com/toa-io/toa/commit/f16a683175a89d3660c538768b24cd872b6d0b3d))
400
- * **introspection:** publish the map as a page ([21b16b2](https://github.com/toa-io/toa/commit/21b16b2220a1b26796bdbedc85a0df2a88df31dd))
401
- * **introspection:** say a component's shape in counts ([54aa771](https://github.com/toa-io/toa/commit/54aa771a51c257db759107d584d063916f0cd351))
402
- * **introspection:** say how a silenced card comes back ([6e7674f](https://github.com/toa-io/toa/commit/6e7674f88137cfb780f3a7cac1fc67f191f96984))
403
- * **introspection:** separate what the runtime provides ([289c7a3](https://github.com/toa-io/toa/commit/289c7a301dd0ab9c063a5b77b24745983ec79e29))
404
- * **introspection:** show a schema as a shape ([7d9a595](https://github.com/toa-io/toa/commit/7d9a595d86f88846b21bb79aba82bb332b77fbf6))
405
- * **introspection:** the map is the front page ([dbf1b5f](https://github.com/toa-io/toa/commit/dbf1b5fd6d262aa2aa952bbfe2a6be1e44af6302))
406
-
407
-
408
- ### Performance Improvements
409
-
410
- * **introspection:** build a card's details when it shows them ([c10f7c4](https://github.com/toa-io/toa/commit/c10f7c42e51cbef2d3767c36559d846f0e34653a))
411
-
412
-
413
- ### BREAKING CHANGES
414
-
415
- * the extension is predefined, so every Context now declares an
416
- ingress and must say where it lands:
417
-
418
- ingress:
419
- hosts: [api.example.com]
420
-
421
- An application that does not want the page says `introspection: { ui: false }`,
422
- and one that wants no map at all says `introspection: false`. Failing the export
423
- is deliberate: the alternative is quietly not publishing a page that was asked
424
- for.
425
-
426
- Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@@ -7,39 +7,37 @@ name: edges
7
7
  # actually happened.
8
8
  #
9
9
  # Every replica of a component derives the same id for the same edge, so `merge` is
10
- # an upsert and `_updated` shows when the edge was last observed.
10
+ # an upsert and `UPDATED` shows when the edge was last observed.
11
11
 
12
12
  entity:
13
13
  associated: true
14
- schema:
15
- properties: &observed
16
- src:
17
- description: What caused the call — another operation, an event, or a service
18
- type: object
19
- properties:
20
- namespace: { type: string }
21
- component: { type: string }
22
- operation: { type: string }
23
- event: { type: string }
24
- service: { type: string }
25
- dst:
26
- description: What was called
27
- type: object
28
- required: [namespace, component, operation]
29
- properties:
30
- namespace: { type: string }
31
- component: { type: string }
32
- operation: { type: string }
33
- sample:
34
- description: The last call observed on this edge
35
- type: object
36
- required: [at, outcome]
37
- properties:
38
- at: { type: integer }
39
- input: {}
40
- outcome: { type: string }
41
- required: [src, dst]
42
- type: object
14
+ properties: &observed
15
+ src:
16
+ description: What caused the call — another operation, an event, or a service
17
+ type: object
18
+ properties:
19
+ namespace: { type: string }
20
+ component: { type: string }
21
+ operation: { type: string }
22
+ event: { type: string }
23
+ service: { type: string }
24
+ dst:
25
+ description: What was called
26
+ type: object
27
+ required: [namespace, component, operation]
28
+ properties:
29
+ namespace: { type: string }
30
+ component: { type: string }
31
+ operation: { type: string }
32
+ sample:
33
+ description: The last call observed on this edge
34
+ type: object
35
+ required: [at, outcome]
36
+ properties:
37
+ at: { type: integer }
38
+ input: {}
39
+ outcome: { type: string }
40
+ required: [src, dst]
43
41
 
44
42
  operations:
45
43
  # a mass transition: the scope is inferred from the algorithm's `objects` parameter
@@ -0,0 +1,14 @@
1
+ # 1.0.0-alpha.286 renamed the four system properties of a record. A database written before it
2
+ # holds them under the old names, where nothing reads them: such a record is never created,
3
+ # never updated, never deleted, and at version zero.
4
+ #
5
+ # `$rename` leaves a record that has none of them alone, so this is a no-op for a component
6
+ # that has only ever run this release.
7
+ - update:
8
+ filter: {}
9
+ update:
10
+ $rename:
11
+ _version: VERSION
12
+ _created: CREATED
13
+ _updated: UPDATED
14
+ _deleted: DELETED
@@ -18,4 +18,4 @@ export function transition(input, objects) {
18
18
  }
19
19
  return objects;
20
20
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvbWVyZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBRSxLQUFpQixFQUFFLE9BQWlCO0lBQzlELEtBQUssTUFBTSxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7UUFDM0IsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFckMsSUFBSSxRQUFRLEtBQUssU0FBUztZQUN4QixTQUFRO1FBRVYsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQTtRQUV2QiwrREFBK0Q7UUFDL0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFNBQVM7WUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFBO0lBQ2pDLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQTtBQUNoQixDQUFDIn0=
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvbWVyZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFpQixFQUFFLE9BQWlCO0lBQzdELEtBQUssTUFBTSxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7UUFDM0IsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFckMsSUFBSSxRQUFRLEtBQUssU0FBUztZQUFFLFNBQVE7UUFFcEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQTtRQUV2QiwrREFBK0Q7UUFDL0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUE7SUFDbEUsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMifQ==
@@ -7,19 +7,17 @@ import type { Entity, MergeInput } from '../types/index.js'
7
7
  * and the matching edge under `edges[id]`. Unknown edges are initialized by the
8
8
  * runtime, since the entity is `associated`.
9
9
  */
10
- export function transition (input: MergeInput, objects: Entity[]): Entity[] {
10
+ export function transition(input: MergeInput, objects: Entity[]): Entity[] {
11
11
  for (const edge of objects) {
12
12
  const observed = input.edges[edge.id]
13
13
 
14
- if (observed === undefined)
15
- continue
14
+ if (observed === undefined) continue
16
15
 
17
16
  edge.src = observed.src
18
17
  edge.dst = observed.dst
19
18
 
20
19
  // absent when sampling is off, and the last one wins otherwise
21
- if (observed.sample !== undefined)
22
- edge.sample = observed.sample
20
+ if (observed.sample !== undefined) edge.sample = observed.sample
23
21
  }
24
22
 
25
23
  return objects