plain-forge 1.0.14 → 1.0.15

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.
@@ -74,6 +74,5 @@ When writing or editing a `***functional specs***` section in a `.plain` file, a
74
74
  - All :Participant: members of the :Conversation: can see the new :Message:.
75
75
 
76
76
  ***acceptance tests***
77
- - Sending a :Message: to a :Conversation: with three participants should
78
- make the message visible to all three.
77
+ - Sending a :Message: to a :Conversation: with three participants should make the message visible to all three.
79
78
  ```
@@ -14,8 +14,8 @@ A linked resource **must not** be any of the following:
14
14
  1. **A folder / directory.** `[integrations](src/integrations/)`, `[host project](../host_project/)` are invalid — the renderer cannot ingest a directory. Pick the single most representative file inside (a `README.md`, an exemplar source file, a manifest) and link **that**.
15
15
  2. **A URL / external location.** `[Stripe docs](https://stripe.com/docs/api)`, any `http://` / `https://` / `ftp://` / `git://` / `s3://` / `gs://` target. Linked resources are local-file only. If a URL's content is essential, fetch it once, save the response to a text file under `resources/`, and link the saved file.
16
16
  3. **A binary file.** PNG, JPG, GIF, PDF, DOCX, XLSX, ZIP, MP3, MP4, compiled binaries (`.exe`, `.so`, `.class`, `.wasm`), and anything else that isn't human-readable text in its raw form. Binary content cannot be meaningfully consumed by the renderer — transcribe it into a text-based form first (a UI screenshot becomes a Markdown description, a PDF spec becomes a Markdown extract or the underlying JSON Schema / OpenAPI, an architecture diagram becomes a Mermaid block).
17
+ 4. **Another `.plain` file.** `[Auth Module](auth.plain)` is invalid. To reference another module, use the `require` or `import` frontmatter directives. Do not link it as a markdown resource; the `plain-dry-run` will flag this as a syntax error.
17
18
 
18
- If the markdown-link target ends with `/`, contains `://`, resolves to a directory, or has a binary extension, **stop** — it cannot be a linked resource. Convert it first.
19
19
 
20
20
  ## URLs and folder paths must not appear *anywhere* in `.plain` content
21
21
  - The constraint is not only about markdown links — URLs and folder paths must not appear **anywhere** in `.plain` content (concept body prose, functional-spec text, implementation reqs, test reqs)
@@ -31,15 +31,15 @@ If the markdown-link target ends with `/`, contains `://`, resolves to a directo
31
31
  ```plain
32
32
  ***definitions***
33
33
 
34
- - :TaskCreateRequest: is the JSON payload for creating a task, defined by
35
- [resources/task_create_request.schema.json](resources/task_create_request.schema.json).
36
- - :TasksAPI: is the public HTTP surface for tasks, defined by
37
- [resources/tasks_openapi.yaml](resources/tasks_openapi.yaml).
34
+ - :TaskCreateRequest: is the JSON payload for creating a task.
35
+ - It is defined by [resources/task_create_request.schema.json](resources/task_create_request.schema.json).
36
+ - :TasksAPI: is the public HTTP surface for tasks.
37
+ - It is defined by [resources/tasks_openapi.yaml](resources/tasks_openapi.yaml).
38
38
 
39
39
  ***functional specs***
40
40
 
41
- - :User: should be able to add :Task: by POSTing :TaskCreateRequest: to the
42
- `POST /tasks` endpoint of :TasksAPI:. The endpoint responds per :TasksAPI:.
41
+ - :User: should be able to add :Task: by POSTing :TaskCreateRequest: to the `POST /tasks` endpoint of :TasksAPI:.
42
+ - The endpoint responds per :TasksAPI:.
43
43
  ```
44
44
 
45
45
  ## Each linked resource is referenced from exactly one place
@@ -50,8 +50,8 @@ If the markdown-link target ends with `/`, contains `://`, resolves to a directo
50
50
  ```plain
51
51
  ***definitions***
52
52
 
53
- - :TaskModalSpec: is the user-interface contract for the task modal,
54
- fully described in [task_modal_specification.yaml](task_modal_specification.yaml).
53
+ - :TaskModalSpec: is the user-interface contract for the task modal.
54
+ - It is fully described in [task_modal_specification.yaml](task_modal_specification.yaml).
55
55
 
56
56
  ***functional specs***
57
57
 
@@ -26,17 +26,16 @@ Use standard markdown link syntax inside any spec section:
26
26
 
27
27
  ```plain
28
28
  ***definitions***
29
- - :AuthData: is the authentication data structure. Its format is defined
30
- in the [auth schema](resources/auth_schema.json).
29
+ - :AuthData: is the authentication data structure.
30
+ - Its format is defined in the [auth schema](resources/auth_schema.json).
31
31
 
32
32
  ***implementation reqs***
33
- - When transforming :BackupData:, use the JOLT transform defined in
34
- [backup_transform.jolt](resources/backup_transform.jolt).
33
+ - When transforming :BackupData:, use the JOLT transform.
34
+ - The transform is defined in [backup_transform.jolt](resources/backup_transform.jolt).
35
35
 
36
36
  ***functional specs***
37
37
 
38
- - The system should expose an API conforming to the
39
- [API specification](resources/api_spec.yaml).
38
+ - The system should expose an API conforming to the [API specification](resources/api_spec.yaml).
40
39
  ```
41
40
 
42
41
  ## Path Rules
@@ -69,10 +69,9 @@ Too complex:
69
69
 
70
70
  Acceptable (separate the modes):
71
71
  - The system should process standard :Order: by validating and storing it.
72
- - The system should process express :Order: by queuing it for immediate dispatch
73
- without validation.
74
- - The system should process bulk :Order: by splitting it into sub-orders of 100
75
- items each and processing them individually.
72
+ - The system should process express :Order: by queuing it for immediate dispatch without validation.
73
+ - The system should process bulk :Order: by splitting it into sub-orders of 100 items each.
74
+ - Each sub-order is processed individually.
76
75
  ```
77
76
 
78
77
  ### 4. Cross-Cutting Concerns
@@ -88,8 +87,7 @@ Too complex:
88
87
  Acceptable (separate concerns):
89
88
  - The system should fetch :Resource: items from the external API.
90
89
  - The system should paginate when fetching :Resource: items from the external API.
91
- - The system should retry fetching :Resource: on transient errors using
92
- exponential backoff.
90
+ - The system should retry fetching :Resource: on transient errors using exponential backoff.
93
91
  ```
94
92
 
95
93
  ### 5. UI Complexity
@@ -111,10 +111,10 @@ If the spec describes different modes or branches, give each its own spec.
111
111
  **After:**
112
112
  ```plain
113
113
  - The system should generate a standard :MealPlan: using round-robin :Recipe: assignment.
114
- - The system should generate a restrictive :MealPlan: by filtering out excluded
115
- :Ingredient: items before applying round-robin assignment.
116
- - The system should allow :User: to manually assign :Recipe: items to individual
117
- :Slot: items for a custom :MealPlan:.
114
+ - The system should generate a restrictive :MealPlan:.
115
+ - Excluded :Ingredient: items are filtered out first.
116
+ - Round-robin :Recipe: assignment is then applied.
117
+ - The system should allow :User: to manually assign :Recipe: items to :Slot: items for a custom :MealPlan:.
118
118
  ```
119
119
 
120
120
  ### Strategy 5: Build UI Incrementally
@@ -184,8 +184,8 @@ The frontmatter is enclosed between `---` markers and supports:
184
184
  Specifications can reference external files using markdown link syntax. The linked resource is passed along with the spec to the renderer. File paths are resolved relative to the `.plain` file location. Only files in the same folder (and subfolders) are supported.
185
185
 
186
186
  ```plain
187
- - :User: should be able to add :Task:. The details of the user interface
188
- are provided in the file [task_modal_specification.yaml](task_modal_specification.yaml).
187
+ - :User: should be able to add :Task:.
188
+ - The user-interface details are in [task_modal_specification.yaml](task_modal_specification.yaml).
189
189
  ```
190
190
 
191
191
  #### Hard constraint: a linked resource is always a single, text-based file on disk
@@ -220,15 +220,15 @@ The accompanying spec line should describe the *role* of the artifact ("the requ
220
220
  ```plain
221
221
  ***definitions***
222
222
 
223
- - :TaskCreateRequest: is the JSON payload for creating a task, defined by
224
- [resources/task_create_request.schema.json](resources/task_create_request.schema.json).
225
- - :TasksAPI: is the public HTTP surface for tasks, defined by
226
- [resources/tasks_openapi.yaml](resources/tasks_openapi.yaml).
223
+ - :TaskCreateRequest: is the JSON payload for creating a task.
224
+ - It is defined by [resources/task_create_request.schema.json](resources/task_create_request.schema.json).
225
+ - :TasksAPI: is the public HTTP surface for tasks.
226
+ - It is defined by [resources/tasks_openapi.yaml](resources/tasks_openapi.yaml).
227
227
 
228
228
  ***functional specs***
229
229
 
230
- - :User: should be able to add :Task: by POSTing :TaskCreateRequest: to the
231
- `POST /tasks` endpoint of :TasksAPI:. The endpoint responds per :TasksAPI:.
230
+ - :User: should be able to add :Task: by POSTing :TaskCreateRequest: to the `POST /tasks` endpoint of :TasksAPI:.
231
+ - The endpoint responds per :TasksAPI:.
232
232
  ```
233
233
 
234
234
  **Each linked resource must be referenced from exactly one place** in the project — a single functional spec, implementation requirement, or `***definitions***` entry. Linking the same file from two functional specs (or from a functional spec *and* a requirement, etc.) creates two independent sources of truth: any later edit to one site silently diverges from the other, and the renderer has no way to know which one is canonical.
@@ -243,8 +243,8 @@ For example, instead of linking `task_modal_specification.yaml` from two differe
243
243
  ```plain
244
244
  ***definitions***
245
245
 
246
- - :TaskModalSpec: is the user-interface contract for the task modal,
247
- fully described in [task_modal_specification.yaml](task_modal_specification.yaml).
246
+ - :TaskModalSpec: is the user-interface contract for the task modal.
247
+ - It is fully described in [task_modal_specification.yaml](task_modal_specification.yaml).
248
248
 
249
249
  ***functional specs***
250
250
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plain-forge",
3
- "version": "1.0.14",
3
+ "version": "1.0.15",
4
4
  "description": "Conversational spec-writing tool for ***plain specification language",
5
5
  "type": "module",
6
6
  "engines": {