@rse/ase 0.9.62 → 0.9.64

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 (73) hide show
  1. package/dst/ase-artifact.js +19 -8
  2. package/dst/ase-config.js +12 -8
  3. package/dst/ase-hook.js +9 -1
  4. package/dst/ase-service.js +2 -0
  5. package/dst/ase-spec.js +281 -0
  6. package/dst/ase.js +2 -0
  7. package/package.json +10 -8
  8. package/plugin/.claude-plugin/plugin.json +1 -1
  9. package/plugin/.codex-plugin/plugin.json +1 -1
  10. package/plugin/.github/plugin/plugin.json +1 -1
  11. package/plugin/etc/stx.conf +5 -3
  12. package/plugin/meta/ase-format-meta.md +23 -105
  13. package/plugin/meta/ase-format-spec.md +22 -1326
  14. package/plugin/meta/ase-tenets.md +63 -4
  15. package/plugin/package.json +6 -2
  16. package/plugin/skills/ase-arch-analyze/help.md +7 -0
  17. package/plugin/skills/ase-arch-discover/help.md +7 -0
  18. package/plugin/skills/ase-code-analyze/help.md +8 -0
  19. package/plugin/skills/ase-code-craft/help.md +7 -0
  20. package/plugin/skills/ase-code-dissect/help.md +7 -0
  21. package/plugin/skills/ase-code-edit/SKILL.md +14 -9
  22. package/plugin/skills/ase-code-edit/help.md +7 -0
  23. package/plugin/skills/ase-code-explain/help.md +7 -0
  24. package/plugin/skills/ase-code-insight/help.md +7 -0
  25. package/plugin/skills/ase-code-lint/help.md +8 -0
  26. package/plugin/skills/ase-code-refactor/help.md +7 -0
  27. package/plugin/skills/ase-code-resolve/help.md +7 -0
  28. package/plugin/skills/ase-docs-distill/help.md +7 -0
  29. package/plugin/skills/ase-docs-proofread/help.md +7 -0
  30. package/plugin/skills/ase-help-intent/SKILL.md +66 -43
  31. package/plugin/skills/ase-help-intent/help.md +27 -16
  32. package/plugin/skills/ase-help-skill/catalog.md +3 -0
  33. package/plugin/skills/ase-help-skill/help.md +7 -0
  34. package/plugin/skills/ase-meta-brainstorm/help.md +8 -0
  35. package/plugin/skills/ase-meta-changelog/help.md +6 -0
  36. package/plugin/skills/ase-meta-chat/help.md +6 -0
  37. package/plugin/skills/ase-meta-commit/help.md +6 -0
  38. package/plugin/skills/ase-meta-compat/help.md +6 -0
  39. package/plugin/skills/ase-meta-config/help.md +7 -0
  40. package/plugin/skills/ase-meta-diaboli/help.md +7 -0
  41. package/plugin/skills/ase-meta-diff/help.md +7 -0
  42. package/plugin/skills/ase-meta-eli5/help.md +6 -0
  43. package/plugin/skills/ase-meta-evaluate/help.md +7 -0
  44. package/plugin/skills/ase-meta-proximity/help.md +7 -0
  45. package/plugin/skills/ase-meta-quorum/help.md +6 -0
  46. package/plugin/skills/ase-meta-quotes/help.md +7 -0
  47. package/plugin/skills/ase-meta-review/help.md +8 -1
  48. package/plugin/skills/ase-meta-search/help.md +6 -0
  49. package/plugin/skills/ase-meta-steelman/help.md +6 -0
  50. package/plugin/skills/ase-meta-why/help.md +7 -0
  51. package/plugin/skills/ase-meta-workflow/help.md +7 -0
  52. package/plugin/skills/ase-spec-edit/SKILL.md +520 -0
  53. package/plugin/skills/ase-spec-edit/help.md +137 -0
  54. package/plugin/skills/ase-sync-export/SKILL.md +66 -110
  55. package/plugin/skills/ase-sync-export/help.md +43 -40
  56. package/plugin/skills/ase-sync-import/SKILL.md +37 -15
  57. package/plugin/skills/ase-sync-import/help.md +21 -10
  58. package/plugin/skills/ase-sync-reconcile/SKILL.md +37 -16
  59. package/plugin/skills/ase-sync-reconcile/help.md +26 -16
  60. package/plugin/skills/ase-task-condense/help.md +6 -0
  61. package/plugin/skills/ase-task-delete/help.md +6 -0
  62. package/plugin/skills/ase-task-dissect/help.md +7 -0
  63. package/plugin/skills/ase-task-edit/help.md +7 -0
  64. package/plugin/skills/ase-task-grill/SKILL.md +5 -4
  65. package/plugin/skills/ase-task-grill/help.md +7 -0
  66. package/plugin/skills/ase-task-id/help.md +6 -0
  67. package/plugin/skills/ase-task-implement/help.md +7 -0
  68. package/plugin/skills/ase-task-list/help.md +6 -0
  69. package/plugin/skills/ase-task-preflight/help.md +7 -0
  70. package/plugin/skills/ase-task-reboot/help.md +6 -0
  71. package/plugin/skills/ase-task-rename/help.md +6 -0
  72. package/plugin/skills/ase-task-view/help.md +6 -0
  73. package/plugin/meta/ase-format-arch.md +0 -1164
