@rse/ase 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "homepage": "http://github.com/rse/ase",
7
7
  "repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
8
8
  "bugs": { "url": "http://github.com/rse/ase/issues" },
9
- "version": "0.9.0",
9
+ "version": "0.9.1",
10
10
  "license": "GPL-3.0-only",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -0,0 +1,667 @@
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** **Architecture (ARCH)**
11
+ is stored under `docs/arch/ARCH-<artifact-id/>-<artifact-slug/>.md`,
12
+ relative to the project root directory, and with <artifact-slug/> being
13
+ derived from <artifact-name/> (see below) by lower-casing and using `-`
14
+ characters instead of spaces.
15
+
16
+ Each **Artifact** contains two timestamps: the <timestamp-created/>
17
+ is the timestamp when this **Artifact** was created. The
18
+ <timestamp-modified/> is the timestamp when this **Artifact** was last
19
+ modified. Both use an ISO-style format value. The value of both can be
20
+ determined by a call to the `ase_timestamp(format: "yyyy-LL-dd HH:mm")`
21
+ tool of the `ase` MCP server and use the `text` field of its response.
22
+ Whenever an **Artifact** is updated, the <timestamp-modified/> *MUST* be
23
+ updated, too.
24
+
25
+ The **Artifact Set** **Architecture (ARCH)** consists of the following
26
+ distinct **Artifact**s (listed under their <artifact-name/> and their
27
+ <artifact-id/>):
28
+
29
+ - **Context View (CV)**:
30
+ The relationships, dependencies, and interactions between the solution
31
+ and its environment, defining the system's scope, external entities,
32
+ and boundaries.
33
+
34
+ - **Functionality View (FV)**:
35
+ The functional elements of the solution, their responsibilities,
36
+ interfaces, and primary interactions, describing *what* the system does
37
+ at runtime.
38
+
39
+ - **Information View (IV)**:
40
+ The way the solution stores, manages, manipulates, and distributes
41
+ information, defining the static data structure and dynamic information
42
+ flow.
43
+
44
+ - **Concurrency View (CO)**:
45
+ The concurrency structure of the solution, mapping functional elements
46
+ to processes and threads, and defining how they coordinate and
47
+ communicate.
48
+
49
+ - **Development View (DV)**:
50
+ The architecture supporting the software development process, defining
51
+ the module organization, build approach, and codeline conventions.
52
+
53
+ - **Deployment View (DP)**:
54
+ The environment into which the solution is deployed, mapping software
55
+ elements to the runtime platform, hardware, and network topology.
56
+
57
+ - **Operations View (OV)**:
58
+ The way the solution is operated, administered, and supported in
59
+ production, defining installation, monitoring, and management concerns.
60
+
61
+ - **Quality Perspectives (QP)**:
62
+ How the Non-Functional Requirements (NR) are addressed.
63
+
64
+ Context View (CV)
65
+ -----------------
66
+
67
+ The relationships, dependencies, and interactions between the solution
68
+ and its environment, defining the system's scope, external entities,
69
+ and boundaries.
70
+
71
+ - Format:
72
+
73
+ <format>
74
+
75
+ # ARCHITECTURE: CONTEXT VIEW (ARCH-CV)
76
+
77
+ ✳ Created: **<timestamp-created/>**
78
+ ✎ Modified: **<timestamp-modified/>**
79
+
80
+ <arch-cv-entity/>
81
+ <arch-cv-entity/>
82
+ [...]
83
+
84
+ </format>
85
+
86
+ - <arch-cv-entity/> format:
87
+
88
+ <format>
89
+
90
+ ## ENTITY ARCH-CV-<arch-cv-entity-id/>: <arch-cv-entity-name/>
91
+
92
+ - Kind: <arch-cv-entity-kind/>
93
+ - Direction: <arch-cv-entity-direction/>
94
+ - Interface: <arch-cv-entity-interface/>
95
+ - Data: <arch-cv-entity-data/>
96
+
97
+ <arch-cv-entity-description/>
98
+ (why: <arch-cv-entity-rationale/>)
99
+
100
+ </format>
101
+
102
+ - <arch-cv-entity/> details:
103
+
104
+ - <arch-cv-entity-id/>: per-artifact unique "slug" of always 1-3
105
+ lower-cased words (concatenated with "-" characters and
106
+ in total not longer than 30 characters), derived from
107
+ <arch-cv-entity-name/>.
108
+
109
+ - <arch-cv-entity-name/> is a short (2-5 word) summary of the
110
+ external entity the solution interacts with (e.g. `Payment
111
+ Gateway`, `Identity Provider`, `End User`).
112
+
113
+ - <arch-cv-entity-kind/> is one of:
114
+
115
+ - `Person`: A human actor interacting with the solution.
116
+ - `System`: An external software system the solution integrates with.
117
+ - `Service`: A third-party or managed service the solution consumes.
118
+ - `Datastore`: An external data repository the solution reads from or writes to.
119
+ - `Device`: A physical device or sensor the solution communicates with.
120
+ - `Organization`: An external organizational party (e.g. regulator, vendor).
121
+
122
+ - <arch-cv-entity-direction/> is the flow of interaction relative to
123
+ the solution: `Inbound` (entity drives the solution), `Outbound`
124
+ (solution drives the entity), or `Bidirectional` (both directions).
125
+
126
+ - <arch-cv-entity-interface/> is how the interaction happens
127
+ (e.g. REST API, message queue, file exchange, web UI).
128
+
129
+ - <arch-cv-entity-data/> is the principal information exchanged
130
+ across the boundary with this entity.
131
+
132
+ - <arch-cv-entity-description/> is a concise paragraph (1-3
133
+ sentences) of prose describing the relationship and dependency
134
+ between the solution and the external entity.
135
+
136
+ - <arch-cv-entity-rationale/> is the 1-sentence rationale ("why")
137
+ for the entity being part of the system context.
138
+
139
+ - In case the rationale is not present, the
140
+ entire `(why: [...])` chunk is omitted.
141
+
142
+ Functionality View (FV)
143
+ -----------------------
144
+
145
+ The functional elements of the solution, their responsibilities,
146
+ interfaces, and primary interactions, describing *what* the system does
147
+ at runtime.
148
+
149
+ - Format:
150
+
151
+ <format>
152
+
153
+ # ARCHITECTURE: FUNCTIONALITY VIEW (ARCH-FV)
154
+
155
+ ✳ Created: **<timestamp-created/>**
156
+ ✎ Modified: **<timestamp-modified/>**
157
+
158
+ <arch-fv-element/>
159
+ <arch-fv-element/>
160
+ [...]
161
+
162
+ </format>
163
+
164
+ - <arch-fv-element/> format:
165
+
166
+ <format>
167
+
168
+ ## ELEMENT ARCH-FV-<arch-fv-element-id/>: <arch-fv-element-name/>
169
+
170
+ - Kind: <arch-fv-element-kind/>
171
+ - Responsibility: <arch-fv-element-responsibility/>
172
+ - Interface: <arch-fv-element-interface/>
173
+ - Depends On: <arch-fv-element-dependency/>, [...]
174
+
175
+ <arch-fv-element-description/>
176
+ (why: <arch-fv-element-rationale/>)
177
+
178
+ </format>
179
+
180
+ - <arch-fv-element/> details:
181
+
182
+ - <arch-fv-element-id/>: per-artifact unique "slug" of always 1-3
183
+ lower-cased words (concatenated with "-" characters and
184
+ in total not longer than 30 characters), derived from
185
+ <arch-fv-element-name/>.
186
+
187
+ - <arch-fv-element-name/> is a short (2-5 word) summary of the
188
+ functional element (e.g. `Authentication Service`, `Order
189
+ Processor`, `Notification Dispatcher`).
190
+
191
+ - <arch-fv-element-kind/> is one of:
192
+
193
+ - `Component`: A cohesive unit of functionality with a defined interface.
194
+ - `Service`: An independently deployable provider of functionality.
195
+ - `Module`: A logical grouping of related functionality within a component.
196
+ - `Connector`: A mediator that conveys interactions between elements (e.g. bus, gateway).
197
+ - `Subsystem`: A larger composite grouping several components.
198
+
199
+ - <arch-fv-element-responsibility/> is the 1-sentence statement of
200
+ the single, primary responsibility the element owns.
201
+
202
+ - <arch-fv-element-interface/> is how other elements interact with
203
+ this element (e.g. REST API, library API, message topic, CLI).
204
+
205
+ - <arch-fv-element-dependency/> is an `ARCH-FV-<arch-fv-element-id/>`
206
+ reference to another functional element this element depends on
207
+ at runtime.
208
+
209
+ - <arch-fv-element-description/> is a concise paragraph (1-3
210
+ sentences) of prose describing *what* the element does and how it
211
+ collaborates with the elements it depends on.
212
+
213
+ - <arch-fv-element-rationale/> is the 1-sentence rationale ("why")
214
+ for the element's existence and boundary.
215
+
216
+ - In case an element has no dependencies at all, the
217
+ entire `- Depends On:` bullet point is omitted.
218
+
219
+ - In case the rationale is not present, the
220
+ entire `(why: [...])` chunk is omitted.
221
+
222
+ Information View (IV)
223
+ ---------------------
224
+
225
+ The way the solution stores, manages, manipulates, and distributes
226
+ information, defining the static data structure and dynamic information
227
+ flow.
228
+
229
+ - Format:
230
+
231
+ <format>
232
+
233
+ # ARCHITECTURE: INFORMATION VIEW (ARCH-IV)
234
+
235
+ ✳ Created: **<timestamp-created/>**
236
+ ✎ Modified: **<timestamp-modified/>**
237
+
238
+ <arch-iv-aspect/>
239
+ <arch-iv-aspect/>
240
+ [...]
241
+
242
+ </format>
243
+
244
+ - <arch-iv-aspect/> format:
245
+
246
+ <format>
247
+
248
+ ## ASPECT ARCH-IV-<arch-iv-aspect-id/>: <arch-iv-aspect-name/>
249
+
250
+ - Concern: <arch-iv-aspect-concern/>
251
+ - Entities: <arch-iv-aspect-entity/>, [...]
252
+ - Owner: <arch-iv-aspect-owner/>
253
+ - Lifecycle: <arch-iv-aspect-lifecycle/>
254
+
255
+ <arch-iv-aspect-description/>
256
+ (why: <arch-iv-aspect-rationale/>)
257
+
258
+ </format>
259
+
260
+ - <arch-iv-aspect/> details:
261
+
262
+ - <arch-iv-aspect-id/>: per-artifact unique "slug" of always 1-3
263
+ lower-cased words (concatenated with "-" characters and
264
+ in total not longer than 30 characters), derived from
265
+ <arch-iv-aspect-name/>.
266
+
267
+ - <arch-iv-aspect-name/> is a short (2-5 word) summary of the
268
+ information aspect (e.g. `Order Persistence`, `Event Stream`,
269
+ `Cache Coherency`).
270
+
271
+ - <arch-iv-aspect-concern/> is the information-handling concern the
272
+ aspect addresses, one of `Persistence`, `Flow`, `Ownership`,
273
+ `Consistency`, `Replication`, `Caching`, `Retention`, or
274
+ `Migration`.
275
+
276
+ - <arch-iv-aspect-entity/> is a `SPEC-DM-<spec-dm-entity-id/>`
277
+ reference to a corresponding entity of the Data Model **Artifact**
278
+ the aspect governs.
279
+
280
+ - <arch-iv-aspect-owner/> is an `ARCH-FV-<arch-fv-element-id/>`
281
+ reference to the functional element that owns this information.
282
+
283
+ - <arch-iv-aspect-lifecycle/> is how the information comes into
284
+ being, changes, and is disposed of (e.g. `created on order,
285
+ retained 7 years, then purged`).
286
+
287
+ - <arch-iv-aspect-description/> is a concise paragraph (1-3
288
+ sentences) of prose describing how the solution stores, manages,
289
+ or distributes the information and how its consistency is upheld.
290
+
291
+ - <arch-iv-aspect-rationale/> is the 1-sentence rationale ("why")
292
+ for handling the information this way.
293
+
294
+ - In case the entity or owner references are not present, the
295
+ respective bullet point is omitted.
296
+
297
+ - In case the rationale is not present, the
298
+ entire `(why: [...])` chunk is omitted.
299
+
300
+ Concurrency View (CO)
301
+ ---------------------
302
+
303
+ The concurrency structure of the solution, mapping functional elements
304
+ to processes and threads, and defining how they coordinate and
305
+ communicate.
306
+
307
+ - Format:
308
+
309
+ <format>
310
+
311
+ # ARCHITECTURE: CONCURRENCY VIEW (ARCH-CO)
312
+
313
+ ✳ Created: **<timestamp-created/>**
314
+ ✎ Modified: **<timestamp-modified/>**
315
+
316
+ <arch-co-unit/>
317
+ <arch-co-unit/>
318
+ [...]
319
+
320
+ </format>
321
+
322
+ - <arch-co-unit/> format:
323
+
324
+ <format>
325
+
326
+ ## UNIT ARCH-CO-<arch-co-unit-id/>: <arch-co-unit-name/>
327
+
328
+ - Kind: <arch-co-unit-kind/>
329
+ - Hosts: <arch-co-unit-element/>, [...]
330
+ - Multiplicity: <arch-co-unit-multiplicity/>
331
+ - Coordination: <arch-co-unit-coordination/>
332
+
333
+ <arch-co-unit-description/>
334
+ (why: <arch-co-unit-rationale/>)
335
+
336
+ </format>
337
+
338
+ - <arch-co-unit/> details:
339
+
340
+ - <arch-co-unit-id/>: per-artifact unique "slug" of always 1-3
341
+ lower-cased words (concatenated with "-" characters and
342
+ in total not longer than 30 characters), derived from
343
+ <arch-co-unit-name/>.
344
+
345
+ - <arch-co-unit-name/> is a short (2-5 word) summary of the
346
+ concurrency unit (e.g. `Web Worker Pool`, `Background Scheduler`,
347
+ `Ingest Queue Consumer`).
348
+
349
+ - <arch-co-unit-kind/> is one of:
350
+
351
+ - `Process`: An independent OS process with its own address space.
352
+ - `Thread`: A thread of execution within a process.
353
+ - `Pool`: A managed group of interchangeable workers.
354
+ - `Queue`: An asynchronous buffer decoupling producers and consumers.
355
+ - `EventLoop`: A single-threaded cooperative scheduler of tasks.
356
+
357
+ - <arch-co-unit-element/> is an `ARCH-FV-<arch-fv-element-id/>`
358
+ reference to a functional element that runs inside this
359
+ concurrency unit.
360
+
361
+ - <arch-co-unit-multiplicity/> is how many instances of the unit run
362
+ (e.g. `1`, `1 per CPU core`, `0..n auto-scaled`).
363
+
364
+ - <arch-co-unit-coordination/> is the mechanism by which the unit
365
+ coordinates or communicates with other units (e.g. `shared queue`,
366
+ `mutex`, `message passing`, `optimistic locking`).
367
+
368
+ - <arch-co-unit-description/> is a concise paragraph (1-3 sentences)
369
+ of prose describing how the unit executes and how it avoids or
370
+ manages contention, races, and deadlocks.
371
+
372
+ - <arch-co-unit-rationale/> is the 1-sentence rationale ("why") for
373
+ the chosen concurrency structure.
374
+
375
+ - In case the unit hosts no functional elements, the
376
+ entire `- Hosts:` bullet point is omitted.
377
+
378
+ - In case the rationale is not present, the
379
+ entire `(why: [...])` chunk is omitted.
380
+
381
+ Development View (DV)
382
+ ---------------------
383
+
384
+ The architecture supporting the software development process, defining
385
+ the module organization, build approach, and codeline conventions.
386
+
387
+ - Format:
388
+
389
+ <format>
390
+
391
+ # ARCHITECTURE: DEVELOPMENT VIEW (ARCH-DV)
392
+
393
+ ✳ Created: **<timestamp-created/>**
394
+ ✎ Modified: **<timestamp-modified/>**
395
+
396
+ <arch-dv-aspect/>
397
+ <arch-dv-aspect/>
398
+ [...]
399
+
400
+ </format>
401
+
402
+ - <arch-dv-aspect/> format:
403
+
404
+ <format>
405
+
406
+ ## ASPECT ARCH-DV-<arch-dv-aspect-id/>: <arch-dv-aspect-name/>
407
+
408
+ - Category: <arch-dv-aspect-category/>
409
+
410
+ <arch-dv-aspect-description/>
411
+ (why: <arch-dv-aspect-rationale/>)
412
+
413
+ </format>
414
+
415
+ - <arch-dv-aspect/> details:
416
+
417
+ - <arch-dv-aspect-id/>: per-artifact unique "slug" of always 1-3
418
+ lower-cased words (concatenated with "-" characters and
419
+ in total not longer than 30 characters), derived from
420
+ <arch-dv-aspect-name/>.
421
+
422
+ - <arch-dv-aspect-name/> is a short (2-5 word) summary of the
423
+ development aspect (e.g. `Module Layering`, `Build Pipeline`,
424
+ `Branching Model`).
425
+
426
+ - <arch-dv-aspect-category/> is the development concern the aspect
427
+ governs, one of `Structure` (module/package organization),
428
+ `Build` (compilation and packaging), `Dependency` (dependency
429
+ management and layering rules), `Codeline` (branching, merging,
430
+ versioning), `Standardization` (coding standards and conventions),
431
+ or `Tooling` (development tools and automation).
432
+
433
+ - <arch-dv-aspect-description/> is a concise paragraph (1-3
434
+ sentences) of prose describing the development convention or
435
+ structure and the rule developers must follow.
436
+
437
+ - <arch-dv-aspect-rationale/> is the 1-sentence rationale ("why")
438
+ for the development aspect.
439
+
440
+ - In case the rationale is not present, the
441
+ entire `(why: [...])` chunk is omitted.
442
+
443
+ Deployment View (DP)
444
+ --------------------
445
+
446
+ The environment into which the solution is deployed, mapping software
447
+ elements to the runtime platform, hardware, and network topology.
448
+
449
+ - Format:
450
+
451
+ <format>
452
+
453
+ # ARCHITECTURE: DEPLOYMENT VIEW (ARCH-DP)
454
+
455
+ ✳ Created: **<timestamp-created/>**
456
+ ✎ Modified: **<timestamp-modified/>**
457
+
458
+ <arch-dp-node/>
459
+ <arch-dp-node/>
460
+ [...]
461
+
462
+ </format>
463
+
464
+ - <arch-dp-node/> format:
465
+
466
+ <format>
467
+
468
+ ## NODE ARCH-DP-<arch-dp-node-id/>: <arch-dp-node-name/>
469
+
470
+ - Kind: <arch-dp-node-kind/>
471
+ - Platform: <arch-dp-node-platform/>
472
+ - Hosts: <arch-dp-node-element/>, [...]
473
+ - Network: <arch-dp-node-network/>
474
+
475
+ <arch-dp-node-description/>
476
+ (why: <arch-dp-node-rationale/>)
477
+
478
+ </format>
479
+
480
+ - <arch-dp-node/> details:
481
+
482
+ - <arch-dp-node-id/>: per-artifact unique "slug" of always 1-3
483
+ lower-cased words (concatenated with "-" characters and
484
+ in total not longer than 30 characters), derived from
485
+ <arch-dp-node-name/>.
486
+
487
+ - <arch-dp-node-name/> is a short (2-5 word) summary of the
488
+ deployment node (e.g. `Web Tier`, `Database Cluster`, `Edge CDN`).
489
+
490
+ - <arch-dp-node-kind/> is one of:
491
+
492
+ - `Server`: A physical or virtual machine.
493
+ - `Container`: A containerized runtime (e.g. Docker, OCI).
494
+ - `Cluster`: A managed group of nodes (e.g. Kubernetes cluster).
495
+ - `Function`: A serverless / function-as-a-service runtime.
496
+ - `Device`: An edge or client device.
497
+ - `Managed`: A managed cloud service (e.g. managed database, queue).
498
+
499
+ - <arch-dp-node-platform/> is the runtime platform of the node
500
+ (e.g. `Linux x86-64`, `Kubernetes 1.30`, `AWS Lambda (Node.js)`).
501
+
502
+ - <arch-dp-node-element/> is an `ARCH-FV-<arch-fv-element-id/>`
503
+ reference to a functional element deployed onto this node.
504
+
505
+ - <arch-dp-node-network/> is the network placement and connectivity
506
+ of the node (e.g. `public subnet, TLS 443`, `private VLAN`).
507
+
508
+ - <arch-dp-node-description/> is a concise paragraph (1-3 sentences)
509
+ of prose describing the node, its sizing, and its place in the
510
+ deployment topology.
511
+
512
+ - <arch-dp-node-rationale/> is the 1-sentence rationale ("why") for
513
+ the node's placement and platform choice.
514
+
515
+ - In case the node hosts no functional elements, the
516
+ entire `- Hosts:` bullet point is omitted.
517
+
518
+ - In case the rationale is not present, the
519
+ entire `(why: [...])` chunk is omitted.
520
+
521
+ Operations View (OV)
522
+ --------------------
523
+
524
+ The way the solution is operated, administered, and supported in
525
+ production, defining installation, monitoring, and management concerns.
526
+
527
+ - Format:
528
+
529
+ <format>
530
+
531
+ # ARCHITECTURE: OPERATIONS VIEW (ARCH-OV)
532
+
533
+ ✳ Created: **<timestamp-created/>**
534
+ ✎ Modified: **<timestamp-modified/>**
535
+
536
+ <arch-ov-concern/>
537
+ <arch-ov-concern/>
538
+ [...]
539
+
540
+ </format>
541
+
542
+ - <arch-ov-concern/> format:
543
+
544
+ <format>
545
+
546
+ ## CONCERN ARCH-OV-<arch-ov-concern-id/>: <arch-ov-concern-name/>
547
+
548
+ - Category: <arch-ov-concern-category/>
549
+ - Element: <arch-ov-concern-element/>, [...]
550
+
551
+ <arch-ov-concern-description/>
552
+ (why: <arch-ov-concern-rationale/>)
553
+
554
+ </format>
555
+
556
+ - <arch-ov-concern/> details:
557
+
558
+ - <arch-ov-concern-id/>: per-artifact unique "slug" of always 1-3
559
+ lower-cased words (concatenated with "-" characters and
560
+ in total not longer than 30 characters), derived from
561
+ <arch-ov-concern-name/>.
562
+
563
+ - <arch-ov-concern-name/> is a short (2-5 word) summary of the
564
+ operational concern (e.g. `Rolling Deployment`, `Metrics
565
+ Collection`, `Backup and Restore`).
566
+
567
+ - <arch-ov-concern-category/> is the category of the concern,
568
+ one of `Installation`, `Configuration`, `Provisioning`,
569
+ `Monitoring`, `Logging`, `Alerting`, `Backup`, `Recovery`,
570
+ `Upgrade`, or `Support`.
571
+
572
+ - <arch-ov-concern-element/> is an `ARCH-FV-<arch-fv-element-id/>`
573
+ or `ARCH-DP-<arch-dp-node-id/>` reference to the functional
574
+ element or deployment node the concern applies to.
575
+
576
+ - <arch-ov-concern-description/> is a concise paragraph (1-3
577
+ sentences) of prose describing how the concern is handled in
578
+ production and which procedures or tools support it.
579
+
580
+ - <arch-ov-concern-rationale/> is the 1-sentence rationale ("why")
581
+ for the operational approach.
582
+
583
+ - In case the element reference is not present, the
584
+ entire `- Element:` bullet point is omitted.
585
+
586
+ - In case the rationale is not present, the
587
+ entire `(why: [...])` chunk is omitted.
588
+
589
+ Quality Perspectives (QP)
590
+ -------------------------
591
+
592
+ How the Non-Functional Requirements (NR) are addressed.
593
+
594
+ - Format:
595
+
596
+ <format>
597
+
598
+ # ARCHITECTURE: QUALITY PERSPECTIVES (ARCH-QP)
599
+
600
+ ✳ Created: **<timestamp-created/>**
601
+ ✎ Modified: **<timestamp-modified/>**
602
+
603
+ <arch-qp-perspective/>
604
+ <arch-qp-perspective/>
605
+ [...]
606
+
607
+ </format>
608
+
609
+ - <arch-qp-perspective/> format:
610
+
611
+ <format>
612
+
613
+ ## PERSPECTIVE ARCH-QP-<arch-qp-perspective-id/>: <arch-qp-perspective-name/>
614
+
615
+ - Quality: <arch-qp-perspective-quality/>
616
+ - Addresses: <arch-qp-perspective-requirement/>, [...]
617
+ - Tactic: <arch-qp-perspective-tactic/>
618
+ - Affects: <arch-qp-perspective-element/>, [...]
619
+
620
+ <arch-qp-perspective-description/>
621
+ (why: <arch-qp-perspective-rationale/>)
622
+
623
+ </format>
624
+
625
+ - <arch-qp-perspective/> details:
626
+
627
+ - <arch-qp-perspective-id/>: per-artifact unique "slug" of always
628
+ 1-3 lower-cased words (concatenated with "-" characters and
629
+ in total not longer than 30 characters), derived from
630
+ <arch-qp-perspective-name/>.
631
+
632
+ - <arch-qp-perspective-name/> is a short (2-5 word) summary of the
633
+ quality perspective (e.g. `Horizontal Scaling`, `Defense in
634
+ Depth`, `Graceful Degradation`).
635
+
636
+ - <arch-qp-perspective-quality/> is the quality attribute the
637
+ perspective addresses, one of `Performance`, `Scalability`,
638
+ `Reliability`, `Availability`, `Security`, `Privacy`,
639
+ `Usability`, `Accessibility`, `Maintainability`, `Portability`,
640
+ `Compatibility`, or `Compliance` (aligned with the Non-Functional
641
+ Requirements categories).
642
+
643
+ - <arch-qp-perspective-requirement/> is a
644
+ `SPEC-NR-<spec-nr-requirement-id/>` reference to the corresponding
645
+ Non-Functional Requirement (NR) **Aspect** the perspective addresses.
646
+
647
+ - <arch-qp-perspective-tactic/> is the architectural tactic or
648
+ strategy applied to achieve the quality (e.g. `stateless
649
+ replication behind a load balancer`, `read-through cache`, `circuit
650
+ breaker`).
651
+
652
+ - <arch-qp-perspective-element/> is an `ARCH-FV-<arch-fv-element-id/>`
653
+ or `ARCH-DP-<arch-dp-node-id/>` reference to the functional
654
+ element or deployment node the tactic affects.
655
+
656
+ - <arch-qp-perspective-description/> is a concise paragraph (1-3
657
+ sentences) of prose describing how the architecture satisfies the
658
+ quality attribute across the affected elements.
659
+
660
+ - <arch-qp-perspective-rationale/> is the 1-sentence rationale
661
+ ("why") for the chosen tactic over alternatives.
662
+
663
+ - In case the element reference is not present, the
664
+ entire `- Affects:` bullet point is omitted.
665
+
666
+ - In case the rationale is not present, the
667
+ entire `(why: [...])` chunk is omitted.