@rse/ase 0.9.62 → 0.9.63

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.
@@ -6,7 +6,7 @@ The following are the **ASE Tenets** -- the guiding principles you
6
6
  *MUST* internalize when requested. They are organized into *Generic
7
7
  Tenets*, which always apply, and *Operation-Specific Tenets*, which
8
8
  apply only to a particular kind of operation (Crafting, Reconciling,
9
- Refactoring, Resolving).
9
+ Refactoring, Resolving, Specifying).
10
10
 
11
11
  GENERIC TENETS
12
12
  --------------
@@ -149,11 +149,11 @@ you *MUST* honor the following so-called **RECONCILIATION TENETS**:
149
149
  - **Level-Appropriate Translation**:
150
150
  Re-express source facts at the *target's* level of abstraction and
151
151
  altitude; do not copy verbatim across artifact levels. A SPEC states
152
- intent, an ARCH states structure, CODE states realization, DOCS
153
- states facts, etc. -- align the *meaning*, not the wording.
152
+ intent and structure, CODE states realization, DOCS states facts,
153
+ etc. -- align the *meaning*, not the wording.
154
154
 
155
155
  - **Format Conformance**:
156
- Keep every formatted target (SPEC, ARCH, TASK) conformant to its
156
+ Keep every formatted target (SPEC, TASK) conformant to its
157
157
  format contract (headings, structure, identifiers). Treat CODE,
158
158
  DOCS, INFR, and OTHR kinds of artifacts as foreign-defined, but not
159
159
  as free-form.
@@ -221,3 +221,62 @@ you *MUST* honor the following so-called **RESOLVING TENETS**:
221
221
  handled *near the origin*. Problems for *theoretical, fictive, or
222
222
  unexpected* errors *should* be handled more generally and in parent
223
223
  scopes.
224
+
225
+ SPECIFYING TENETS
226
+ -----------------
227
+
228
+ When *specifying* -- creating, revising, or editing the statements of a
229
+ specification artifact set -- you *MUST* honor the following so-called
230
+ **SPECIFYING TENETS**:
231
+
232
+ - **Intent over Realization**:
233
+ A specification, in its domain-specific and non-architecture related
234
+ aspects, states only the *WHAT* and the *WHY*, never the *HOW*.
235
+ Record intent, structure, constraints, and relationships here.
236
+ Implementation steps, algorithms, technologies, and code-level
237
+ details describe the *WHAT* and *HOW* and belong only into
238
+ the domain-unspecific and architecture-related aspects of the
239
+ specification.
240
+
241
+ - **Statement with Rationale**:
242
+ Every statement carries its *WHY* behind the `, BECAUSE ` clause in
243
+ a description. A statement without a rationale can neither be judged
244
+ nor revised, so never leave the rationale implicit and never restate
245
+ the statement as its own rationale.
246
+
247
+ - **Unambiguous and Verifiable**:
248
+ Every statement is precise enough that two readers derive the same
249
+ meaning and that its fulfillment is decidable. Replace vague
250
+ qualifiers ("fast", "user-friendly", "robust") with the concrete
251
+ property, threshold, or scenario actually meant.
252
+
253
+ - **Single Source of Truth**:
254
+ Every fact resides in exactly *one* object of the specification. Do
255
+ not restate a fact in a second place -- point at its owning object
256
+ with a `[[xxx]]` reference instead, so a later change has exactly
257
+ one place to land.
258
+
259
+ - **Atomic Statement**:
260
+ Every statement expresses exactly *one* fact with exactly *one*
261
+ rationale. Split a statement that joins independent facts with
262
+ "and"/"or" -- otherwise its fulfillment is only partially decidable
263
+ and its rationale covers more than it explains.
264
+
265
+ - **Schema Conformance**:
266
+ Every object stays conformant to the **SpecBook SCHEMA Model** of
267
+ the project: allowed kinds, allowed nesting, mandatory and optional
268
+ properties, and the configured value constraints. Never invent an
269
+ object kind or a property key the schema does not define.
270
+
271
+ - **Referential Integrity**:
272
+ Every `[[xxx]]` reference resolves to exactly one object. When an
273
+ object is renamed, moved, or removed, follow *all* references to it
274
+ through the entire specification corpus and adjust or remove them
275
+ in the same change set -- a dangling or ambiguous reference is a
276
+ defect.
277
+
278
+ - **No Fabrication**:
279
+ Never invent specification content the request does not warrant. If
280
+ the request is silent, ambiguous, or contradictory on something the
281
+ specification needs, surface the gap explicitly rather than papering
282
+ over it with a plausible guess.
@@ -6,7 +6,7 @@
6
6
  "homepage": "https://ase.tools",
7
7
  "repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
8
8
  "bugs": { "url": "https://github.com/rse/ase/issues" },
9
- "version": "0.9.62",
9
+ "version": "0.9.63",
10
10
  "license": "Apache-2.0",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