@@ -1,1164 +0,0 @@
1
-
2
- @./ase-format-meta.md
3
-
4
- Architecture (ARCH)
5
- ===================
6
-
7
- The **Artifact Set** **Architecture (ARCH)** specifies the "input"
8
- and the "how" of the Software Engineering project.
9
-
10
- Each **Artifact** of the **Artifact Set**
11
- **Architecture (ARCH)** is stored under
12
- `<basedir/>/ARCH-<artifact-no/>-<artifact-id/>-<artifact-slug/>.md`,
13
- relative to the project root directory, with <basedir/> being the
14
- `project.artifact.arch.basedir` config variable, <artifact-no/> being
15
- the zero-padded, two-digit sequence number of the **Artifact** (starting
16
- at `01`) according to the order of the **Artifact** list below, and with
17
- <artifact-slug/> being derived from <artifact-name/> (see below) by
18
- Pascal-casing each word (upper-casing its first letter) and using `-`
19
- characters instead of spaces (e.g. `Context-View`).
20
-
21
- The **Artifact Set** **Architecture (ARCH)** consists of the following
22
- distinct **Artifact**s (listed under their <artifact-name/> and their
23
- <artifact-id/>):
24
-
25
- 01. **Context View (CV)**:
26
- The relationships, dependencies, and interactions between the solution
27
- and its environment, defining the system's scope, external entities,
28
- and boundaries.
29
-
30
- 02. **Functionality View (FV)**:
31
- The functional components of the solution, their responsibilities,
32
- interfaces, and primary interactions, describing *what* the system does
33
- at runtime.
34
-
35
- 03. **Information View (IV)**:
36
- The way the solution stores, manages, manipulates, and distributes
37
- information, defining the static data structure and dynamic information
38
- flow.
39
-
40
- 04. **Concurrency View (CO)**:
41
- The concurrency structure of the solution, mapping functional components
42
- to processes and threads, and defining how they coordinate and
43
- communicate.
44
-
45
- 05. **Development View (DV)**:
46
- The architecture supporting the software development process, defining
47
- the module organization, build approach, and codeline conventions.
48
-
49
- 06. **Deployment View (DP)**:
50
- The environment into which the solution is deployed, mapping software
51
- elements to the runtime platform, hardware, and network topology.
52
-
53
- 07. **Operations View (OV)**:
54
- The way the solution is operated, administered, and supported in
55
- production, defining installation, monitoring, and management concerns.
56
-
57
- 08. **Quality Perspectives (QP)**:
58
- How the Non-Functional Requirements (NR) are addressed.
59
-
60
- 09. **Decision Record (DR)**:
61
- The major decisions related to the architecture, each recording the
62
- forces at play, the chosen response, and the reasoning that justifies it.
63
-
64
- 10. **Technology Stack (TS)**:
65
- The concrete technology products the solution is built upon, organized
66
- by tier and lifecycle phase, recording for each component its chosen
67
- product, its purpose, and the alternatives that were considered but not
68
- chosen.
69
-
70
- The **Artifact**s have the following cross-references:
71
-
72
- ```text
73
- ARCH-03-IV Information View ──(entity)─► SPEC-07-DM Data Model
74
- ARCH-03-IV Information View ──(owner)─► ARCH-02-FV Functionality View
75
- ARCH-04-CO Concurrency View ──(hosts)─► ARCH-02-FV Functionality View
76
- ARCH-06-DP Deployment View ──(hosts)─► ARCH-02-FV Functionality View
77
- ARCH-07-OV Operations View ──(element)─► ARCH-02-FV Functionality View
78
- ARCH-07-OV Operations View ──(element)─► ARCH-06-DP Deployment View
79
- ARCH-08-QP Quality Perspectives ──(addresses)─► SPEC-05-NR Non-Functional Requirements
80
- ARCH-08-QP Quality Perspectives ──(affects)─► ARCH-02-FV Functionality View
81
- ARCH-08-QP Quality Perspectives ──(affects)─► ARCH-06-DP Deployment View
82
- ARCH-09-DR Decision Record ──(affects)─► ARCH-02-FV Functionality View
83
- ARCH-09-DR Decision Record ──(affects)─► ARCH-06-DP Deployment View
84
- ARCH-10-TS Technology Stack ──(realizes)─► ARCH-02-FV Functionality View
85
- ARCH-10-TS Technology Stack ──(realizes)─► ARCH-06-DP Deployment View
86
- ```
87
-
88
- Context View (CV)
89
- -----------------
90
-
91
- The relationships, dependencies, and interactions between the solution
92
- and its environment, defining the system's scope, external entities,
93
- and boundaries.
94
-
95
- - Format:
96
-
97
- <format>
98
-
99
- # ARCHITECTURE: CONTEXT VIEW (ARCH-CV)
100
-
101
- ✳ Created: **<timestamp-created/>**
102
- ✎ Modified: **<timestamp-modified/>**
103
-
104
- <arch-cv-entity/>
105
- <arch-cv-entity/>
106
- [...]
107
-
108
- </format>
109
-
110
- - <arch-cv-entity/> format:
111
-
112
- <format>
113
-
114
- ## ENTITY: <arch-cv-entity-name/> <a id="ARCH-CV-<arch-cv-entity-id/>"></a>
115
-
116
- - Kind: <arch-cv-entity-kind/>
117
- - Direction: <arch-cv-entity-direction/>
118
- - Interface: <arch-cv-entity-interface/>
119
- - Data: <arch-cv-entity-data/>
120
-
121
- <arch-cv-entity-description/>,
122
- **BECAUSE** <arch-cv-entity-rationale/>.
123
-
124
- </format>
125
-
126
- - <arch-cv-entity/> details:
127
-
128
- - <arch-cv-entity-id/>: per-artifact unique "slug" of always 1-3
129
- lower-cased words (concatenated with "-" characters and
130
- in total not longer than 30 characters), derived from
131
- <arch-cv-entity-name/>.
132
-
133
- - <arch-cv-entity-name/> is a short (2-5 word) summary of the
134
- external entity the solution interacts with (e.g. `Payment
135
- Gateway`, `Identity Provider`, `End User`).
136
-
137
- - <arch-cv-entity-kind/> is one of:
138
-
139
- - `Person`: A human actor interacting with the solution.
140
- - `System`: An external software system the solution integrates with.
141
- - `Service`: A third-party or managed service the solution consumes.
142
- - `Datastore`: An external data repository the solution reads from or writes to.
143
- - `Device`: A physical device or sensor the solution communicates with.
144
- - `Organization`: An external organizational party.
145
-
146
- - <arch-cv-entity-direction/> is the flow of interaction relative to
147
- the solution: `Inbound` (entity drives the solution), `Outbound`
148
- (solution drives the entity), or `Bidirectional` (both directions).
149
-
150
- - <arch-cv-entity-interface/> is how the interaction happens
151
- (e.g. REST API, message queue, file exchange, web UI).
152
-
153
- - <arch-cv-entity-data/> is the principal information exchanged
154
- across the boundary with this entity.
155
-
156
- - <arch-cv-entity-description/> is a concise paragraph (1-3
157
- sentences) of prose describing the relationship and dependency
158
- between the solution and the external entity.
159
-
160
- - <arch-cv-entity-rationale/> is the 1-sentence rationale ("why")
161
- for the entity being part of the system context.
162
-
163
- - In case the rationale is not present, the
164
- entire `, **BECAUSE** [...]` clause is omitted.
165
-
166
- Functionality View (FV)
167
- -----------------------
168
-
169
- The functional components of the solution, their responsibilities,
170
- interfaces, and primary interactions, describing *what* the system does
171
- at runtime.
172
-
173
- - Format:
174
-
175
- <format>
176
-
177
- # ARCHITECTURE: FUNCTIONALITY VIEW (ARCH-FV)
178
-
179
- ✳ Created: **<timestamp-created/>**
180
- ✎ Modified: **<timestamp-modified/>**
181
-
182
- <arch-fv-component/>
183
- <arch-fv-component/>
184
- [...]
185
-
186
- </format>
187
-
188
- - <arch-fv-component/> format:
189
-
190
- <format>
191
-
192
- ## COMPONENT: <arch-fv-component-name/> <a id="ARCH-FV-<arch-fv-component-id/>"></a>
193
-
194
- - Kind: <arch-fv-component-kind/>
195
- - Responsibility: <arch-fv-component-responsibility/>
196
- - Interface: <arch-fv-component-interface/>
197
- - Depends On: <arch-fv-component-dependency/>[, ...]
198
-
199
- <arch-fv-component-description/>,
200
- **BECAUSE** <arch-fv-component-rationale/>.
201
-
202
- </format>
203
-
204
- - <arch-fv-component/> details:
205
-
206
- - <arch-fv-component-id/>: per-artifact unique "slug" of always 1-3
207
- lower-cased words (concatenated with "-" characters and
208
- in total not longer than 30 characters), derived from
209
- <arch-fv-component-name/>.
210
-
211
- - <arch-fv-component-name/> is a short (2-5 word) summary of the
212
- functional component (e.g. `Authentication Service`, `Order
213
- Processor`, `Notification Dispatcher`).
214
-
215
- - <arch-fv-component-kind/> is one of:
216
- - `Component`: Cohesive unit of functionality with a defined interface.
217
- - `Service`: Independently deployable provider of functionality.
218
- - `Module`: Logical grouping of related functionality within a component.
219
- - `Connector`: Mediator that conveys interactions between components (e.g. bus, gateway).
220
- - `Subsystem`: Larger composite grouping several components.
221
-
222
- - <arch-fv-component-responsibility/> is the 1-sentence statement of
223
- the single, primary responsibility the component owns.
224
-
225
- - <arch-fv-component-interface/> is how other components interact with
226
- this component (e.g. REST API, library API, message topic, CLI).
227
-
228
- - <arch-fv-component-dependency/> is an `ARCH-FV-<arch-fv-component-id/>`
229
- reference to another functional component this component depends on
230
- at runtime.
231
-
232
- - <arch-fv-component-description/> is a concise paragraph (1-3
233
- sentences) of prose describing *what* the component does and how it
234
- collaborates with the components it depends on.
235
-
236
- - <arch-fv-component-rationale/> is the 1-sentence rationale ("why")
237
- for the component's existence and boundary.
238
-
239
- - In case a component has no dependencies at all, the
240
- entire `- Depends On:` bullet point is omitted.
241
-
242
- - In case the rationale is not present, the
243
- entire `, **BECAUSE** [...]` clause is omitted.
244
-
245
- Information View (IV)
246
- ---------------------
247
-
248
- The way the solution stores, manages, manipulates, and distributes
249
- information, defining the static data structure and dynamic information
250
- flow.
251
-
252
- - Format:
253
-
254
- <format>
255
-
256
- # ARCHITECTURE: INFORMATION VIEW (ARCH-IV)
257
-
258
- ✳ Created: **<timestamp-created/>**
259
- ✎ Modified: **<timestamp-modified/>**
260
-
261
- <arch-iv-aspect/>
262
- <arch-iv-aspect/>
263
- [...]
264
-
265
- </format>
266
-
267
- - <arch-iv-aspect/> format:
268
-
269
- <format>
270
-
271
- ## ASPECT: <arch-iv-aspect-name/> <a id="ARCH-IV-<arch-iv-aspect-id/>"></a>
272
-
273
- - Concern: <arch-iv-aspect-concern/>
274
- - Entities: <arch-iv-aspect-entity/>[, ...]
275
- - Owner: <arch-iv-aspect-owner/>
276
- - Lifecycle: <arch-iv-aspect-lifecycle/>
277
-
278
- <arch-iv-aspect-description/>,
279
- **BECAUSE** <arch-iv-aspect-rationale/>.
280
-
281
- </format>
282
-
283
- - <arch-iv-aspect/> details:
284
-
285
- - <arch-iv-aspect-id/>: per-artifact unique "slug" of always 1-3
286
- lower-cased words (concatenated with "-" characters and
287
- in total not longer than 30 characters), derived from
288
- <arch-iv-aspect-name/>.
289
-
290
- - <arch-iv-aspect-name/> is a short (2-5 word) summary of the
291
- information aspect (e.g. `Order Persistence`, `Event Stream`,
292
- `Cache Coherency`).
293
-
294
- - <arch-iv-aspect-concern/> is the information-handling concern the
295
- aspect addresses, one of `Persistence`, `Flow`, `Ownership`,
296
- `Consistency`, `Replication`, `Caching`, `Retention`, or
297
- `Migration`.
298
-
299
- - <arch-iv-aspect-entity/> is a `SPEC-DM-<spec-dm-entity-id/>`
300
- reference to a corresponding entity of the Data Model **Artifact**
301
- the aspect governs.
302
-
303
- - <arch-iv-aspect-owner/> is an `ARCH-FV-<arch-fv-component-id/>`
304
- reference to the functional component that owns this information.
305
-
306
- - <arch-iv-aspect-lifecycle/> is how the information comes into
307
- being, changes, and is disposed of (e.g. `created on order,
308
- retained 7 years, then purged`).
309
-
310
- - <arch-iv-aspect-description/> is a concise paragraph (1-3
311
- sentences) of prose describing how the solution stores, manages,
312
- or distributes the information and how its consistency is upheld.
313
-
314
- - <arch-iv-aspect-rationale/> is the 1-sentence rationale ("why")
315
- for handling the information this way.
316
-
317
- - In case the entity or owner references are not present, the
318
- respective bullet point is omitted.
319
-
320
- - In case the rationale is not present, the
321
- entire `, **BECAUSE** [...]` clause is omitted.
322
-
323
- Concurrency View (CO)
324
- ---------------------
325
-
326
- The concurrency structure of the solution, mapping functional components
327
- to processes and threads, and defining how they coordinate and
328
- communicate.
329
-
330
- - Format:
331
-
332
- <format>
333
-
334
- # ARCHITECTURE: CONCURRENCY VIEW (ARCH-CO)
335
-
336
- ✳ Created: **<timestamp-created/>**
337
- ✎ Modified: **<timestamp-modified/>**
338
-
339
- <arch-co-unit/>
340
- <arch-co-unit/>
341
- [...]
342
-
343
- </format>
344
-
345
- - <arch-co-unit/> format:
346
-
347
- <format>
348
-
349
- ## UNIT: <arch-co-unit-name/> <a id="ARCH-CO-<arch-co-unit-id/>"></a>
350
-
351
- - Kind: <arch-co-unit-kind/>
352
- - Hosts: <arch-co-unit-element/>[, ...]
353
- - Multiplicity: <arch-co-unit-multiplicity/>
354
- - Coordination: <arch-co-unit-coordination/>
355
-
356
- <arch-co-unit-description/>,
357
- **BECAUSE** <arch-co-unit-rationale/>.
358
-
359
- </format>
360
-
361
- - <arch-co-unit/> details:
362
-
363
- - <arch-co-unit-id/>: per-artifact unique "slug" of always 1-3
364
- lower-cased words (concatenated with "-" characters and
365
- in total not longer than 30 characters), derived from
366
- <arch-co-unit-name/>.
367
-
368
- - <arch-co-unit-name/> is a short (2-5 word) summary of the
369
- concurrency unit (e.g. `Web Worker Pool`, `Background Scheduler`,
370
- `Ingest Queue Consumer`).
371
-
372
- - <arch-co-unit-kind/> is one of:
373
-
374
- - `Process`: An independent OS process with its own address space.
375
- - `Thread`: A thread of execution within a process.
376
- - `Pool`: A managed group of interchangeable workers.
377
- - `Queue`: An asynchronous buffer decoupling producers and consumers.
378
- - `EventLoop`: A single-threaded cooperative scheduler of tasks.
379
-
380
- - <arch-co-unit-element/> is an `ARCH-FV-<arch-fv-component-id/>`
381
- reference to a functional component that runs inside this
382
- concurrency unit.
383
-
384
- - <arch-co-unit-multiplicity/> is how many instances of the unit run
385
- (e.g. `1`, `1 per CPU core`, `0..n auto-scaled`).
386
-
387
- - <arch-co-unit-coordination/> is the mechanism by which the unit
388
- coordinates or communicates with other units (e.g. `shared queue`,
389
- `mutex`, `message passing`, `optimistic locking`).
390
-
391
- - <arch-co-unit-description/> is a concise paragraph (1-3 sentences)
392
- of prose describing how the unit executes and how it avoids or
393
- manages contention, races, and deadlocks.
394
-
395
- - <arch-co-unit-rationale/> is the 1-sentence rationale ("why") for
396
- the chosen concurrency structure.
397
-
398
- - In case the unit hosts no functional components, the
399
- entire `- Hosts:` bullet point is omitted.
400
-
401
- - In case the rationale is not present, the
402
- entire `, **BECAUSE** [...]` clause is omitted.
403
-
404
- Development View (DV)
405
- ---------------------
406
-
407
- The architecture supporting the software development process, defining
408
- the module organization, build approach, and codeline conventions.
409
-
410
- - Format:
411
-
412
- <format>
413
-
414
- # ARCHITECTURE: DEVELOPMENT VIEW (ARCH-DV)
415
-
416
- ✳ Created: **<timestamp-created/>**
417
- ✎ Modified: **<timestamp-modified/>**
418
-
419
- <arch-dv-aspect/>
420
- <arch-dv-aspect/>
421
- [...]
422
-
423
- </format>
424
-
425
- - <arch-dv-aspect/> format:
426
-
427
- <format>
428
-
429
- ## ASPECT: <arch-dv-aspect-name/> <a id="ARCH-DV-<arch-dv-aspect-id/>"></a>
430
-
431
- - Category: <arch-dv-aspect-category/>
432
-
433
- <arch-dv-aspect-description/>,
434
- **BECAUSE** <arch-dv-aspect-rationale/>.
435
-
436
- </format>
437
-
438
- - <arch-dv-aspect/> details:
439
-
440
- - <arch-dv-aspect-id/>: per-artifact unique "slug" of always 1-3
441
- lower-cased words (concatenated with "-" characters and
442
- in total not longer than 30 characters), derived from
443
- <arch-dv-aspect-name/>.
444
-
445
- - <arch-dv-aspect-name/> is a short (2-5 word) summary of the
446
- development aspect (e.g. `Module Layering`, `Build Pipeline`,
447
- `Branching Model`).
448
-
449
- - <arch-dv-aspect-category/> is the development concern the aspect
450
- governs, one of `Structure` (module/package organization),
451
- `Build` (compilation and packaging), `Dependency` (dependency
452
- management and layering rules), `Codeline` (branching, merging,
453
- versioning), `Standardization` (coding standards and conventions),
454
- or `Tooling` (development tools and automation).
455
-
456
- - <arch-dv-aspect-description/> is a concise paragraph (1-3
457
- sentences) of prose describing the development convention or
458
- structure and the rule developers must follow.
459
-
460
- - <arch-dv-aspect-rationale/> is the 1-sentence rationale ("why")
461
- for the development aspect.
462
-
463
- - In case the rationale is not present, the
464
- entire `, **BECAUSE** [...]` clause is omitted.
465
-
466
- Deployment View (DP)
467
- --------------------
468
-
469
- The environment into which the solution is deployed, mapping software
470
- elements to the runtime platform, hardware, and network topology.
471
-
472
- - Format:
473
-
474
- <format>
475
-
476
- # ARCHITECTURE: DEPLOYMENT VIEW (ARCH-DP)
477
-
478
- ✳ Created: **<timestamp-created/>**
479
- ✎ Modified: **<timestamp-modified/>**
480
-
481
- <arch-dp-node/>
482
- <arch-dp-node/>
483
- [...]
484
-
485
- </format>
486
-
487
- - <arch-dp-node/> format:
488
-
489
- <format>
490
-
491
- ## NODE: <arch-dp-node-name/> <a id="ARCH-DP-<arch-dp-node-id/>"></a>
492
-
493
- - Kind: <arch-dp-node-kind/>
494
- - Platform: <arch-dp-node-platform/>
495
- - Hosts: <arch-dp-node-element/>[, ...]
496
- - Network: <arch-dp-node-network/>
497
-
498
- <arch-dp-node-description/>,
499
- **BECAUSE** <arch-dp-node-rationale/>.
500
-
501
- </format>
502
-
503
- - <arch-dp-node/> details:
504
-
505
- - <arch-dp-node-id/>: per-artifact unique "slug" of always 1-3
506
- lower-cased words (concatenated with "-" characters and
507
- in total not longer than 30 characters), derived from
508
- <arch-dp-node-name/>.
509
-
510
- - <arch-dp-node-name/> is a short (2-5 word) summary of the
511
- deployment node (e.g. `Web Tier`, `Database Cluster`, `Edge CDN`).
512
-
513
- - <arch-dp-node-kind/> is one of:
514
-
515
- - `Server`: A physical or virtual machine.
516
- - `Container`: A containerized runtime (e.g. Docker, OCI).
517
- - `Cluster`: A managed group of nodes (e.g. Kubernetes cluster).
518
- - `Function`: A serverless / function-as-a-service runtime.
519
- - `Device`: An edge or client device.
520
- - `Managed`: A managed cloud service (e.g. managed database, queue).
521
-
522
- - <arch-dp-node-platform/> is the runtime platform of the node
523
- (e.g. `Linux x86-64`, `Kubernetes 1.30`, `AWS Lambda (Node.js)`).
524
-
525
- - <arch-dp-node-element/> is an `ARCH-FV-<arch-fv-component-id/>`
526
- reference to a functional component deployed onto this node.
527
-
528
- - <arch-dp-node-network/> is the network placement and connectivity
529
- of the node (e.g. `public subnet, TLS 443`, `private VLAN`).
530
-
531
- - <arch-dp-node-description/> is a concise paragraph (1-3 sentences)
532
- of prose describing the node, its sizing, and its place in the
533
- deployment topology.
534
-
535
- - <arch-dp-node-rationale/> is the 1-sentence rationale ("why") for
536
- the node's placement and platform choice.
537
-
538
- - In case the node hosts no functional components, the
539
- entire `- Hosts:` bullet point is omitted.
540
-
541
- - In case the rationale is not present, the
542
- entire `, **BECAUSE** [...]` clause is omitted.
543
-
544
- Operations View (OV)
545
- --------------------
546
-
547
- The way the solution is operated, administered, and supported in
548
- production, defining installation, monitoring, and management concerns.
549
-
550
- - Format:
551
-
552
- <format>
553
-
554
- # ARCHITECTURE: OPERATIONS VIEW (ARCH-OV)
555
-
556
- ✳ Created: **<timestamp-created/>**
557
- ✎ Modified: **<timestamp-modified/>**
558
-
559
- <arch-ov-concern/>
560
- <arch-ov-concern/>
561
- [...]
562
-
563
- </format>
564
-
565
- - <arch-ov-concern/> format:
566
-
567
- <format>
568
-
569
- ## CONCERN: <arch-ov-concern-name/> <a id="ARCH-OV-<arch-ov-concern-id/>"></a>
570
-
571
- - Category: <arch-ov-concern-category/>
572
- - Element: <arch-ov-concern-element/>[, ...]
573
-
574
- <arch-ov-concern-description/>,
575
- **BECAUSE** <arch-ov-concern-rationale/>.
576
-
577
- </format>
578
-
579
- - <arch-ov-concern/> details:
580
-
581
- - <arch-ov-concern-id/>: per-artifact unique "slug" of always 1-3
582
- lower-cased words (concatenated with "-" characters and
583
- in total not longer than 30 characters), derived from
584
- <arch-ov-concern-name/>.
585
-
586
- - <arch-ov-concern-name/> is a short (2-5 word) summary of the
587
- operational concern (e.g. `Rolling Deployment`, `Metrics
588
- Collection`, `Backup and Restore`).
589
-
590
- - <arch-ov-concern-category/> is the category of the concern,
591
- one of `Installation`, `Configuration`, `Provisioning`,
592
- `Monitoring`, `Logging`, `Alerting`, `Backup`, `Recovery`,
593
- `Upgrade`, or `Support`.
594
-
595
- - <arch-ov-concern-element/> is an `ARCH-FV-<arch-fv-component-id/>`
596
- or `ARCH-DP-<arch-dp-node-id/>` reference to the functional
597
- element or deployment node the concern applies to.
598
-
599
- - <arch-ov-concern-description/> is a concise paragraph (1-3
600
- sentences) of prose describing how the concern is handled in
601
- production and which procedures or tools support it.
602
-
603
- - <arch-ov-concern-rationale/> is the 1-sentence rationale ("why")
604
- for the operational approach.
605
-
606
- - In case the element reference is not present, the
607
- entire `- Element:` bullet point is omitted.
608
-
609
- - In case the rationale is not present, the
610
- entire `, **BECAUSE** [...]` clause is omitted.
611
-
612
- Quality Perspectives (QP)
613
- -------------------------
614
-
615
- How the Non-Functional Requirements (NR) are addressed.
616
-
617
- - Format:
618
-
619
- <format>
620
-
621
- # ARCHITECTURE: QUALITY PERSPECTIVES (ARCH-QP)
622
-
623
- ✳ Created: **<timestamp-created/>**
624
- ✎ Modified: **<timestamp-modified/>**
625
-
626
- <arch-qp-perspective/>
627
- <arch-qp-perspective/>
628
- [...]
629
-
630
- </format>
631
-
632
- - <arch-qp-perspective/> format:
633
-
634
- <format>
635
-
636
- ## PERSPECTIVE: <arch-qp-perspective-name/> <a id="ARCH-QP-<arch-qp-perspective-id/>"></a>
637
-
638
- - Quality: <arch-qp-perspective-quality/>
639
- - Addresses: <arch-qp-perspective-requirement/>[, ...]
640
- - Tactic: <arch-qp-perspective-tactic/>
641
- - Affects: <arch-qp-perspective-element/>[, ...]
642
-
643
- <arch-qp-perspective-description/>,
644
- **BECAUSE** <arch-qp-perspective-rationale/>.
645
-
646
- </format>
647
-
648
- - <arch-qp-perspective/> details:
649
-
650
- - <arch-qp-perspective-id/>: per-artifact unique "slug" of always
651
- 1-3 lower-cased words (concatenated with "-" characters and
652
- in total not longer than 30 characters), derived from
653
- <arch-qp-perspective-name/>.
654
-
655
- - <arch-qp-perspective-name/> is a short (2-5 word) summary of the
656
- quality perspective (e.g. `Horizontal Scaling`, `Defense in
657
- Depth`, `Graceful Degradation`).
658
-
659
- - <arch-qp-perspective-quality/> is the quality attribute the
660
- perspective addresses, one of `Performance`, `Scalability`,
661
- `Reliability`, `Availability`, `Security`, `Privacy`,
662
- `Usability`, `Accessibility`, `Maintainability`, `Portability`,
663
- `Compatibility`, or `Compliance`. This enumeration is a
664
- solution-oriented refinement of the Non-Functional Requirements
665
- (NR) categories and intentionally differs from them: the NR
666
- categories follow the ISO/IEC 25010:2023 top-level characteristics
667
- (and include `Safety` and `Flexibility`), whereas the perspective
668
- qualities decompose some of these into the finer-grained,
669
- architecturally actionable attributes `Scalability`,
670
- `Availability`, `Privacy`, `Accessibility`, and `Portability`. A
671
- perspective's quality therefore need not match the category of the
672
- `SPEC-NR-<spec-nr-requirement-id/>` it addresses.
673
-
674
- - <arch-qp-perspective-requirement/> is a
675
- `SPEC-NR-<spec-nr-requirement-id/>` reference to the corresponding
676
- Non-Functional Requirement (NR) **Aspect** the perspective addresses.
677
-
678
- - <arch-qp-perspective-tactic/> is the architectural tactic or
679
- strategy applied to achieve the quality (e.g. `stateless
680
- replication behind a load balancer`, `read-through cache`, `circuit
681
- breaker`).
682
-
683
- - <arch-qp-perspective-element/> is an `ARCH-FV-<arch-fv-component-id/>`
684
- or `ARCH-DP-<arch-dp-node-id/>` reference to the functional
685
- element or deployment node the tactic affects.
686
-
687
- - <arch-qp-perspective-description/> is a concise paragraph (1-3
688
- sentences) of prose describing how the architecture satisfies the
689
- quality attribute across the affected elements.
690
-
691
- - <arch-qp-perspective-rationale/> is the 1-sentence rationale
692
- ("why") for the chosen tactic over alternatives.
693
-
694
- - In case the element reference is not present, the
695
- entire `- Affects:` bullet point is omitted.
696
-
697
- - In case the rationale is not present, the
698
- entire `, **BECAUSE** [...]` clause is omitted.
699
-
700
- Decision Record (DR)
701
- --------------------
702
-
703
- The major decisions related to the architecture, each recording the
704
- forces at play, the chosen response, and the reasoning that justifies it.
705
-
706
- - Format:
707
-
708
- <format>
709
-
710
- # ARCHITECTURE: DECISION RECORD (ARCH-DR)
711
-
712
- ✳ Created: **<timestamp-created/>**
713
- ✎ Modified: **<timestamp-modified/>**
714
-
715
- <arch-dr-decision/>
716
- <arch-dr-decision/>
717
- [...]
718
-
719
- </format>
720
-
721
- - <arch-dr-decision/> format:
722
-
723
- <format>
724
-
725
- ## DECISION: <arch-dr-decision-name/> <a id="ARCH-DR-<arch-dr-decision-id/>"></a>
726
-
727
- - Status: <arch-dr-decision-status/>
728
- - Affects: <arch-dr-decision-element/>[, ...]
729
- - Superseded-By: <arch-dr-decision-superseded-by/>
730
- - Created: <arch-dr-decision-created/>
731
- - Modified: <arch-dr-decision-modified/>
732
-
733
- - WHEN (Context):
734
- <arch-dr-decision-context/>
735
-
736
- - WHAT (Decision):
737
- <arch-dr-decision-decision/>
738
-
739
- - WHY (Rationale):
740
- <arch-dr-decision-rationale/>
741
-
742
- - NOTES (Background):
743
- <arch-dr-decision-notes/>
744
-
745
- </format>
746
-
747
- - <arch-dr-decision/> details:
748
-
749
- - <arch-dr-decision-id/>: per-artifact unique "slug" of always 1-3
750
- lower-cased words (concatenated with "-" characters and
751
- in total not longer than 30 characters), derived from
752
- <arch-dr-decision-name/>.
753
-
754
- - <arch-dr-decision-name/> is a short summary of the
755
- <arch-dr-decision-decision/>, not longer than 80 characters.
756
-
757
- - <arch-dr-decision-status/> is one of `proposed`, `accepted`,
758
- `deprecated`, or `superseded`.
759
-
760
- - <arch-dr-decision-element/> is an `ARCH-FV-<arch-fv-component-id/>`
761
- or `ARCH-DP-<arch-dp-node-id/>` reference to the functional
762
- element or deployment node the decision affects.
763
-
764
- - <arch-dr-decision-superseded-by/> is an
765
- `ARCH-DR-<arch-dr-decision-id/>` reference to the decision that
766
- supersedes this decision. It is present if and only if the
767
- <arch-dr-decision-status/> is `superseded`.
768
-
769
- - <arch-dr-decision-created/> is the timestamp when this decision was
770
- created, and <arch-dr-decision-modified/> is the timestamp when
771
- this decision was last modified, both in the same ISO-style format
772
- as the **Artifact**'s own timestamps.
773
-
774
- - <arch-dr-decision-context/> captures the situation that forces the
775
- decision - the "why are we even talking about this" part. It
776
- describes the situation as it is, before the decision is made. The
777
- following usually goes into it: the problem or need (what's broken,
778
- missing, or about to change that requires a decision); the forces at
779
- play (technical constraints, business requirements, deadlines, team
780
- skills, existing systems, regulatory/compliance pressures - often
781
- competing, and that tension is the whole point); relevant facts
782
- (current architecture, prior decisions, assumptions, what's known
783
- and what's uncertain); and scope/boundaries (what this decision is
784
- and isn't about). It is written neutrally and factually. It should
785
- not contain the decision itself, nor advocate for an option - a
786
- reader should be able to read it, pause, and arrive at the decision
787
- themselves because the forces make it (nearly) inevitable.
788
-
789
- - <arch-dr-decision-decision/> states what is actually going to be
790
- done - the chosen response to the forces laid out in the context. It
791
- is written in active, assertive voice, in the present or imperative
792
- tense, as a committed position rather than a discussion. The
793
- following usually goes into it: the choice itself (clearly and
794
- unambiguously) and the essence of how (enough of the approach to
795
- make the choice concrete - the mechanism, pattern, or technology -
796
- but not a full implementation specification). It is a declaration,
797
- not a deliberation, usually using the wording "We use..." or "We
798
- do...", active, definite, owning the choice. Avoid hedging ("we
799
- might", "we could consider") - the deliberation already happened,
800
- the decision records the verdict.
801
-
802
- - <arch-dr-decision-rationale/> is the reasoning that justifies the
803
- decision - the bridge that explains why this choice, given those
804
- forces. It answers "Of all the things we could have done, why was
805
- this the right one?". Where the context states the forces and the
806
- decision states the choice, the rationale is the logical connective
807
- tissue between them - it shows that the decision actually follows
808
- from the context. The following usually goes into it: the deciding
809
- factors (which forces from the context carried the most weight, and
810
- how the chosen option satisfies them best); the trade-off reasoning
811
- (what was optimized for and what was knowingly sacrificed - naming
812
- the trade-off is the heart of rationale); why the alternatives lost
813
- (the comparative argument: "option B failed on X, option C cost too
814
- much on Y"); and assumptions and evidence (benchmarks, prior
815
- experience, constraints, or principles the reasoning rests on).
816
-
817
- - <arch-dr-decision-notes/> is *OPTIONAL* and can be omitted when it
818
- does not add genuine value - most decisions won't need it. The
819
- following usually goes into it: information about the decision *process*
820
- (e.g. a weighted decision matrix of considered alternatives);
821
- consequences of the decision (but only when non-obvious downstream
822
- effects need to be called out); and links to strongly related
823
- decisions.
824
-
825
- - <arch-dr-decision-context/>, <arch-dr-decision-decision/>, and
826
- <arch-dr-decision-rationale/> are each just a single paragraph of
827
- concise and brief prose text, usually comprised of just 1 to 3
828
- sentences. The value of a decision is in recording *that* a decision
829
- was made and *why* - not in filling out sections of a document.
830
-
831
- - For the relationship between context, decision, and rationale, good
832
- checks are: the "litmus test" is that context = forces, decision =
833
- response to those forces, rationale = why the decision answers the
834
- forces in the context. The decision should feel like the natural,
835
- almost inevitable answer to the context - if a reader is surprised
836
- by the decision, either the context is missing a force, or the
837
- decision is under-justified. The rationale should make the decision
838
- feel earned, not asserted - if you delete the rationale and
839
- the decision suddenly looks arbitrary, the rationale was doing its
840
- job.
841
-
842
- - In case the element reference is not present, the
843
- entire `- Affects:` bullet point is omitted.
844
-
845
- - In case the <arch-dr-decision-status/> is not `superseded`, the
846
- entire `- Superseded-By:` bullet point is omitted.
847
-
848
- - In case the `NOTES (Background)` content is not present, the
849
- entire `NOTES (Background)` chunk is omitted.
850
-
851
- - A decision *MUST* qualify on all of the following three tenets:
852
-
853
- - **Hard to Reverse**: the cost of changing it later is meaningful
854
- ("Oh my god, this would result in a dramatic refactoring!"). So,
855
- if a decision is easy to reverse, just skip it.
856
-
857
- - **Surprising without Context**: a future architect will look at
858
- the code and wonder ("Why on earth did they do it this way?").
859
- So, if a decision is not surprising, nobody will wonder why.
860
-
861
- - **Result of a Real Trade-Off**: there were genuine alternatives
862
- and one was picked for specific reasons ("We deliberately chose
863
- this, because..."). So, if there was no real alternative,
864
- there's nothing to record beyond "we did the obvious thing."
865
-
866
- - The following typically qualify as a decision:
867
-
868
- - **Architectural shape.** "We're using a monorepo." "The write
869
- model is event-sourced, the read model is projected into PostgreSQL."
870
-
871
- - **Integration patterns between contexts.** "Ordering and Billing
872
- communicate via domain events, not synchronous HTTP."
873
-
874
- - **Technology choices that carry lock-in.** Database, message bus,
875
- auth provider, deployment target. Not every library - just the
876
- ones that would take a quarter to swap out.
877
-
878
- - **Boundary and scope decisions.** "Customer data is owned by the
879
- Customer context; other contexts reference it by ID only." The explicit
880
- no's are as valuable as the yes's.
881
-
882
- - **Deliberate deviations from the obvious path.** "We're using
883
- manual SQL instead of an ORM because X." Anything where a reasonable
884
- reader would assume the opposite. These stop the next engineer from
885
- "fixing" something that was deliberate.
886
-
887
- - **Constraints not visible in the code.** "We can't use AWS because
888
- of compliance requirements." "Response times must be under 200ms because
889
- of the partner API contract."
890
-
891
- - **Rejected alternatives when the rejection is non-obvious.** If
892
- you considered GraphQL and picked REST for subtle reasons, record it -
893
- otherwise someone will suggest GraphQL again in six months.
894
-
895
- Technology Stack (TS)
896
- ---------------------
897
-
898
- The concrete technology products the solution is built upon, organized by
899
- tier and lifecycle phase, recording for each component its chosen product,
900
- its purpose, and the alternatives that were considered but not chosen.
901
-
902
- - Format:
903
-
904
- <format>
905
-
906
- # ARCHITECTURE: TECHNOLOGY STACK (ARCH-TS)
907
-
908
- ✳ Created: **<timestamp-created/>**
909
- ✎ Modified: **<timestamp-modified/>**
910
-
911
- <arch-ts-component/>
912
- <arch-ts-component/>
913
- [...]
914
-
915
- </format>
916
-
917
- - <arch-ts-component/> format:
918
-
919
- <format>
920
-
921
- ## COMPONENT: <arch-ts-component-name/> <a id="ARCH-TS-<arch-ts-component-id/>"></a>
922
-
923
- - Product: <arch-ts-component-product/>
924
- - Alternatives: <arch-ts-component-alternative/>[, ...]
925
- - Coverage: <arch-ts-component-coverage/>
926
- - Realizes: <arch-ts-component-element/>[, ...]
927
- - Tier: <arch-ts-component-tier/>
928
- - When: <arch-ts-component-when/>
929
-
930
- <arch-ts-component-description/>,
931
- **BECAUSE** <arch-ts-component-rationale/>.
932
-
933
- </format>
934
-
935
- - <arch-ts-component/> details:
936
-
937
- - <arch-ts-component-id/>: per-artifact unique "slug" of always 1-3
938
- lower-cased words (concatenated with "-" characters and
939
- in total not longer than 30 characters), derived from
940
- <arch-ts-component-name/>.
941
-
942
- - <arch-ts-component-name/> is a short (2-5 word) summary of the
943
- technology component (e.g. `UI Framework`, `Web Server`, `Relational
944
- Database`).
945
-
946
- - <arch-ts-component-product/> is the concrete product, library, or
947
- framework chosen for this component (e.g. `VueJS`, `Node.js`,
948
- `PostgreSQL`).
949
-
950
- - <arch-ts-component-alternative/> is a product that would also fit
951
- this component but was not chosen (e.g. `React`, `Svelte`).
952
-
953
- - <arch-ts-component-coverage/> is either one or more of the
954
- *Client Aspects* or one or more of the *Server Aspects* defined
955
- below. The general goal is to achieve a maximum coverage of all
956
- aspects per <arch-ts-component-tier/> with the minimum total
957
- number of <arch-ts-component-product/>.
958
-
959
- - <arch-ts-component-element/> is an `ARCH-FV-<arch-fv-component-id/>`
960
- or `ARCH-DP-<arch-dp-node-id/>` reference to the functional element
961
- or deployment node this product realizes.
962
-
963
- - <arch-ts-component-tier/> is the architectural tier the component
964
- belongs to, one of:
965
-
966
- - `Client`: Runs on the client side (e.g. browser, desktop, mobile).
967
- - `Server`: Runs on the server side (e.g. backend, application, API).
968
-
969
- - <arch-ts-component-when/> is the lifecycle phase in which the
970
- component is relevant, one of:
971
-
972
- - `Build-Time`: Used during development, compilation, or packaging.
973
- - `Run-Time`: Used while the solution executes in production.
974
-
975
- - <arch-ts-component-description/> is a concise paragraph (1-3
976
- sentences) of prose describing how the product is used within the
977
- solution and how it fits into the overall technology stack.
978
-
979
- - <arch-ts-component-rationale/> is the 1-sentence rationale ("why")
980
- for choosing this product over the alternatives.
981
-
982
- - In case the element reference is not present, the
983
- entire `- Realizes:` bullet point is omitted.
984
-
985
- - In case no alternatives were considered, the
986
- entire `- Alternatives:` bullet point is omitted.
987
-
988
- - In case the rationale is not present, the
989
- entire `, **BECAUSE** [...]` clause is omitted.
990
-
991
- - The known *Client Aspects* which usually have to be covered (at least for
992
- clients in a Rich-Client architecture):
993
-
994
- - **Interface Theme**:
995
- Style Reset, Shape, Color, Gradient, Shadow, Font, Icon.
996
-
997
- - **Interface Widgets**:
998
- Icon, Label, Text Paragraph, Image, Form, Text-Field, Text-Area,
999
- Date Picker, Toggle, Radio Button, Checkbox, Select List, Slider,
1000
- Progress Bar, Hyperlink, Popup Menu, Dropdown Menu, Toolbar, Tooltip,
1001
- Tab, Pill, Breadcrumb, Pagination, Badge, Alert, Panel, Modal, Table,
1002
- Scrollbar, Carousel.
1003
-
1004
- - **Interface Layouting**:
1005
- Responsive Design, Media Query, Frame, Grid, Padding, Border,
1006
- Margin, Alignment, Force, Magnetism.
1007
-
1008
- - **Interface Effects**:
1009
- Transition, Transformation, Keyframes, Easing Function, Sound
1010
- Effect, Physics.
1011
-
1012
- - **Interface Interactions**:
1013
- Mouse, Keyboard, Touchscreen, Gesture, Clipboard, Drag & Drop.
1014
-
1015
- - **Interface States**:
1016
- Rendered, Enabled, Visible, Focused, Warning, Error, Floating.
1017
-
1018
- - **Interface Mask**:
1019
- Markup Loading, Markup Generation, Virtual DOM, Text, Bitmaps,
1020
- Vectors, 2D/3D Canvas, Accessibility.
1021
-
1022
- - **Interface Internationalization**:
1023
- Text Internationalization (I18N).
1024
-
1025
- - **Data Conversion**:
1026
- Value Formatting, Value Parsing, Localization (L10N).
1027
-
1028
- - **Data Binding**:
1029
- Reactive, Observer, Unidirectional, Bidirectional, Incremental.
1030
-
1031
- - **Presentation Model**:
1032
- Parameter Value, Command Value, State Value, Data Value, Event
1033
- Value, Value Validation, Presentation Logic.
1034
-
1035
- - **Dialog Navigation**:
1036
- Deep Linking, Routing, Dialog Flow.
1037
-
1038
- - **Dialog Automation**:
1039
- Dialog Macros, Click-Through, Smoke Testing.
1040
-
1041
- - **Dialog Communication**:
1042
- Service, Event, Model, Socket, Hooks.
1043
-
1044
- - **Dialog Life-Cycle**:
1045
- Component States, Component State Transitions.
1046
-
1047
- - **Dialog Structure**:
1048
- Component, Model/View/Controller Roles, Hierarchical Composition.
1049
-
1050
- - **State Persistence**:
1051
- Local Storage, Cookies, Caching.
1052
-
1053
- - **Business Model**:
1054
- Entity, Field, Relationship, Universally Unique Identifiers (UUID).
1055
-
1056
- - **Use-Case Authorization**:
1057
- User Experience, Dialog Restriction, User, Group, Role, Use-Case,
1058
- Data, Access.
1059
-
1060
- - **Client Networking**:
1061
- Request/Response, Synchronization, Push, Pull, Pulled-Push,
1062
- REST, GraphQL, Authentication, Session.
1063
-
1064
- - **Environment Detection**:
1065
- Runtime Detection, Feature Detection.
1066
-
1067
- - The known *Server Aspects* which usually have to be covered (at least for
1068
- servers, sometimes called Thin-Servers, in a Rich-Client architecture):
1069
-
1070
- - **Environment Detection**:
1071
- Detect the run-time environment, like underlying operating
1072
- system, execution platform, network topology, feature toggles, etc.
1073
-
1074
- - **Argument Parsing**:
1075
- Parse options and arguments of the Command-Line Interface (CLI)
1076
- to bootstrap application parameters.
1077
-
1078
- - **Configuration Parsing**:
1079
- Load and parse directives from a configuration file to bootstrap
1080
- application parameters.
1081
-
1082
- - **Process Daemonizing**:
1083
- Detach from the startup terminal and host process in order to run
1084
- fully independently.
1085
-
1086
- - **Process Management**:
1087
- (Pre-)fork child processes and/or threads of execution and monitor
1088
- and control them during the life-cycle of the application.
1089
-
1090
- - **Component Management**:
1091
- Structure the code into components, instantiate them at run-time
1092
- and manage them in a stateful component life-cycle.
1093
-
1094
- - **Component Communication**:
1095
- Provide inter-component communication mechanisms like events, hooks,
1096
- registry, etc.
1097
-
1098
- - **Server Networking**:
1099
- Listen to network sockets, accept connections and manage
1100
- request/response and message communication.
1101
-
1102
- - **Peer Information**:
1103
- Determine unique identification and add-on information about the
1104
- client peer.
1105
-
1106
- - **Session Handling**:
1107
- Manage secured per-connection sessions to keep state between
1108
- communication requests and/or client sessions.
1109
-
1110
- - **User Authentication**:
1111
- Determine and validate the unique identity of the user communicating
1112
- over the current network connection.
1113
-
1114
- - **Request Validation**:
1115
- Validate the syntactical and semantical compliance of the requests
1116
- and sanitize the requests.
1117
-
1118
- - **Request Processing**:
1119
- Process the request by dispatching execution according to the
1120
- provided request and determined context information.
1121
-
1122
- - **Role Authorization**:
1123
- Determine whether the role of the current user is allowed to execute
1124
- the current request.
1125
-
1126
- - **Client Networking**:
1127
- Provide mechanisms to connect to peers over the network and perform
1128
- request/response and/or publish/subscribe communication.
1129
-
1130
- - **Task Scheduling**:
1131
- Schedule and execute recurring tasks independent of regular I/O
1132
- operations.
1133
-
1134
- - **Execution Tracing**:
1135
- Provide mechanisms for tracing the execution by logging event and
1136
- measurement information at certain points of interest.
1137
-
1138
- - **Database Access**:
1139
- Map in-memory domain entities onto a data-store-dependent persistent
1140
- data structure.
1141
-
1142
- - **Database Connectivity**:
1143
- Locally or remotely connect the database access layer to the
1144
- underlying data store.
1145
-
1146
- - **Database Schema**:
1147
- Create, update or downgrade the data schema inside the underlying
1148
- data store.
1149
-
1150
- - **Database Bootstrapping**:
1151
- Create, update or downgrade both mandatory bootstrapping and optional
1152
- domain-specific data inside the underlying data store.
1153
-
1154
- - Export: `export.md`
1155
-
1156
- The components rendered as a single, compact Markdown table -- one
1157
- row per <arch-ts-component/>, sorted by <arch-ts-component-tier/>
1158
- then <arch-ts-component-when/> -- with the columns:
1159
-
1160
- - `Component` (<arch-ts-component-name/>)
1161
- - `Product` (**<arch-ts-component-product/>**)
1162
- - `Tier` (<arch-ts-component-tier/>)
1163
- - `When` (<arch-ts-component-when/>)
1164
- - `Coverage` (*<arch-ts-component-coverage/>*)