@plurnk/plurnk-contracts 1.28.0 → 1.29.0
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/SPEC.md +18 -5
- package/package.json +1 -1
- package/plurnk.md +7 -3
package/SPEC.md
CHANGED
|
@@ -680,7 +680,11 @@ by one ASCII space. Target and scope form one resource selection; COPY/MOVE
|
|
|
680
680
|
repeat the complete selection/metadata group per operand. ANTLR accepts
|
|
681
681
|
adjacent slots and scope/metadata permutations within a selection without
|
|
682
682
|
changing ownership or making them distinct canonical forms. Each selection
|
|
683
|
-
has at most one scope; its metadata blocks retain their authored order.
|
|
683
|
+
has at most one scope; its metadata blocks retain their authored order. A second scope
|
|
684
|
+
is refused, and the recovery reads the pair: a line number followed by its anchor
|
|
685
|
+
(`<91> <@abcde>`, a copied row prefix) recovers to the anchor alone, two other single
|
|
686
|
+
positions to one scope with both ends (`<@abcde> <-1>` to `<@abcde,-1>`), and anything
|
|
687
|
+
else to one operation per selection.
|
|
684
688
|
|
|
685
689
|
§lifecycle-slots NOTE accepts no target, scope, or metadata. WAIT retains its
|
|
686
690
|
optional target and duration under {§send-wait-scope}. Their literal bodies begin
|
|
@@ -958,7 +962,8 @@ the path and the rest is the channel (a spelling that opens with `#` names no pa
|
|
|
958
962
|
whole), exactly as `worker:///a.html#readable` decomposes, so
|
|
959
963
|
the `#channel` a READ receipt advertises (`channels: {"#readable": N}`) is addressable in the
|
|
960
964
|
same bare spelling the receipt used: a model that appends the channel to the path it was just
|
|
961
|
-
shown addresses the same entry
|
|
965
|
+
shown addresses the same entry, and so does one that writes it after the parenthesis,
|
|
966
|
+
`(page.html) #readable`, which {§naked-pattern} reads as the channel. `raw` is therefore always the path alone; a
|
|
962
967
|
bare path never contains a literal `#`, and `PlurnkParser.stringify` renders the channel back.
|
|
963
968
|
Without a `#` the field is absent, so an older `LocalPath` literal stays valid.
|
|
964
969
|
|
|
@@ -1825,7 +1830,11 @@ diagnostics are:
|
|
|
1825
1830
|
scope or option block, the rest of a FIND, READ or KILL heading line is the
|
|
1826
1831
|
matcher, in whichever dialect its first characters claim
|
|
1827
1832
|
({§matcher-prefix-claims}): `/re/i`, `^anchored`, `//xpath`, `$.json`, `~words`,
|
|
1828
|
-
`&symbol`, or a sigil-less glob or literal such as `TODO` or `*.ts`.
|
|
1833
|
+
`&symbol`, or a sigil-less glob or literal such as `TODO` or `*.ts`. One
|
|
1834
|
+
spelling is not a matcher: `#name` alone, a `#` followed by one channel token
|
|
1835
|
+
and nothing else, after a target that names no channel, is that target's
|
|
1836
|
+
channel exactly as if written on the path ({§local-path-fragment}); a target
|
|
1837
|
+
that already names a channel keeps such a token as its pattern. Those
|
|
1829
1838
|
matchers remain independent of owner options: a block without `pattern` never
|
|
1830
1839
|
erases the heading matcher, and invalid blocks still reach the owning validator.
|
|
1831
1840
|
These operations take no body, so heading-line text can mean nothing else. On EDIT only
|
|
@@ -1875,6 +1884,7 @@ diagnostics are:
|
|
|
1875
1884
|
| `READ → sh:///x#stdout <1,50>` | the target, `READ (sh:///x#stdout) <1,50>`; COPY/MOVE take one arrow per operand | `` `→ sh:///x#stdout` is how the log shows an address; it was read as the target. Write the target in parentheses: `READ (sh:///x#stdout) <1,50>`. `` |
|
|
1876
1885
|
| `READ (a.py) <1,50> · 900`, `· 320 tokens`, a bare `·` | nothing: the token charge is dropped, on the heading or after a matcher | `` `· 900` is the token charge the log shows on a heading; it is not part of an operation and was ignored. `` |
|
|
1877
1886
|
| `FIND (x) /re/ · locate the sign handling` | the aside | `` `· locate the sign handling` was read as the aside; a note on an operation is written `<!-- locate the sign handling -->`. `` |
|
|
1887
|
+
| `FIND (x) <84,180> · no <!-- read the helpers -->` | the comment is the aside; the dot note before it is stray text, dropped | `` `· no` was ignored; the aside is `<!-- read the helpers -->`. `` |
|
|
1878
1888
|
|
|
1879
1889
|
The arrow's path runs to the next space, `<` or `[`; a `·` never begins a heading matcher. In
|
|
1880
1890
|
distinct recorded benchmark emissions the arrow form opened 40 headings and the charge ended 52,
|
|
@@ -1911,8 +1921,11 @@ diagnostics are:
|
|
|
1911
1921
|
scope opener, report the offending scope (at most 64 code points, ending at
|
|
1912
1922
|
`>` or the heading's line end) and its operation's constraint: FIND result
|
|
1913
1923
|
positions, text coordinates, or no scope. Do not append advice for
|
|
1914
|
-
other operations or infer why the producer supplied the value.
|
|
1915
|
-
|
|
1924
|
+
other operations or infer why the producer supplied the value. A text-coordinate
|
|
1925
|
+
scope that pairs an anchor with the same five characters unmarked (`<@abcde,fghij>`)
|
|
1926
|
+
states the anchor rule instead, with the scope marked: `` every line anchor carries
|
|
1927
|
+
its `@`: `<@abcde,@fghij>` ``. Spacing and boundary-loss diagnostics retain their own
|
|
1928
|
+
contracts.
|
|
1916
1929
|
- §misplaced-aside-advisory **Aside in the body.** A READ or FIND whose
|
|
1917
1930
|
body is solely an HTML comment (`<!-- … -->`) can never carry a matcher: it is
|
|
1918
1931
|
the aside the model put on the line below the heading. The builder takes
|
package/package.json
CHANGED
package/plurnk.md
CHANGED
|
@@ -28,12 +28,16 @@ body?
|
|
|
28
28
|
|
|
29
29
|
## Workflow Management
|
|
30
30
|
|
|
31
|
+
```SEND <!-- parameterless send messages user -->
|
|
32
|
+
This is an example of a brief progress update for the user.
|
|
33
|
+
```
|
|
34
|
+
|
|
31
35
|
```WAIT <60> <!-- wait up to 60 seconds -->
|
|
32
|
-
|
|
36
|
+
This is an example of a brief progress update for the user.
|
|
33
37
|
```
|
|
34
38
|
|
|
35
39
|
> [!IMPORTANT]
|
|
36
|
-
> YOU SHOULD
|
|
40
|
+
> YOU SHOULD ONLY answer the user with SEND, WAIT, or the KILL turn.
|
|
37
41
|
> YOU SHOULD NOT perform a KILL turn before you have fully resolved all child workers and streams.
|
|
38
42
|
> YOU MAY perform the standalone KILL turn by emitting a single parameterless KILL containing the final deliverable response.
|
|
39
43
|
|
|
@@ -62,7 +66,7 @@ This is an example of the complete, final deliverable response.
|
|
|
62
66
|
|
|
63
67
|
* `(path)` may be a glob/extglob, permitting bulk operations.
|
|
64
68
|
* Log item paths nest: `log:///1/2/3/READ` is loop/turn/item/OP.
|
|
65
|
-
* FIND results hold one inner array per path: its channels, default first; append `#channel` to select another
|
|
69
|
+
* FIND results hold one inner array per path: its channels, default first; append `#channel` to the path to select another: `(sh:///ab3d5678#stderr)`.
|
|
66
70
|
* Percent-encode in paths `(` as `%28` and `)` as `%29`.
|
|
67
71
|
|
|
68
72
|
## `<scope|range>`
|