@rse/ase 2.0.5 → 2.0.7
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/dst/ase-agent-definition-api.d.ts +2 -0
- package/dst/ase-agent-definition-core.js +24 -3
- package/dst/ase-agent-fleet.js +2 -1
- package/dst/ase-agent-runtime-engine.js +22 -4
- package/dst/ase-agent-runtime-tool.js +10 -8
- package/dst/ase-agent-runtime.js +8 -4
- package/dst/ase-config-schema.js +1 -1
- package/dst/ase-man-catalog.js +1 -1
- package/dst/ase-setup-settings.js +111 -1
- package/dst/ase-setup.js +19 -7
- package/dst/ase-spec.js +184 -49
- package/dst/ase-task-board-tui-model.js +8 -1
- package/dst/ase-task-board-tui.js +26 -2
- package/dst/ase-task-board-web-client.js +10 -10
- package/dst/ase-task-store-plugin-gitea.js +3 -3
- package/dst/man/ase-agent-adhoc.md +25 -6
- package/dst/man/ase-agent-condenser.md +7 -0
- package/dst/man/ase-agent-editor.md +7 -0
- package/dst/man/ase-agent-estimator.md +7 -0
- package/dst/man/ase-agent-fleet.md +7 -4
- package/dst/man/ase-agent-implementer.md +7 -0
- package/dst/man/ase-agent-integrator.md +7 -0
- package/dst/man/ase-agent-qualifier.md +7 -0
- package/dst/man/ase-agent-rebooter.md +7 -0
- package/dst/man/ase-agent-researcher.md +7 -0
- package/dst/man/ase-artifact.md +1 -1
- package/dst/man/ase-config.md +5 -3
- package/dst/man/ase-mcp.md +1 -1
- package/dst/man/ase-setup-install.md +10 -1
- package/dst/man/ase-setup-status.md +6 -0
- package/dst/man/ase-setup-uninstall.md +3 -1
- package/dst/man/ase-setup-update.md +3 -0
- package/dst/man/ase-setup.md +4 -4
- package/dst/man/ase-spec-export.md +14 -3
- package/dst/man/ase-spec-init.md +10 -1
- package/dst/man/ase-spec-lint.md +2 -1
- package/dst/man/ase-spec-preview.md +10 -1
- package/dst/man/ase-spec-query.md +96 -0
- package/dst/man/ase-spec.md +32 -11
- package/dst/man/ase.md +3 -3
- package/package.json +20 -17
- package/plugin/.claude-plugin/icon.png +0 -0
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/meta/ase-common-task.md +9 -1
- package/plugin/meta/ase-control.md +14 -0
- package/plugin/meta/ase-format-spec.md +29 -5
- package/plugin/meta/ase-format-specbook.md +427 -47
- package/plugin/meta/ase-format-specbook.yaml +189 -87
- package/plugin/meta/ase-skill.md +7 -0
- package/plugin/mods/ase-mods-common.ts +36 -6
- package/plugin/mods/ase-mods-evaluate.ts +227 -0
- package/plugin/mods/ase-mods-grill.ts +1 -30
- package/plugin/mods/ase-mods-help-browse.ts +18 -13
- package/plugin/mods/ase-mods-help-find.ts +17 -9
- package/plugin/mods/ase-mods-help-hint.ts +1 -1
- package/plugin/mods/ase-mods.ts +23 -17
- package/plugin/skills/ase-code-edit/SKILL.md +53 -16
- package/plugin/skills/ase-code-edit/help.md +26 -13
- package/plugin/skills/ase-code-lint/SKILL.md +7 -3
- package/plugin/skills/ase-help-intent/data.md +170 -28
- package/plugin/skills/ase-help-skill/catalog.md +1 -0
- package/plugin/skills/ase-meta-workflow/workflow.txt +2 -0
- package/plugin/skills/ase-repo-changelog/SKILL.md +29 -10
- package/plugin/skills/ase-repo-changelog/help.md +5 -1
- package/plugin/skills/ase-repo-commit/SKILL.md +4 -1
- package/plugin/skills/ase-repo-dissect/help.md +2 -1
- package/plugin/skills/ase-repo-stage/SKILL.md +459 -0
- package/plugin/skills/ase-repo-stage/help.md +120 -0
- package/plugin/skills/ase-spec-activate/SKILL.md +4 -1
- package/plugin/skills/ase-spec-edit/SKILL.md +20 -12
- package/plugin/skills/ase-spec-edit/help.md +22 -14
- package/plugin/mods/claude-code.d.ts +0 -13440
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
id: DG
|
|
126
126
|
file: 03-REQS-DG-Domain-Glossary.md
|
|
127
127
|
desc: >
|
|
128
|
-
The ubiquitous language of the domain, defining the meaning of each domain term in business language, together with its synonyms, its place in the hierarchy of terms, and the terms it has to be kept apart from, shared consistently across all
|
|
128
|
+
The ubiquitous language of the domain, defining the meaning of each domain term in business language, together with its synonyms, its place in the hierarchy of terms, and the terms it has to be kept apart from, shared consistently across all artifacts.
|
|
129
129
|
optional: true
|
|
130
130
|
children:
|
|
131
131
|
- kind: TERM
|
|
@@ -581,7 +581,7 @@
|
|
|
581
581
|
optional: true
|
|
582
582
|
- name: TRIGGER
|
|
583
583
|
desc: >
|
|
584
|
-
The event that starts the use case, stated as a 1-sentence occurrence (e.g. `The attendee opens the event URL.`), as opposed to the `PRE-CONDITION
|
|
584
|
+
The event that starts the use case, stated as a 1-sentence occurrence (e.g. `The attendee opens the event URL.`), as opposed to the `PRE-CONDITION`, which is a state that has to hold, and matching the `When <trigger>` of the event-driven Functional Requirements the use case exercises.
|
|
585
585
|
optional: true
|
|
586
586
|
- name: POST-CONDITION
|
|
587
587
|
desc: >
|
|
@@ -789,6 +789,9 @@
|
|
|
789
789
|
desc: >
|
|
790
790
|
The access rights of the solution, granted to the roles of the User Personas and stating for each role the operations it may perform on each entity, confined to the lifecycle states of the entity and to a further condition where necessary, so that "who may do what on which entity in which state" is answered in one place instead of being scattered over the actors of the state transitions, the actors of the use cases, and the prose of the domain rules. The model is closed: an operation not granted to a role is forbidden, exactly like a move not listed as a state transition.
|
|
791
791
|
optional: true
|
|
792
|
+
coverage:
|
|
793
|
+
- "[[DM.ENTITY:*]]"
|
|
794
|
+
- "[[USE-CASE:*]]"
|
|
792
795
|
children:
|
|
793
796
|
- kind: PERMISSION
|
|
794
797
|
desc: >
|
|
@@ -844,7 +847,7 @@
|
|
|
844
847
|
The kind of the interface, one of:
|
|
845
848
|
- `REST`: HTTP resources addressed by URL paths and HTTP methods.
|
|
846
849
|
- `GraphQL`: A GraphQL schema of queries, mutations, and subscriptions.
|
|
847
|
-
- `gRPC`: Protocol Buffers
|
|
850
|
+
- `gRPC`: Protocol Buffers-based remote procedure calls.
|
|
848
851
|
- `WebSocket`: Messages exchanged over a WebSocket connection.
|
|
849
852
|
- `MQTT`: Messages published to and subscribed from MQTT topics.
|
|
850
853
|
- `MCP`: Tools, resources, and prompts of a Model Context Protocol server.
|
|
@@ -1194,6 +1197,8 @@
|
|
|
1194
1197
|
desc: >
|
|
1195
1198
|
The sequenced visual or textual depiction of a specific dialog flow, illustrating how an interaction unfolds screen by screen or turn by turn.
|
|
1196
1199
|
optional: true
|
|
1200
|
+
coverage:
|
|
1201
|
+
- "[[USE-CASE:*]]"
|
|
1197
1202
|
children:
|
|
1198
1203
|
- kind: STORYBOARD
|
|
1199
1204
|
desc: >
|
|
@@ -1317,7 +1322,7 @@
|
|
|
1317
1322
|
props:
|
|
1318
1323
|
- name: MAXIMS
|
|
1319
1324
|
desc: >
|
|
1320
|
-
Comma-separated references to the MAXIM objects the principle concretizes (e.g. a `Stateless Services` principle concretizing a `Scale Out over Scale Up` maxim), so that the principles form a hierarchy below the maxims rather than a flat
|
|
1325
|
+
Comma-separated references to the MAXIM objects the principle concretizes (e.g. a `Stateless Services` principle concretizing a `Scale Out over Scale Up` maxim), so that the principles form a hierarchy below the maxims rather than a flat catalog; omitted for a principle standing on its own forces alone.
|
|
1321
1326
|
value: list([[MAXIM:*]])
|
|
1322
1327
|
optional: true
|
|
1323
1328
|
- name: DRIVEN-BY
|
|
@@ -1357,7 +1362,7 @@
|
|
|
1357
1362
|
optional: true
|
|
1358
1363
|
- name: USES
|
|
1359
1364
|
desc: >
|
|
1360
|
-
Comma-separated references to the smaller ARCHITECTURE-PATTERNS objects the pattern is composed of (e.g. a `Saga` using a `Transactional Outbox` for its steps), so that the patterns form a language of related structures rather than a flat
|
|
1365
|
+
Comma-separated references to the smaller ARCHITECTURE-PATTERNS objects the pattern is composed of (e.g. a `Saga` using a `Transactional Outbox` for its steps), so that the patterns form a language of related structures rather than a flat catalog.
|
|
1361
1366
|
value: list([[PATTERN:*]])
|
|
1362
1367
|
optional: true
|
|
1363
1368
|
acyclic: true
|
|
@@ -1433,6 +1438,9 @@
|
|
|
1433
1438
|
desc: >
|
|
1434
1439
|
The functional components of the solution, their responsibilities, interfaces, and primary interactions, describing *how* the solution's runtime elements are structured and which responsibility each owns, delivering the behaviors the Functional Requirements state.
|
|
1435
1440
|
optional: true
|
|
1441
|
+
coverage:
|
|
1442
|
+
- "[[FR.REQUIREMENT:*]]"
|
|
1443
|
+
- "[[DM.ENTITY:*]]"
|
|
1436
1444
|
children:
|
|
1437
1445
|
- kind: COMPONENT
|
|
1438
1446
|
desc: >
|
|
@@ -1473,7 +1481,7 @@
|
|
|
1473
1481
|
optional: true
|
|
1474
1482
|
- name: PROVIDES
|
|
1475
1483
|
desc: >
|
|
1476
|
-
Comma-separated references to the INTERFACE-MODEL objects the component provides, i.e. through which other components and external entities interact with it; omitted when the component provides no modeled interface (e.g. a user interface or an internal module).
|
|
1484
|
+
Comma-separated references to the INTERFACE-MODEL objects the component provides, i.e. through which other components and external entities interact with it, which are always `Provided` ones, as a `Required` interface is offered by an external entity instead; omitted when the component provides no modeled interface (e.g. a user interface or an internal module).
|
|
1477
1485
|
value: list([[INTERFACE:*]])
|
|
1478
1486
|
optional: true
|
|
1479
1487
|
- name: CONSUMES
|
|
@@ -1487,10 +1495,150 @@
|
|
|
1487
1495
|
value: list([[FV.COMPONENT:*]])
|
|
1488
1496
|
optional: true
|
|
1489
1497
|
|
|
1498
|
+
- kind: ARCH
|
|
1499
|
+
name: Runtime View
|
|
1500
|
+
id: RV
|
|
1501
|
+
file: 26-ARCH-RV-Runtime-View.md
|
|
1502
|
+
desc: >
|
|
1503
|
+
The runtime interactions of the solution: for each significant use case scenario or technical situation, the ordered messages its participants -- roles, Functionality View components, and Context View entities -- exchange, describing *how* the components collaborate at runtime to deliver the behaviors their static structure merely enables.
|
|
1504
|
+
optional: true
|
|
1505
|
+
coverage:
|
|
1506
|
+
- "[[USE-CASE:*]]"
|
|
1507
|
+
- "[[SCENARIO:*]]"
|
|
1508
|
+
children:
|
|
1509
|
+
- kind: INTERACTION
|
|
1510
|
+
desc: >
|
|
1511
|
+
A single runtime interaction, named with a short (2-5 word) summary of the situation it shows (e.g. `Ask a Question`, `Login with Token`) and described in a concise (1-3 sentence) paragraph by its trigger and its outcome, plus a 1-sentence rationale ("why") stating what the interaction makes explicit, while its MESSAGE children, in document order, are the messages its participants exchange.
|
|
1512
|
+
optional: true
|
|
1513
|
+
props:
|
|
1514
|
+
- name: REALIZES
|
|
1515
|
+
desc: >
|
|
1516
|
+
Comma-separated references to the USE-CASES objects (use cases or their scenarios) the interaction realizes, tracing the runtime behavior back to the behavior the requirements state; omitted for a purely technical interaction (e.g. a startup or a failover).
|
|
1517
|
+
value: list([[USE-CASE:*]], [[SCENARIO:*]])
|
|
1518
|
+
optional: true
|
|
1519
|
+
children:
|
|
1520
|
+
- kind: MESSAGE
|
|
1521
|
+
desc: >
|
|
1522
|
+
A single message of the interaction, named with a short (1-4 word), per-interaction unique summary of the operation, event, or response it carries (e.g. `submit question`, `question stored`) and described by a 1-sentence description of its effect.
|
|
1523
|
+
props:
|
|
1524
|
+
- name: FROM
|
|
1525
|
+
desc: >
|
|
1526
|
+
Reference to the participant sending the message: a USER-PERSONAS role, a FUNCTIONALITY-VIEW component, or a CONTEXT-VIEW entity.
|
|
1527
|
+
value: list([[ROLE:*]], [[FV.COMPONENT:*]], [[CV.ENTITY:*]])
|
|
1528
|
+
- name: TO
|
|
1529
|
+
desc: >
|
|
1530
|
+
Comma-separated references to the participants receiving the message (several ones yielding one message each): USER-PERSONAS roles, FUNCTIONALITY-VIEW components, or CONTEXT-VIEW entities.
|
|
1531
|
+
value: list([[ROLE:*]], [[FV.COMPONENT:*]], [[CV.ENTITY:*]])
|
|
1532
|
+
- name: KIND
|
|
1533
|
+
desc: |
|
|
1534
|
+
The kind of the message, one of:
|
|
1535
|
+
- `Call`: Synchronous request the sender waits for (the default).
|
|
1536
|
+
- `Signal`: Asynchronous notification the sender does not wait for.
|
|
1537
|
+
- `Return`: Response to the latest unanswered call of its receiver.
|
|
1538
|
+
- `Create`: Instantiation of its receiver, which starts there.
|
|
1539
|
+
- `Destroy`: Termination of its receiver, which ends there.
|
|
1540
|
+
value: enum(Call,Signal,Return,Create,Destroy)
|
|
1541
|
+
optional: true
|
|
1542
|
+
- name: DURATION
|
|
1543
|
+
desc: >
|
|
1544
|
+
Duration constraint of a call up to its return (e.g. `< 200ms`), drawn as a bracket beside the lifeline of the caller.
|
|
1545
|
+
optional: true
|
|
1546
|
+
- name: TIME
|
|
1547
|
+
desc: >
|
|
1548
|
+
Time constraint or observation at the start of the message (e.g. `t = now`), drawn beside the lifeline of the sender.
|
|
1549
|
+
optional: true
|
|
1550
|
+
|
|
1551
|
+
- kind: ARCH
|
|
1552
|
+
name: Concurrency View
|
|
1553
|
+
id: CO
|
|
1554
|
+
file: 27-ARCH-CO-Concurrency-View.md
|
|
1555
|
+
desc: >
|
|
1556
|
+
The concurrency structure of the solution, mapping functional components to processes and threads, and defining how they coordinate and communicate. The artifact is absent when the solution runs as a single sequential unit of execution and has no concurrency structure worth describing.
|
|
1557
|
+
optional: true
|
|
1558
|
+
coverage:
|
|
1559
|
+
- "[[FV.COMPONENT:*]]"
|
|
1560
|
+
children:
|
|
1561
|
+
- kind: RESOURCE
|
|
1562
|
+
desc: >
|
|
1563
|
+
A single coordination resource the concurrency units share, named with a short (2-5 word) summary (e.g. `Ingest Queue`, `Database Connections`, `Render Lock`) and described in a concise (1-3 sentence) paragraph by what its items are and how full it may get, plus a 1-sentence rationale ("why") for its bound.
|
|
1564
|
+
|
|
1565
|
+
The resources and the units form a Petri net: a resource is a place holding items (tokens), a unit a transition taking items out of the resources it names in `CONSUMES` and putting items into the resources it names in `PRODUCES`, so the analysis of the net reveals unbounded resources (missing backpressure), deadlocks, and units never or no longer able to work.
|
|
1566
|
+
optional: true
|
|
1567
|
+
props:
|
|
1568
|
+
- name: KIND
|
|
1569
|
+
desc: |
|
|
1570
|
+
The kind of the coordination resource, one of:
|
|
1571
|
+
|
|
1572
|
+
- `Queue`: A buffer of work items between producers and consumers.
|
|
1573
|
+
- `Topic`: A publish/subscribe channel delivering messages.
|
|
1574
|
+
- `Pool`: A bounded set of reusable instances (e.g. connections).
|
|
1575
|
+
- `Mutex`: An exclusive lock (a single token).
|
|
1576
|
+
- `Semaphore`: A counting lock (several tokens).
|
|
1577
|
+
value: enum(Queue,Topic,Pool,Mutex,Semaphore)
|
|
1578
|
+
- name: CAPACITY
|
|
1579
|
+
desc: >
|
|
1580
|
+
The maximum number of items the resource holds (e.g. a queue limit or the size of a pool), omitted for an unbounded resource.
|
|
1581
|
+
value: /^[1-9][0-9]*$/
|
|
1582
|
+
optional: true
|
|
1583
|
+
- name: TOKENS
|
|
1584
|
+
desc: >
|
|
1585
|
+
The number of items the resource initially holds (e.g. the free connections of a pool or the `1` of a free mutex), omitted for none.
|
|
1586
|
+
value: /^(?:0|[1-9][0-9]*)$/
|
|
1587
|
+
optional: true
|
|
1588
|
+
- kind: UNIT
|
|
1589
|
+
desc: >
|
|
1590
|
+
A single concurrency unit, named with a short (2-5 word) summary (e.g. `Web Worker Pool`, `Background Scheduler`, `Ingest Queue Consumer`) and described in a concise (1-3 sentence) paragraph by how it executes and how it avoids or manages contention, races, and deadlocks (including its start order and failure/restart behavior where non-obvious), plus a 1-sentence rationale ("why") for the chosen concurrency structure.
|
|
1591
|
+
|
|
1592
|
+
A unit executes work at runtime: a queue or channel between units is not a unit but the coordination mechanism stated in `COORDINATION`, its contract an Interface Model interface (e.g. of kind `MQTT` or `WebSocket`), and the platform element hosting a managed broker a Deployment View `Managed` node -- only the executing structure itself belongs to the Concurrency View.
|
|
1593
|
+
optional: true
|
|
1594
|
+
props:
|
|
1595
|
+
- name: KIND
|
|
1596
|
+
desc: |
|
|
1597
|
+
The kind of the concurrency unit, one of:
|
|
1598
|
+
|
|
1599
|
+
- `Process`: An independent OS process with its own address space.
|
|
1600
|
+
- `Thread`: A thread of execution within a process.
|
|
1601
|
+
- `Task`: A lightweight cooperative task (e.g. coroutine, fiber).
|
|
1602
|
+
- `Pool`: A managed group of interchangeable workers.
|
|
1603
|
+
- `EventLoop`: A single-threaded cooperative scheduler of tasks.
|
|
1604
|
+
value: enum(Process,Thread,Task,Pool,EventLoop)
|
|
1605
|
+
- name: PART-OF
|
|
1606
|
+
desc: >
|
|
1607
|
+
Reference to the CONCURRENCY-VIEW object this unit is contained in, expressing the containment the kinds imply: a `Thread`, `Task`, `Pool`, or `EventLoop` references the `Process` it executes within, and a `Task` the `EventLoop` or `Pool` scheduling it; omitted for a top-level unit.
|
|
1608
|
+
value: "[[UNIT:*]]"
|
|
1609
|
+
optional: true
|
|
1610
|
+
acyclic: true
|
|
1611
|
+
- name: HOSTS
|
|
1612
|
+
desc: >
|
|
1613
|
+
Comma-separated references to the FUNCTIONALITY-VIEW objects that run inside this concurrency unit; omitted when no modeled component runs inside it.
|
|
1614
|
+
value: list([[FV.COMPONENT:*]])
|
|
1615
|
+
optional: true
|
|
1616
|
+
- name: MULTIPLICITY
|
|
1617
|
+
desc: >
|
|
1618
|
+
How many instances of the unit run (e.g. `1`, `1 per CPU core`, `0..n auto-scaled`).
|
|
1619
|
+
- name: COORDINATES-WITH
|
|
1620
|
+
desc: >
|
|
1621
|
+
Comma-separated references to the CONCURRENCY-VIEW objects this unit coordinates or communicates with at runtime, naming the peer unit only (e.g. a producer names the consumer it feeds through a shared queue), while the mechanism is stated by `COORDINATION`.
|
|
1622
|
+
value: list([[UNIT:*]])
|
|
1623
|
+
optional: true
|
|
1624
|
+
- name: COORDINATION
|
|
1625
|
+
desc: >
|
|
1626
|
+
The mechanism by which the unit coordinates or communicates with other units, usually those referenced in `COORDINATES-WITH` (e.g. `shared queue`, `mutex`, `message passing`, `optimistic locking`).
|
|
1627
|
+
- name: CONSUMES
|
|
1628
|
+
desc: >
|
|
1629
|
+
Comma-separated references to the CONCURRENCY-VIEW resources the unit takes work items or instances out of (e.g. the queue it drains, the pool it takes a connection from), modeling the unit as a transition of the Petri net its resources form; omitted when it consumes from none.
|
|
1630
|
+
value: list([[RESOURCE:*]])
|
|
1631
|
+
optional: true
|
|
1632
|
+
- name: PRODUCES
|
|
1633
|
+
desc: >
|
|
1634
|
+
Comma-separated references to the CONCURRENCY-VIEW resources the unit puts work items or freed instances into (e.g. the queue it feeds, the pool it returns a connection to); omitted when it produces into none.
|
|
1635
|
+
value: list([[RESOURCE:*]])
|
|
1636
|
+
optional: true
|
|
1637
|
+
|
|
1490
1638
|
- kind: ARCH
|
|
1491
1639
|
name: Technology Stack
|
|
1492
1640
|
id: TS
|
|
1493
|
-
file:
|
|
1641
|
+
file: 28-ARCH-TS-Technology-Stack.md
|
|
1494
1642
|
desc: >
|
|
1495
1643
|
The concrete technology products the solution is built upon, organized by tier and lifecycle phase, recording for each component its chosen product, its purpose, and the alternatives that were considered but not chosen.
|
|
1496
1644
|
optional: true
|
|
@@ -1515,7 +1663,7 @@
|
|
|
1515
1663
|
desc: >
|
|
1516
1664
|
A single technology component, named with a short (2-5 word) summary (e.g. `UI Framework`, `Web Server`, `Relational Database`) and described in a concise (1-3 sentence) paragraph by how the product is used within the solution and how it fits into the overall technology stack, plus a 1-sentence rationale ("why") for choosing this product over the alternatives.
|
|
1517
1665
|
|
|
1518
|
-
A component states one product in one role on one tier: the product used by several tiers alike belongs to the `Common` tier once, the lock-in
|
|
1666
|
+
A component states one product in one role on one tier: the product used by several tiers alike belongs to the `Common` tier once, the lock-in-carrying trade-off behind the choice is a Design Decisions decision referencing the component through `DECIDES`, and the functional components depending on the product reference it through `USED-BY`.
|
|
1519
1667
|
props:
|
|
1520
1668
|
- name: PRODUCT
|
|
1521
1669
|
desc: >
|
|
@@ -1764,7 +1912,7 @@
|
|
|
1764
1912
|
- kind: ARCH
|
|
1765
1913
|
name: Development Aspects
|
|
1766
1914
|
id: DA
|
|
1767
|
-
file:
|
|
1915
|
+
file: 29-ARCH-DA-Development-Aspects.md
|
|
1768
1916
|
desc: >
|
|
1769
1917
|
The architecture supporting the software development process, defining the module organization, build approach, and codeline conventions. The artifact is absent when the development conventions are governed outside the specification (e.g. by repository-level contributor instructions).
|
|
1770
1918
|
optional: true
|
|
@@ -1786,61 +1934,15 @@
|
|
|
1786
1934
|
value: list([[MAXIM:*]], [[AT.PRINCIPLE:*]])
|
|
1787
1935
|
optional: true
|
|
1788
1936
|
|
|
1789
|
-
- kind: ARCH
|
|
1790
|
-
name: Concurrency View
|
|
1791
|
-
id: CO
|
|
1792
|
-
file: 28-ARCH-CO-Concurrency-View.md
|
|
1793
|
-
desc: >
|
|
1794
|
-
The concurrency structure of the solution, mapping functional components to processes and threads, and defining how they coordinate and communicate. The artifact is absent when the solution runs as a single sequential unit of execution and has no concurrency structure worth describing.
|
|
1795
|
-
optional: true
|
|
1796
|
-
children:
|
|
1797
|
-
- kind: UNIT
|
|
1798
|
-
desc: >
|
|
1799
|
-
A single concurrency unit, named with a short (2-5 word) summary (e.g. `Web Worker Pool`, `Background Scheduler`, `Ingest Queue Consumer`) and described in a concise (1-3 sentence) paragraph by how it executes and how it avoids or manages contention, races, and deadlocks (including its start order and failure/restart behavior where non-obvious), plus a 1-sentence rationale ("why") for the chosen concurrency structure.
|
|
1800
|
-
|
|
1801
|
-
A unit executes work at runtime: a queue or channel between units is not a unit but the coordination mechanism stated in `COORDINATION`, its contract an Interface Model interface (e.g. of kind `MQTT` or `WebSocket`), and the platform element hosting a managed broker a Deployment View `Managed` node -- only the executing structure itself belongs to the Concurrency View.
|
|
1802
|
-
optional: true
|
|
1803
|
-
props:
|
|
1804
|
-
- name: KIND
|
|
1805
|
-
desc: |
|
|
1806
|
-
The kind of the concurrency unit, one of:
|
|
1807
|
-
|
|
1808
|
-
- `Process`: An independent OS process with its own address space.
|
|
1809
|
-
- `Thread`: A thread of execution within a process.
|
|
1810
|
-
- `Task`: A lightweight cooperative task (e.g. coroutine, fiber).
|
|
1811
|
-
- `Pool`: A managed group of interchangeable workers.
|
|
1812
|
-
- `EventLoop`: A single-threaded cooperative scheduler of tasks.
|
|
1813
|
-
value: enum(Process,Thread,Task,Pool,EventLoop)
|
|
1814
|
-
- name: PART-OF
|
|
1815
|
-
desc: >
|
|
1816
|
-
Reference to the CONCURRENCY-VIEW object this unit is contained in, expressing the containment the kinds imply: a `Thread`, `Task`, `Pool`, or `EventLoop` references the `Process` it executes within, and a `Task` the `EventLoop` or `Pool` scheduling it; omitted for a top-level unit.
|
|
1817
|
-
value: "[[UNIT:*]]"
|
|
1818
|
-
optional: true
|
|
1819
|
-
acyclic: true
|
|
1820
|
-
- name: HOSTS
|
|
1821
|
-
desc: >
|
|
1822
|
-
Comma-separated references to the FUNCTIONALITY-VIEW objects that run inside this concurrency unit; omitted when no modeled component runs inside it.
|
|
1823
|
-
value: list([[FV.COMPONENT:*]])
|
|
1824
|
-
optional: true
|
|
1825
|
-
- name: MULTIPLICITY
|
|
1826
|
-
desc: >
|
|
1827
|
-
How many instances of the unit run (e.g. `1`, `1 per CPU core`, `0..n auto-scaled`).
|
|
1828
|
-
- name: COORDINATES-WITH
|
|
1829
|
-
desc: >
|
|
1830
|
-
Comma-separated references to the CONCURRENCY-VIEW objects this unit coordinates or communicates with at runtime, naming the peer unit only (e.g. a producer names the consumer it feeds through a shared queue), while the mechanism is stated by `COORDINATION`.
|
|
1831
|
-
value: list([[UNIT:*]])
|
|
1832
|
-
optional: true
|
|
1833
|
-
- name: COORDINATION
|
|
1834
|
-
desc: >
|
|
1835
|
-
The mechanism by which the unit coordinates or communicates with other units, usually those referenced in `COORDINATES-WITH` (e.g. `shared queue`, `mutex`, `message passing`, `optimistic locking`).
|
|
1836
|
-
|
|
1837
1937
|
- kind: ARCH
|
|
1838
1938
|
name: Deployment View
|
|
1839
1939
|
id: DV
|
|
1840
|
-
file:
|
|
1940
|
+
file: 30-ARCH-DV-Deployment-View.md
|
|
1841
1941
|
desc: >
|
|
1842
1942
|
The environment into which the solution is deployed, partitioning it into tiers and mapping software elements to the runtime platform, hardware, and network topology.
|
|
1843
1943
|
optional: true
|
|
1944
|
+
coverage:
|
|
1945
|
+
- "[[UNIT:*]]"
|
|
1844
1946
|
children:
|
|
1845
1947
|
- kind: TIER
|
|
1846
1948
|
desc: >
|
|
@@ -1870,6 +1972,27 @@
|
|
|
1870
1972
|
|
|
1871
1973
|
An area is a logically distinct, domain-induced partition of the solution deployed as physical units of its own, the *vertical* split when drawn (a `TIER` is the *horizontal*, technology-induced one): a node dedicated to the area references it via its `AREA`, a node shared by several areas references none, and a domain grouping without deployment units of its own is a Functionality View `Subsystem` instead. The kind is absent when the solution is not split vertically.
|
|
1872
1974
|
optional: true
|
|
1975
|
+
- kind: NETWORK
|
|
1976
|
+
desc: >
|
|
1977
|
+
A single network segment the deployment nodes are attached to, named with a short (2-5 word) summary (e.g. `Public Internet`, `Backend VLAN`, `Database Subnet`) and described in a concise (1-3 sentence) paragraph by its reach, its isolation from the other segments, and the traffic it carries, plus a 1-sentence rationale ("why") for the segmentation.
|
|
1978
|
+
|
|
1979
|
+
A segment is the medium the nodes communicate over: the attached nodes reference it via `NETWORKS`, the directed links between them are their `CONNECTS-TO` references, and the contract of the carried traffic is an Interface Model interface -- only the network itself belongs here. The kind is absent when the topology has no segmentation worth describing.
|
|
1980
|
+
optional: true
|
|
1981
|
+
props:
|
|
1982
|
+
- name: SCOPE
|
|
1983
|
+
desc: |
|
|
1984
|
+
The reach of the segment, one of:
|
|
1985
|
+
- `Public`: Reachable from the Internet.
|
|
1986
|
+
- `Private`: Reachable from the solution's own nodes only.
|
|
1987
|
+
- `Isolated`: Reachable from selected nodes only (e.g. a database subnet).
|
|
1988
|
+
value: enum(Public,Private,Isolated)
|
|
1989
|
+
- name: PROTOCOLS
|
|
1990
|
+
desc: >
|
|
1991
|
+
The protocols and ports carried by the segment (e.g. `HTTPS 443, WSS 443`, `HTTP, WS, TCP 5432`).
|
|
1992
|
+
- name: ADDRESSING
|
|
1993
|
+
desc: >
|
|
1994
|
+
The address range or naming of the segment (e.g. `10.0.0.0/8`, `public IPv4 and IPv6`, `*.example.com`).
|
|
1995
|
+
optional: true
|
|
1873
1996
|
- kind: NODE
|
|
1874
1997
|
desc: >
|
|
1875
1998
|
A single deployment node, named with a short (2-5 word) summary (e.g. `Web Servers`, `Database Cluster`, `Edge CDN`) and described in a concise (1-3 sentence) paragraph by the node, its sizing, and its place in the deployment topology, plus a 1-sentence rationale ("why") for the node's placement and platform choice.
|
|
@@ -1925,32 +2048,11 @@
|
|
|
1925
2048
|
Comma-separated references to the DEPLOYMENT-VIEW network segments the node is attached to (e.g. a public ingress and a private backend network); omitted when the topology models no network segments.
|
|
1926
2049
|
value: list([[NETWORK:*]])
|
|
1927
2050
|
optional: true
|
|
1928
|
-
- kind: NETWORK
|
|
1929
|
-
desc: >
|
|
1930
|
-
A single network segment the deployment nodes are attached to, named with a short (2-5 word) summary (e.g. `Public Internet`, `Backend VLAN`, `Database Subnet`) and described in a concise (1-3 sentence) paragraph by its reach, its isolation from the other segments, and the traffic it carries, plus a 1-sentence rationale ("why") for the segmentation.
|
|
1931
|
-
|
|
1932
|
-
A segment is the medium the nodes communicate over: the attached nodes reference it via `NETWORKS`, the directed links between them are their `CONNECTS-TO` references, and the contract of the carried traffic is an Interface Model interface -- only the network itself belongs here. The kind is absent when the topology has no segmentation worth describing.
|
|
1933
|
-
optional: true
|
|
1934
|
-
props:
|
|
1935
|
-
- name: SCOPE
|
|
1936
|
-
desc: |
|
|
1937
|
-
The reach of the segment, one of:
|
|
1938
|
-
- `Public`: Reachable from the Internet.
|
|
1939
|
-
- `Private`: Reachable from the solution's own nodes only.
|
|
1940
|
-
- `Isolated`: Reachable from selected nodes only (e.g. a database subnet).
|
|
1941
|
-
value: enum(Public,Private,Isolated)
|
|
1942
|
-
- name: PROTOCOLS
|
|
1943
|
-
desc: >
|
|
1944
|
-
The protocols and ports carried by the segment (e.g. `HTTPS 443, WSS 443`, `HTTP, WS, TCP 5432`).
|
|
1945
|
-
- name: ADDRESSING
|
|
1946
|
-
desc: >
|
|
1947
|
-
The address range or naming of the segment (e.g. `10.0.0.0/8`, `public IPv4 and IPv6`, `*.example.com`).
|
|
1948
|
-
optional: true
|
|
1949
2051
|
|
|
1950
2052
|
- kind: ARCH
|
|
1951
2053
|
name: Operations View
|
|
1952
2054
|
id: OV
|
|
1953
|
-
file:
|
|
2055
|
+
file: 31-ARCH-OV-Operations-View.md
|
|
1954
2056
|
desc: >
|
|
1955
2057
|
The way the solution is operated, administered, and supported in production, defining the standing procedures by which the operating organization installs, configures, migrates, observes, protects, upgrades, scales, and supports the running solution.
|
|
1956
2058
|
optional: true
|
|
@@ -2012,7 +2114,7 @@
|
|
|
2012
2114
|
- kind: ARCH
|
|
2013
2115
|
name: Quality Perspectives
|
|
2014
2116
|
id: QP
|
|
2015
|
-
file:
|
|
2117
|
+
file: 32-ARCH-QP-Quality-Perspectives.md
|
|
2016
2118
|
desc: >
|
|
2017
2119
|
How the Non-Functional Requirements (NR) are addressed by the architecture, through the tactics built into the solution across the views.
|
|
2018
2120
|
optional: true
|
|
@@ -2070,7 +2172,7 @@
|
|
|
2070
2172
|
- kind: ARCH
|
|
2071
2173
|
name: Design Decisions
|
|
2072
2174
|
id: DD
|
|
2073
|
-
file:
|
|
2175
|
+
file: 33-ARCH-DD-Design-Decisions.md
|
|
2074
2176
|
desc: >
|
|
2075
2177
|
The major decisions related to the solution design, each recording the forces at play, the chosen response, and the reasoning that justifies it. The artifact is the last decision-level one of the architecture, as a decision references the requirements forcing it, the elements it shapes, and the tactics and products it chose, all of which precede it, while the Code Patterns following it reference the decisions they implement.
|
|
2076
2178
|
optional: true
|
|
@@ -2257,7 +2359,7 @@
|
|
|
2257
2359
|
- kind: ARCH
|
|
2258
2360
|
name: Code Patterns
|
|
2259
2361
|
id: CP
|
|
2260
|
-
file:
|
|
2362
|
+
file: 34-ARCH-CP-Code-Patterns.md
|
|
2261
2363
|
desc: >
|
|
2262
2364
|
The implementation patterns the source code of the solution follows, each prescribing how one recurring concern (e.g. authorization enforcement, entity persistence, error propagation) is coded and showing it as a code listing. The artifact follows the Design Decisions, as a pattern is the coded form of the tactics and decisions preceding it, and is absent when the coding conventions are governed outside the specification (e.g. by repository-level contributor instructions).
|
|
2263
2365
|
optional: true
|
|
@@ -2293,7 +2395,7 @@
|
|
|
2293
2395
|
optional: true
|
|
2294
2396
|
- name: USES
|
|
2295
2397
|
desc: >
|
|
2296
|
-
Comma-separated references to the smaller CODE-PATTERNS objects the pattern is composed of (e.g. an `Endpoint Authorization` using the `Error Propagation` for its rejections), so that the patterns form a language of related shapes rather than a flat
|
|
2398
|
+
Comma-separated references to the smaller CODE-PATTERNS objects the pattern is composed of (e.g. an `Endpoint Authorization` using the `Error Propagation` for its rejections), so that the patterns form a language of related shapes rather than a flat catalog.
|
|
2297
2399
|
value: list([[CODE-PATTERN:*]])
|
|
2298
2400
|
optional: true
|
|
2299
2401
|
acyclic: true
|
|
@@ -2304,7 +2406,7 @@
|
|
|
2304
2406
|
- kind: TEST
|
|
2305
2407
|
name: Test Cases
|
|
2306
2408
|
id: TC
|
|
2307
|
-
file:
|
|
2409
|
+
file: 35-TEST-TC-Test-Cases.md
|
|
2308
2410
|
desc: >
|
|
2309
2411
|
The verifiable conditions and steps used to confirm that requirements, domain rules, use case scenarios, state transitions, and the mechanisms, procedures, and decisions of the architecture are correctly implemented, with mandatory defined inputs, mandatory expected outcomes, and optional pre- and post-conditions. The artifact is the last one, as a test case verifies objects of every preceding kind.
|
|
2310
2412
|
|
|
@@ -2347,8 +2449,8 @@
|
|
|
2347
2449
|
The mandatory, concrete input data or action applied during the test, i.e. the stimulus whose response the `EXPECTED` judges.
|
|
2348
2450
|
- name: EXPECTED
|
|
2349
2451
|
desc: >
|
|
2350
|
-
The mandatory, concrete, observable response of the solution to the `INPUT` (a message shown, a session issued, a submission rejected) that defines a passing test, as opposed to the `POST-CONDITION
|
|
2452
|
+
The mandatory, concrete, observable response of the solution to the `INPUT` (a message shown, a session issued, a submission rejected) that defines a passing test, as opposed to the `POST-CONDITION`, which is the state left behind. When the test case verifies a NON-FUNCTIONAL-REQUIREMENTS object, the expected response restates the `METRIC` threshold of that requirement as the pass criterion (e.g. `p95 latency < 200 ms`) rather than a qualitative phrase (e.g. `remains responsive`).
|
|
2351
2453
|
- name: POST-CONDITION
|
|
2352
2454
|
desc: >
|
|
2353
|
-
The persisted state that must hold after the test completes (e.g. `the authorization token is in state used`), including the state that must not have changed (e.g. `no session token exists`), as opposed to the `EXPECTED
|
|
2455
|
+
The persisted state that must hold after the test completes (e.g. `the authorization token is in state used`), including the state that must not have changed (e.g. `no session token exists`), as opposed to the `EXPECTED`, which is the immediate response, and omitted for a test whose input leaves no state behind.
|
|
2354
2456
|
optional: true
|
package/plugin/meta/ase-skill.md
CHANGED
|
@@ -232,6 +232,13 @@ Skill Identification
|
|
|
232
232
|
⧉ **ASE**: ✪ skill: **<skill-name/>**, ✦ purpose: **<purpose/>**, ▶ status: **skill started**
|
|
233
233
|
</template>
|
|
234
234
|
|
|
235
|
+
You *MUST* output this <template/> *immediately* as the *very first*
|
|
236
|
+
output of the skill, *before* any tool call (including the
|
|
237
|
+
`ase_getopt` call) and *before* any work of the skill, and also when
|
|
238
|
+
the skill was invoked via the `Skill` tool from another skill. Any
|
|
239
|
+
"Do not output anything" instruction of the subsequent steps does
|
|
240
|
+
*NOT* suppress or defer it.
|
|
241
|
+
|
|
235
242
|
Later (but only if ((`$1` is *NOT* equal to `-h` or `--help`) *AND*
|
|
236
243
|
(<ase-guidance-level/> is equal to `normal` or `verbose`))), once
|
|
237
244
|
this skill finally will stop processing, you *MUST* once output the
|
|
@@ -5,11 +5,12 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
/* Claude Code function hooks module ("mod", EARLY ACCESS):
|
|
8
|
-
Common parts, shared by the grill table, the
|
|
9
|
-
form, the manual band, the manpage browser, and the hint
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
master/detail view in the band above the
|
|
8
|
+
Common parts, shared by the grill table, the decision matrix, the intent
|
|
9
|
+
help, the synopsis form, the manual band, the manpage browser, and the hint
|
|
10
|
+
band: the rows of the Markdown tables, the styled characters of the terminal
|
|
11
|
+
drawing, their Markdown conversion, wrapping, and framing, and the contract,
|
|
12
|
+
keys, geometry, and drawing of the master/detail view in the band above the
|
|
13
|
+
prompt. */
|
|
13
14
|
|
|
14
15
|
import type { Elements, Frozen, MatchedEvent, ModelCompleteRequest, ModelForkResult,
|
|
15
16
|
PromptBox, PromptEditInput, PromptFilled, RenderElement } from "claude-code"
|
|
@@ -100,6 +101,35 @@ export const decode = (e: Frozen<PromptEditInput>): Key => {
|
|
|
100
101
|
}
|
|
101
102
|
}
|
|
102
103
|
|
|
104
|
+
/* a row and the delimiter row of a Markdown table */
|
|
105
|
+
export const ROW = /^ *\|.*\| *$/
|
|
106
|
+
export const RULE = /^ *\|(?: *:?-+:? *\|)+ *$/
|
|
107
|
+
|
|
108
|
+
/* split a Markdown table row into its cells */
|
|
109
|
+
export const cells = (line: string): string[] => {
|
|
110
|
+
const result: string[] = []
|
|
111
|
+
const body = line.trim().replace(/^\|/, "").replace(/\|$/, "")
|
|
112
|
+
let cell = ""
|
|
113
|
+
let code = false
|
|
114
|
+
for (let i = 0; i < body.length; i++) {
|
|
115
|
+
const ch = body[i]!
|
|
116
|
+
if (ch === "`")
|
|
117
|
+
code = !code
|
|
118
|
+
if (!code && ch === "\\" && body[i + 1] === "|") {
|
|
119
|
+
cell += "|"
|
|
120
|
+
i++
|
|
121
|
+
}
|
|
122
|
+
else if (!code && ch === "|") {
|
|
123
|
+
result.push(cell.trim())
|
|
124
|
+
cell = ""
|
|
125
|
+
}
|
|
126
|
+
else
|
|
127
|
+
cell += ch
|
|
128
|
+
}
|
|
129
|
+
result.push(cell.trim())
|
|
130
|
+
return result
|
|
131
|
+
}
|
|
132
|
+
|
|
103
133
|
/* a single styled character of the terminal drawing */
|
|
104
134
|
export type Char = { ch: string, bold: boolean, color: string | undefined }
|
|
105
135
|
|
|
@@ -214,7 +244,7 @@ export const uniform = (text: string, bold: boolean, color: string | undefined):
|
|
|
214
244
|
Array.from(text, (ch) => ({ ch, bold, color }))
|
|
215
245
|
|
|
216
246
|
/* strip the single-asterisk emphasis outside the code spans of inline Markdown */
|
|
217
|
-
const strip = (text: string): string =>
|
|
247
|
+
export const strip = (text: string): string =>
|
|
218
248
|
text.split("`").map((part, i) => i % 2 === 0 ? part.replace(/(?<!\*)\*(?!\*)/g, "") : part).join("`")
|
|
219
249
|
|
|
220
250
|
/* convert the Markdown blocks of a manual page section (paragraphs, list items,
|