@@ -15,9 +15,10 @@
15
15
  },
16
16
  "devDependencies": {
17
17
  "@rse/stx": "1.1.6",
18
+ "@rse/specbook": "1.0.2",
18
19
  "markdownlint": "0.41.1",
19
20
  "markdownlint-cli2": "0.23.2",
20
- "eslint": "10.9.0",
21
+ "eslint": "10.9.1",
21
22
  "@eslint/markdown": "8.0.3",
22
23
  "eslint-markdown": "0.14.0"
23
24
  },
@@ -25,6 +26,9 @@
25
26
  "npm": ">=10.0.0",
26
27
  "node": ">=22.13.0"
27
28
  },
29
+ "allowScripts": {
30
+ "fsevents": true
31
+ },
28
32
  "scripts": {
29
33
  "start": "stx -v4 -l warning -c etc/stx.conf"
30
34
  }
@@ -189,9 +189,11 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
189
189
 
190
190
  2. DETERMINE QUESTIONS:
191
191
 
192
- Determine the questions, comprised of a globally-unique id
193
- <question-N-id/> of `Q<N/>`, and a very brief but precise
194
- question text <question-N-text/>. Each question is chosen to
192
+ Determine the questions, comprised of a round-local id
193
+ <question-N-id/> of `Q<N/>` -- where <N/> restarts at `1`
194
+ in *every* round, independent of the numbering of previous
195
+ rounds --, and a very brief but precise question text
196
+ <question-N-text/>. Each question is chosen to
195
197
  resolve the open points related to the above understanding
196
198
  of grilling, by focusing on the mentioned *Focus Areas*.
197
199
 
@@ -229,9 +231,10 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
229
231
  Finally, *sort* the questions by descending focus area
230
232
  order -- first all `DOMAIN`, then all `INTERFACE`, then all
231
233
  `ARCHITECTURE`, and then all `IMPLEMENTATION` ones -- and
232
- renumber <N/> according to this order. Truncate the list
233
- after a maximum of 10 questions and set <n/> to the number
234
- of remaining questions. Do not output anything.
234
+ renumber <N/> according to this order, starting at `1`.
235
+ Truncate the list after a maximum of 10 questions and set
236
+ <n/> to the number of remaining questions. Do not output
237
+ anything.
235
238
 
236
239
  Finally, assemble the <question-N/> out of
237
240
  `**<question-N-id/>** ▶ **<context-N-id/>** ▷
@@ -241,8 +244,10 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
241
244
 
242
245
  For all remaining <question-N/>, check the code base and
243
246
  your world knowledge to find *two to three* grounded answer
244
- alternatives <answer-N-K/> with an id <answer-N-K-id/>
245
- of `A<K/>`, a 1-3 word label <answer-N-K-label/>, and
247
+ alternatives <answer-N-K/> with a question-local id
248
+ <answer-N-K-id/> of `A<K/>` -- where <K/> restarts at `1`
249
+ for *every* question, independent of the numbering of other
250
+ questions --, a 1-3 word label <answer-N-K-label/>, and
246
251
  an ultra brief description <answer-N-K-description/> of
247
252
  at most *10 words*. For the answer which reflects the
248
253
  current <todo-what/>/<todo-how/> understanding, append
@@ -304,7 +309,7 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
304
309
  | [...] | [...] |
305
310
 
306
311
  Legend: **DOM**: Domain (MUST), **IFC**: Interface (MUST), **ARC**: Architecture (SHOULD), **IMP**: Implementation (MAY)
307
- **Qn**: global question id, **An**: question-local answer id, ⚑: current decision state
312
+ **Qn**: round-local question id, **An**: question-local answer id, ⚑: current decision state
308
313
  </template>
309
314
 
310
315
  2. Show a custom dialog. Its only answer options are the
@@ -20,6 +20,9 @@
20
20
  ○ `ase-arch-analyze`: Review Software Architecture
21
21
  ○ `ase-arch-discover`: Discover Components
22
22
 
23
+ ⎈ **SPECIFICATION**
24
+ ○ `ase-spec-edit`: Edit Specification
25
+
23
26
  ⎈ **CODING**
24
27
  ○ `ase-code-analyze`: Analyze Source Code
25
28
  ○ `ase-code-lint`: Lint Source Code
@@ -27,7 +27,7 @@ naming, abstraction level), **clarity** (readability and
27
27
  self-documentation for a future reader), **robustness** (error handling,
28
28
  resource and concurrency safety), **security** and **performance** (risks
29
29
  introduced by the change), **convention** (conformance to the
30
- project's documented conventions - code style and the plan/spec/arch
30
+ project's documented conventions - code style and the plan/spec
31
31
  formats described in `AGENTS.md` and the `ase-format-*` meta documents),
32
32
  **testing** (inadequate coverage for the change - new or fixed behavior
33
33
  left untested, adjacent tests not updated, or existing tests silently