docs(ssdl): rename SSDL shape symbols to concise form (o->, o=>)

Final vocabulary:
- ===>        -> ->        (codepath)
- ===>W===>  -> =>        (wide codepath)
- o==>       -> o->       (codecycle)
- oo==>oo    -> o=>       (wide codecycle)
- ===>B===>  -> ->B->     (codepath with branch)
- ===>M===>  -> ->M->     (codepath with merge)

Composites ===>B===> and ===>M===> preserved as ->B->/->M-> so the
branch/merge markers stay visible (vs. dropping them entirely).

Scope: 3 reports files (computational_shapes_ssdl_digest,
proposed_new_tracks, session_synthesis), 4 intent_dsl_survey files
(plan, report, report_v1.1, report_v1.2), 3 nagent_review files
(state.toml description, v2_2, v2_3). All old symbols verified gone
via grep; all new symbols verified present at expected locations.
This commit is contained in:
ed
2026-06-12 12:52:20 -04:00
parent dff97b15c3
commit c4085319ff
10 changed files with 740 additions and 738 deletions
@@ -524,7 +524,7 @@ For each verb, the 5-column table:
- "Borrowed from" note
- SSDL shape tag
Tier 1 SSDL shape tags: most are `[I]` (single instruction) since they're scalar operations; the range `for x .. n` is `o==>` (codecycle).
Tier 1 SSDL shape tags: most are `[I]` (single instruction) since they're scalar operations; the range `for x .. n` is `o->` (codecycle).
### Task 16: Write section 4 Tier 2 (data pipeline)
@@ -545,7 +545,7 @@ For each verb, the 5-column table (with one extra column: "maps to mcp_client to
- "Borrowed from" note
- SSDL shape tag
Tier 2 SSDL shape tags: `scan` is `[I]`, `filter`/`map` are `===>` (codepath) or `o==>` (codecycle), `arena { }` is `o==>` (codecycle), `pipe` is `===>W===>` (wide codepath).
Tier 2 SSDL shape tags: `scan` is `[I]`, `filter`/`map` are `->` (codepath) or `o->` (codecycle), `arena { }` is `o->` (codecycle), `pipe` is `=>` (wide codepath).
### Task 17: Write section 4 Tier 3 (shell)
@@ -558,7 +558,7 @@ Per spec §3.4 Tier 3, the verbs are: `exec`, `open`, `read`, `write`, `close`,
For each verb, the 5-column table (with "maps to mcp_client tool" and "maps to shell_runner" columns).
Tier 3 SSDL shape tags: most are `[I]` (single instruction); `wait`/`poll` are `o==>` (codecycle, blocking or polling).
Tier 3 SSDL shape tags: most are `[I]` (single instruction); `wait`/`poll` are `o->` (codecycle, blocking or polling).
### Task 18: Write section 4 Tier 4 (AI-fuzzing tolerance)
@@ -579,7 +579,7 @@ This is the **novel tier** — give it extra space. For each verb:
- "Borrowed from" note
- SSDL shape tag
Tier 4 SSDL shape tags: most are `[I]` (single instruction); `try { ... } recover { ... }` is `===>B===>` (codepath with branch); `sandbox { ... }` is `o==>` (codecycle, the IEventTarget boundary); `assumewide` is `===>W===>` (wide codepath assumption).
Tier 4 SSDL shape tags: most are `[I]` (single instruction); `try { ... } recover { ... }` is `->B->` (codepath with branch); `sandbox { ... }` is `o->` (codecycle, the IEventTarget boundary); `assumewide` is `=>` (wide codepath assumption).
### Task 19: Write section 5 (hardware mapping)
@@ -150,10 +150,10 @@ The detailed analysis for each cluster lives in the research sub-reports at `res
| # | Shape | One-line definition | SSDL symbol |
|---|---|---|---|
| 1 | **Instruction** | A single unit of computation. Reads data, writes data, or both. | `[I]` |
| 2 | **Codepath** | A sequential list of instructions that *terminates*. No loops. | `===>` |
| 3 | **Wide codepath** | A codepath whose execution *causes* several other codepaths to occur simultaneously. | `===>W===>` |
| 4 | **Codecycle** | A circular structure — a codepath that *repeats* at its first instruction after its last. | `o==>` |
| 5 | **Wide codecycle** | Multiple codecycles performing the same task simultaneously. | `oo==>oo` |
| 2 | **Codepath** | A sequential list of instructions that *terminates*. No loops. | `->` |
| 3 | **Wide codepath** | A codepath whose execution *causes* several other codepaths to occur simultaneously. | `=>` |
| 4 | **Codecycle** | A circular structure — a codepath that *repeats* at its first instruction after its last. | `o->` |
| 5 | **Wide codecycle** | Multiple codecycles performing the same task simultaneously. | `o=>` |
| 6 | **Codecycle graph** | Multiple codecycles + the data they read and write. | `boxes + arrows` |
**The 7 modifiers:**
@@ -168,7 +168,7 @@ The detailed analysis for each cluster lives in the research sub-reports at `res
| `[N]` | nil sentinel | A special value that satisfies "is this OK to use?" in all cases |
| `───` | data | A line representing data being read or written (not a codepath) |
**How the DSL uses SSDL tags.** Each verb in §4 has a "Shape" column with an SSDL tag. For example, `sum` is `[I]` (single instruction); `for x .. n` is `o==>` (codecycle); `arena { }` is a sub-codepath scope; `pipe` is `===>W===>` (wide codepath, the chain can fan out); the entire DSL pipeline is a codecycle graph (multiple codecycles + the data they read and write). This lets the reader see the *shape* of a pipeline at a glance.
**How the DSL uses SSDL tags.** Each verb in §4 has a "Shape" column with an SSDL tag. For example, `sum` is `[I]` (single instruction); `for x .. n` is `o->` (codecycle); `arena { }` is a sub-codepath scope; `pipe` is `=>` (wide codepath, the chain can fan out); the entire DSL pipeline is a codecycle graph (multiple codecycles + the data they read and write). This lets the reader see the *shape* of a pipeline at a glance.
### Cluster 6 — Project's Own Command DSL Precedents
@@ -315,7 +315,7 @@ The Tier 1 verbs are drawn directly from the user's math pseudocode.
|---|---|---|---|---|---|---|
| `:=` | Local bind | `name := expr` | Stack-scoped local declaration | `result := Matrix(m.rows -1, m.columns -1)` | Forth (dictionary entries); Joy (quotations) | `[I]` |
| `stack { ... }` | Stack scope | `stack { decl1; decl2; ... }` | Block of stack-allocated locals | `stack { result := ...; row_offset, col_offset := Scalar; }` | Forth (colon definitions); KYRA (basic blocks) | `[I]` |
| `for x .. n` | Range iteration | `for x .. n { body }` | Iterate `x` over `[0, n)` | `for col .. m.columns` | APL `ιN`; K `!R`; BQN `↕N`; Uiua (stack iteration) | `o==>` |
| `for x .. n` | Range iteration | `for x .. n { body }` | Iterate `x` over `[0, n)` | `for col .. m.columns` | APL `ιN`; K `!R`; BQN `↕N`; Uiua (stack iteration) | `o->` |
| `+` | Add | `a + b` | Element-wise sum | `2 + 3` (yields 5) | All languages | `[I]` |
| `-` | Subtract | `a - b` | Element-wise difference | `5 - 2` (yields 3) | All languages | `[I]` |
| `*` | Multiply | `a * b` | Element-wise product | `2 * 3` (yields 6) | All languages | `[I]` |
@@ -335,17 +335,17 @@ The Tier 2 verbs wrap the existing 45+ MCP tools (per `docs/guide_tools.md` §"N
| Symbol | Name | Signature | Semantics | Example | Maps to mcp_client tool | Borrowed from | Shape |
|---|---|---|---|---|---|---|---|
| `scan` | Scan | `scan path` | Read source (directory, file, URL); first verb in every pipeline | `scan "src/" -> filter !dir -> map ext` | `list_directory` + `search_files` + `read_file` | Jofito `scandir()` | `[I]` |
| `select` | Select | `select condition` | Keep records matching condition (jq-style filter) | `scan "src/" -> select .extension == ".py"` | (jq-style filter) | jq `select(condition)`; Joy `filter` | `===>` |
| `filter` | Filter | `filter predicate` | Keep records where predicate is true | `scan "src/" -> filter .size > 0` | (predicate on FileItem) | Jofito `{filter ...}` predicate | `===>` |
| `map` | Map | `map block` | Apply block to each record | `scan "src/" -> map ext` | (no direct equivalent) | jq `.[] | .field`; Joy `map`; CoSy `' verb 'm` | `o==>` |
| `fold` | Fold | `fold init block` | Reduce to single value | `scan "src/" -> fold 0 { acc + .size }` | (no direct equivalent) | jq `reduce`; Joy `fold` | `o==>` |
| `select` | Select | `select condition` | Keep records matching condition (jq-style filter) | `scan "src/" -> select .extension == ".py"` | (jq-style filter) | jq `select(condition)`; Joy `filter` | `->` |
| `filter` | Filter | `filter predicate` | Keep records where predicate is true | `scan "src/" -> filter .size > 0` | (predicate on FileItem) | Jofito `{filter ...}` predicate | `->` |
| `map` | Map | `map block` | Apply block to each record | `scan "src/" -> map ext` | (no direct equivalent) | jq `.[] | .field`; Joy `map`; CoSy `' verb 'm` | `o->` |
| `fold` | Fold | `fold init block` | Reduce to single value | `scan "src/" -> fold 0 { acc + .size }` | (no direct equivalent) | jq `reduce`; Joy `fold` | `o->` |
| `sort` | Sort | `sort key` | Order records by key | `scan "src/" -> sort .name` | (no direct equivalent) | Joy `qsort`; jq `sort` | `[I]` |
| `group` | Group | `group key` | Bucket records by key | `scan "src/" -> group .extension` | (no direct equivalent) | jq `group_by`; CoSy APL-derived | `o==>` |
| `group` | Group | `group key` | Bucket records by key | `scan "src/" -> group .extension` | (no direct equivalent) | jq `group_by`; CoSy APL-derived | `o->` |
| `dedupe` | Dedupe | `dedupe` | Remove duplicates | `scan "src/" -> dedupe` | (no direct equivalent) | jq `unique`; CoSy | `[I]` |
| `arena { }` | Arena scope | `arena { body }` | Tape-drive region; pre-scatter contents | `arena { [ scan ]; [ filter ]; [ print ] }` | (compiler directive) | KYRA magenta pipe; Onat preemptive scatter | `o==>` |
| `scatter` | Scatter | `scatter workers` | Fork pipeline across `workers` cores | `scan "src/" -> scatter 4 -> filter` | (runtime hint) | Onat preemptive scatter; Lottes X.com thread line 55-61 | `===>W===>` |
| `arena { }` | Arena scope | `arena { body }` | Tape-drive region; pre-scatter contents | `arena { [ scan ]; [ filter ]; [ print ] }` | (compiler directive) | KYRA magenta pipe; Onat preemptive scatter | `o->` |
| `scatter` | Scatter | `scatter workers` | Fork pipeline across `workers` cores | `scan "src/" -> scatter 4 -> filter` | (runtime hint) | Onat preemptive scatter; Lottes X.com thread line 55-61 | `=>` |
| `gather` | Gather | `gather` | Collect scattered sub-streams | `scan "src/" -> scatter 4 -> filter -> gather` | (runtime hint) | Onat inverse of scatter | `[I]` |
| `pipe` | Pipe root | `pipe` | Explicit chain root (synonym for `->`) | `pipe [ scan, filter, print ]` | (no direct equivalent) | Jofito pipe coalescing (transcript:376-410) | `===>W===>` |
| `pipe` | Pipe root | `pipe` | Explicit chain root (synonym for `->`) | `pipe [ scan, filter, print ]` | (no direct equivalent) | Jofito pipe coalescing (transcript:376-410) | `=>` |
**Total Tier 2: 12 verbs.**
@@ -362,8 +362,8 @@ The Tier 3 verbs wrap existing MCP tools (per `docs/guide_tools.md` §"Native To
| `close` | Close | `close handle` | Close handle | `close file_handle` | (no direct equivalent; close is implicit in Python) | Forth `CLOSE-FILE`; bash `exec` | `[I]` |
| `path` | Path | `path` | Get current path (or `cd`) | `path` | (no direct equivalent; use `cwd`) | shell `pwd`; CoSy `path` | `[I]` |
| `env` | Env | `env var` | Get env var | `env HOME` | (no direct equivalent) | shell `echo $HOME` | `[I]` |
| `wait` | Wait | `wait ms` | Block for `ms` milliseconds | `wait 1000` | (no direct equivalent) | shell `sleep` | `o==>` |
| `poll` | Poll | `poll handle ms` | Poll handle with timeout | `poll file_handle 5000` | (no direct equivalent) | shell `read -t` | `o==>` |
| `wait` | Wait | `wait ms` | Block for `ms` milliseconds | `wait 1000` | (no direct equivalent) | shell `sleep` | `o->` |
| `poll` | Poll | `poll handle ms` | Poll handle with timeout | `poll file_handle 5000` | (no direct equivalent) | shell `read -t` | `o->` |
| `cwd` | CWD | `cwd` | Get current working directory | `cwd` | (no direct equivalent) | shell `pwd` | `[I]` |
**Total Tier 3: 10 verbs.**
@@ -374,14 +374,14 @@ The Tier 4 verbs are what make the DSL workable for AI agents that may fuzz verb
| Symbol | Name | Signature | Semantics | Example | Novel piece | Borrowed from | Shape |
|---|---|---|---|---|---|---|---|
| `fuzzy` | Fuzzy | `fuzzy expr` | Declare a parse-tolerance region; parser accepts near-matches | `fuzzy { scan "src/" -> filter .ext }` | Tolerance for AI verb-name fuzzing | nagent "discovery" intent (per `decisions.md:119,128`); SSDL "assume as much as possible" | `===>` |
| `try { ... } recover { ... }` | Try / Recover | `try { body } recover err { fallback }` | Returns `Result[T]`; on error, the `recover` block runs | `try { read "src/foo.py" } recover { read "src/Foo.py" }` | Error envelope as data (Fleury pattern) | `data_oriented_error_handling_20260606`; Wasm `try`/`catch` block/loop/if/end | `===>B===>` |
| `sandbox { ... }` | Sandbox | `sandbox { body }` | IEventTarget boundary; all writes in the block go through the formal event channel | `sandbox { write "tmp/x" "data" }` | O'Donnell's "reads free, writes formalized" invariant applied to the DSL | O'Donnell `mvc.html` "Writing to Model state" | `o==>` |
| `fuzzy` | Fuzzy | `fuzzy expr` | Declare a parse-tolerance region; parser accepts near-matches | `fuzzy { scan "src/" -> filter .ext }` | Tolerance for AI verb-name fuzzing | nagent "discovery" intent (per `decisions.md:119,128`); SSDL "assume as much as possible" | `->` |
| `try { ... } recover { ... }` | Try / Recover | `try { body } recover err { fallback }` | Returns `Result[T]`; on error, the `recover` block runs | `try { read "src/foo.py" } recover { read "src/Foo.py" }` | Error envelope as data (Fleury pattern) | `data_oriented_error_handling_20260606`; Wasm `try`/`catch` block/loop/if/end | `->B->` |
| `sandbox { ... }` | Sandbox | `sandbox { body }` | IEventTarget boundary; all writes in the block go through the formal event channel | `sandbox { write "tmp/x" "data" }` | O'Donnell's "reads free, writes formalized" invariant applied to the DSL | O'Donnell `mvc.html` "Writing to Model state" | `o->` |
| `audit` | Audit | `audit msg` | Log the state change to a structured record; the IEventTarget itself | `audit "wrote tmp/x"` | Per-write audit log; full replay capability | O'Donnell `mvc.html` "Event callbacks"; nagent's self-describing tools | `[I]` |
| `didyoumean` | Did you mean | `didyoumean ambiguous` | Propose the closest matching verb(s) for an ambiguous input | `didyoumean "skan"` | Recovery primitive for AI typos | nagent Bridge DSL intent model; Anthropic `input_examples` | `[I]` |
| `span` | Span | `span intent` | Decompose a compound intent into a span of sub-MCP grammar tokens | `span "read foo.py:MyClass"` | Spans the `read_file` and `py_get_definition` tools | MCP DSL per-MCP grammar (`spec.md:456-465`); OpenAI namespace grouping | `[I]` |
| `offset` | Offset | `offset symbol` | Resolve a symbol to a file:line without requiring the model to specify the line | `offset "foo.py:MyClass.method"` | Implicit offset resolution | MCP DSL line-range notation; OpenAI "don't make the model fill known args" | `[Q]` |
| `assumewide` | Assume wide | `assumewide intent` | If the intent is broad or ambiguous, select the most-capable matching tool (the "fewer, more capable" heuristic) | `assumewide "refactor"` | Prefer broad-capability tools over narrow specialists | OpenAI "fewer than 20 functions"; Anthropic `tool_choice: tool` force-call | `===>W===>` |
| `assumewide` | Assume wide | `assumewide intent` | If the intent is broad or ambiguous, select the most-capable matching tool (the "fewer, more capable" heuristic) | `assumewide "refactor"` | Prefer broad-capability tools over narrow specialists | OpenAI "fewer than 20 functions"; Anthropic `tool_choice: tool` force-call | `=>` |
**Total Tier 4: 8 verbs.**
@@ -154,10 +154,10 @@ The detailed analysis for each cluster lives in the research sub-reports at `res
| # | Shape | One-line definition | SSDL symbol |
|---|---|---|---|
| 1 | **Instruction** | A single unit of computation. Reads data, writes data, or both. | `[I]` |
| 2 | **Codepath** | A sequential list of instructions that *terminates*. No loops. | `===>` |
| 3 | **Wide codepath** | A codepath whose execution *causes* several other codepaths to occur simultaneously. | `===>W===>` |
| 4 | **Codecycle** | A circular structure — a codepath that *repeats* at its first instruction after its last. | `o==>` |
| 5 | **Wide codecycle** | Multiple codecycles performing the same task simultaneously. | `oo==>oo` |
| 2 | **Codepath** | A sequential list of instructions that *terminates*. No loops. | `->` |
| 3 | **Wide codepath** | A codepath whose execution *causes* several other codepaths to occur simultaneously. | `=>` |
| 4 | **Codecycle** | A circular structure — a codepath that *repeats* at its first instruction after its last. | `o->` |
| 5 | **Wide codecycle** | Multiple codecycles performing the same task simultaneously. | `o=>` |
| 6 | **Codecycle graph** | Multiple codecycles + the data they read and write. | `boxes + arrows` |
**The 7 modifiers:**
@@ -172,7 +172,7 @@ The detailed analysis for each cluster lives in the research sub-reports at `res
| `[N]` | nil sentinel | A special value that satisfies "is this OK to use?" in all cases |
| `───` | data | A line representing data being read or written (not a codepath) |
**How the DSL uses SSDL tags.** Each verb in §4 has a "Shape" column with an SSDL tag. For example, `sum` is `[I]` (single instruction); `for x .. n` is `o==>` (codecycle); `arena { }` is a sub-codepath scope; `pipe` is `===>W===>` (wide codepath, the chain can fan out); the entire DSL pipeline is a codecycle graph (multiple codecycles + the data they read and write). This lets the reader see the *shape* of a pipeline at a glance.
**How the DSL uses SSDL tags.** Each verb in §4 has a "Shape" column with an SSDL tag. For example, `sum` is `[I]` (single instruction); `for x .. n` is `o->` (codecycle); `arena { }` is a sub-codepath scope; `pipe` is `=>` (wide codepath, the chain can fan out); the entire DSL pipeline is a codecycle graph (multiple codecycles + the data they read and write). This lets the reader see the *shape* of a pipeline at a glance.
### Cluster 6 — Project's Own Command DSL Precedents
@@ -319,7 +319,7 @@ The Tier 1 verbs are drawn directly from the user's math pseudocode.
|---|---|---|---|---|---|---|
| `:=` | Local bind | `name := expr` | Stack-scoped local declaration | `result := Matrix(m.rows -1, m.columns -1)` | Forth (dictionary entries); Joy (quotations) | `[I]` |
| `stack { ... }` | Stack scope | `stack { decl1; decl2; ... }` | Block of stack-allocated locals | `stack { result := ...; row_offset, col_offset := Scalar; }` | Forth (colon definitions); KYRA (basic blocks) | `[I]` |
| `for x .. n` | Range iteration | `for x .. n { body }` | Iterate `x` over `[0, n)` | `for col .. m.columns` | APL `ιN`; K `!R`; BQN `↕N`; Uiua (stack iteration) | `o==>` |
| `for x .. n` | Range iteration | `for x .. n { body }` | Iterate `x` over `[0, n)` | `for col .. m.columns` | APL `ιN`; K `!R`; BQN `↕N`; Uiua (stack iteration) | `o->` |
| `+` | Add | `a + b` | Element-wise sum | `2 + 3` (yields 5) | All languages | `[I]` |
| `-` | Subtract | `a - b` | Element-wise difference | `5 - 2` (yields 3) | All languages | `[I]` |
| `*` | Multiply | `a * b` | Element-wise product | `2 * 3` (yields 6) | All languages | `[I]` |
@@ -339,17 +339,17 @@ The Tier 2 verbs wrap the existing 45+ MCP tools (per `docs/guide_tools.md` §"N
| Symbol | Name | Signature | Semantics | Example | Maps to mcp_client tool | Borrowed from | Shape |
|---|---|---|---|---|---|---|---|
| `scan` | Scan | `scan path` | Read source (directory, file, URL); first verb in every pipeline | `scan "src/" -> filter !dir -> map ext` | `list_directory` + `search_files` + `read_file` | Jofito `scandir()` | `[I]` |
| `select` | Select | `select condition` | Keep records matching condition (jq-style filter) | `scan "src/" -> select .extension == ".py"` | (jq-style filter) | jq `select(condition)`; Joy `filter` | `===>` |
| `filter` | Filter | `filter predicate` | Keep records where predicate is true | `scan "src/" -> filter .size > 0` | (predicate on FileItem) | Jofito `{filter ...}` predicate | `===>` |
| `map` | Map | `map block` | Apply block to each record | `scan "src/" -> map ext` | (no direct equivalent) | jq `.[] | .field`; Joy `map`; CoSy `' verb 'm` | `o==>` |
| `fold` | Fold | `fold init block` | Reduce to single value | `scan "src/" -> fold 0 { acc + .size }` | (no direct equivalent) | jq `reduce`; Joy `fold` | `o==>` |
| `select` | Select | `select condition` | Keep records matching condition (jq-style filter) | `scan "src/" -> select .extension == ".py"` | (jq-style filter) | jq `select(condition)`; Joy `filter` | `->` |
| `filter` | Filter | `filter predicate` | Keep records where predicate is true | `scan "src/" -> filter .size > 0` | (predicate on FileItem) | Jofito `{filter ...}` predicate | `->` |
| `map` | Map | `map block` | Apply block to each record | `scan "src/" -> map ext` | (no direct equivalent) | jq `.[] | .field`; Joy `map`; CoSy `' verb 'm` | `o->` |
| `fold` | Fold | `fold init block` | Reduce to single value | `scan "src/" -> fold 0 { acc + .size }` | (no direct equivalent) | jq `reduce`; Joy `fold` | `o->` |
| `sort` | Sort | `sort key` | Order records by key | `scan "src/" -> sort .name` | (no direct equivalent) | Joy `qsort`; jq `sort` | `[I]` |
| `group` | Group | `group key` | Bucket records by key | `scan "src/" -> group .extension` | (no direct equivalent) | jq `group_by`; CoSy APL-derived | `o==>` |
| `group` | Group | `group key` | Bucket records by key | `scan "src/" -> group .extension` | (no direct equivalent) | jq `group_by`; CoSy APL-derived | `o->` |
| `dedupe` | Dedupe | `dedupe` | Remove duplicates | `scan "src/" -> dedupe` | (no direct equivalent) | jq `unique`; CoSy | `[I]` |
| `arena { }` | Arena scope | `arena { body }` | Tape-drive region; pre-scatter contents | `arena { [ scan ]; [ filter ]; [ print ] }` | (compiler directive) | KYRA magenta pipe; Onat preemptive scatter | `o==>` |
| `scatter` | Scatter | `scatter workers` | Fork pipeline across `workers` cores | `scan "src/" -> scatter 4 -> filter` | (runtime hint) | Onat preemptive scatter; Lottes X.com thread line 55-61 | `===>W===>` |
| `arena { }` | Arena scope | `arena { body }` | Tape-drive region; pre-scatter contents | `arena { [ scan ]; [ filter ]; [ print ] }` | (compiler directive) | KYRA magenta pipe; Onat preemptive scatter | `o->` |
| `scatter` | Scatter | `scatter workers` | Fork pipeline across `workers` cores | `scan "src/" -> scatter 4 -> filter` | (runtime hint) | Onat preemptive scatter; Lottes X.com thread line 55-61 | `=>` |
| `gather` | Gather | `gather` | Collect scattered sub-streams | `scan "src/" -> scatter 4 -> filter -> gather` | (runtime hint) | Onat inverse of scatter | `[I]` |
| `pipe` | Pipe root | `pipe` | Explicit chain root (synonym for `->`) | `pipe [ scan, filter, print ]` | (no direct equivalent) | Jofito pipe coalescing (transcript:376-410) | `===>W===>` |
| `pipe` | Pipe root | `pipe` | Explicit chain root (synonym for `->`) | `pipe [ scan, filter, print ]` | (no direct equivalent) | Jofito pipe coalescing (transcript:376-410) | `=>` |
**Total Tier 2: 12 verbs.**
@@ -366,8 +366,8 @@ The Tier 3 verbs wrap existing MCP tools (per `docs/guide_tools.md` §"Native To
| `close` | Close | `close handle` | Close handle | `close file_handle` | (no direct equivalent; close is implicit in Python) | Forth `CLOSE-FILE`; bash `exec` | `[I]` |
| `path` | Path | `path` | Get current path (or `cd`) | `path` | (no direct equivalent; use `cwd`) | shell `pwd`; CoSy `path` | `[I]` |
| `env` | Env | `env var` | Get env var | `env HOME` | (no direct equivalent) | shell `echo $HOME` | `[I]` |
| `wait` | Wait | `wait ms` | Block for `ms` milliseconds | `wait 1000` | (no direct equivalent) | shell `sleep` | `o==>` |
| `poll` | Poll | `poll handle ms` | Poll handle with timeout | `poll file_handle 5000` | (no direct equivalent) | shell `read -t` | `o==>` |
| `wait` | Wait | `wait ms` | Block for `ms` milliseconds | `wait 1000` | (no direct equivalent) | shell `sleep` | `o->` |
| `poll` | Poll | `poll handle ms` | Poll handle with timeout | `poll file_handle 5000` | (no direct equivalent) | shell `read -t` | `o->` |
| `cwd` | CWD | `cwd` | Get current working directory | `cwd` | (no direct equivalent) | shell `pwd` | `[I]` |
**Total Tier 3: 10 verbs.**
@@ -378,14 +378,14 @@ The Tier 4 verbs are what make the DSL workable for AI agents that may fuzz verb
| Symbol | Name | Signature | Semantics | Example | Novel piece | Borrowed from | Shape |
|---|---|---|---|---|---|---|---|
| `fuzzy` | Fuzzy | `fuzzy expr` | Declare a parse-tolerance region; parser accepts near-matches | `fuzzy { scan "src/" -> filter .ext }` | Tolerance for AI verb-name fuzzing | nagent "discovery" intent (per `decisions.md:119,128`); SSDL "assume as much as possible" | `===>` |
| `try { ... } recover { ... }` | Try / Recover | `try { body } recover err { fallback }` | Returns `Result[T]`; on error, the `recover` block runs | `try { read "src/foo.py" } recover { read "src/Foo.py" }` | Error envelope as data (Fleury pattern) | `data_oriented_error_handling_20260606`; Wasm `try`/`catch` block/loop/if/end | `===>B===>` |
| `sandbox { ... }` | Sandbox | `sandbox { body }` | IEventTarget boundary; all writes in the block go through the formal event channel | `sandbox { write "tmp/x" "data" }` | O'Donnell's "reads free, writes formalized" invariant applied to the DSL | O'Donnell `mvc.html` "Writing to Model state" | `o==>` |
| `fuzzy` | Fuzzy | `fuzzy expr` | Declare a parse-tolerance region; parser accepts near-matches | `fuzzy { scan "src/" -> filter .ext }` | Tolerance for AI verb-name fuzzing | nagent "discovery" intent (per `decisions.md:119,128`); SSDL "assume as much as possible" | `->` |
| `try { ... } recover { ... }` | Try / Recover | `try { body } recover err { fallback }` | Returns `Result[T]`; on error, the `recover` block runs | `try { read "src/foo.py" } recover { read "src/Foo.py" }` | Error envelope as data (Fleury pattern) | `data_oriented_error_handling_20260606`; Wasm `try`/`catch` block/loop/if/end | `->B->` |
| `sandbox { ... }` | Sandbox | `sandbox { body }` | IEventTarget boundary; all writes in the block go through the formal event channel | `sandbox { write "tmp/x" "data" }` | O'Donnell's "reads free, writes formalized" invariant applied to the DSL | O'Donnell `mvc.html` "Writing to Model state" | `o->` |
| `audit` | Audit | `audit msg` | Log the state change to a structured record; the IEventTarget itself | `audit "wrote tmp/x"` | Per-write audit log; full replay capability | O'Donnell `mvc.html` "Event callbacks"; nagent's self-describing tools | `[I]` |
| `didyoumean` | Did you mean | `didyoumean ambiguous` | Propose the closest matching verb(s) for an ambiguous input | `didyoumean "skan"` | Recovery primitive for AI typos | nagent Bridge DSL intent model; Anthropic `input_examples` | `[I]` |
| `span` | Span | `span intent` | Decompose a compound intent into a span of sub-MCP grammar tokens | `span "read foo.py:MyClass"` | Spans the `read_file` and `py_get_definition` tools | MCP DSL per-MCP grammar (`spec.md:456-465`); OpenAI namespace grouping | `[I]` |
| `offset` | Offset | `offset symbol` | Resolve a symbol to a file:line without requiring the model to specify the line | `offset "foo.py:MyClass.method"` | Implicit offset resolution | MCP DSL line-range notation; OpenAI "don't make the model fill known args" | `[Q]` |
| `assumewide` | Assume wide | `assumewide intent` | If the intent is broad or ambiguous, select the most-capable matching tool (the "fewer, more capable" heuristic) | `assumewide "refactor"` | Prefer broad-capability tools over narrow specialists | OpenAI "fewer than 20 functions"; Anthropic `tool_choice: tool` force-call | `===>W===>` |
| `assumewide` | Assume wide | `assumewide intent` | If the intent is broad or ambiguous, select the most-capable matching tool (the "fewer, more capable" heuristic) | `assumewide "refactor"` | Prefer broad-capability tools over narrow specialists | OpenAI "fewer than 20 functions"; Anthropic `tool_choice: tool` force-call | `=>` |
**Total Tier 4: 8 verbs.**
@@ -749,10 +749,10 @@ Per `docs/reports/computational_shapes_ssdl_digest_20260608.md` §1, the SSDL vo
| # | Shape | One-line definition | SSDL symbol |
|---|---|---|---|
| 1 | **Instruction** | A single unit of computation. Reads data, writes data, or both. | `[I]` |
| 2 | **Codepath** | A sequential list of instructions that *terminates*. No loops. | `===>` |
| 3 | **Wide codepath** | A codepath whose execution *causes* several other codepaths to occur simultaneously. | `===>W===>` |
| 4 | **Codecycle** | A circular structure — a codepath that *repeats* at its first instruction after its last. | `o==>` |
| 5 | **Wide codecycle** | Multiple codecycles performing the same task simultaneously. | `oo==>oo` |
| 2 | **Codepath** | A sequential list of instructions that *terminates*. No loops. | `->` |
| 3 | **Wide codepath** | A codepath whose execution *causes* several other codepaths to occur simultaneously. | `=>` |
| 4 | **Codecycle** | A circular structure — a codepath that *repeats* at its first instruction after its last. | `o->` |
| 5 | **Wide codecycle** | Multiple codecycles performing the same task simultaneously. | `o=>` |
| 6 | **Codecycle graph** | Multiple codecycles + the data they read and write. | `boxes + arrows` |
**The 7 modifiers** (full table):
@@ -1080,7 +1080,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- `for col .. m.columns { body }` (per user's pseudocode line 33)
- `for i .. 10 { print i }` (prints 0-9)
- `for i .. arr.size { sum +:= arr[i] }` (sum a vector)
- SSDL shape: `o==>` (codecycle — loops back to first instruction after last)
- SSDL shape: `o->` (codecycle — loops back to first instruction after last)
**`name[a, b, ...]` (Bracket indexing).**
- Signature: `name[i, j, k, ...]`
@@ -1112,7 +1112,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- `sum 1..10` (yields 55; per APL `+/ι10`)
- `product 1..5` (yields 120; per APL `×/ι5`)
- `sum arr` (sum an arbitrary array)
- SSDL shape: `o==>` (codecycle; iterates over elements)
- SSDL shape: `o->` (codecycle; iterates over elements)
**`if cond { then } [else { else }]` (Conditional).**
- Signature: `if expression "{" program "}" [ "else" "{" program "}" ]`
@@ -1143,7 +1143,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- Examples:
- `scan "src/" -> select .extension == ".py"`
- `scan "src/" -> select .size > 1024`
- SSDL shape: `===>` (codepath)
- SSDL shape: `->` (codepath)
**`filter predicate` (Keep matching).**
- Signature: `filter predicate`
@@ -1152,7 +1152,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- Examples:
- `scan "src/" -> filter .size > 0`
- `scan "src/" -> filter exists`
- SSDL shape: `===>`
- SSDL shape: `->`
**`map block` (Apply to each).**
- Signature: `map block`
@@ -1161,7 +1161,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- Examples:
- `scan "src/" -> map ext` (yields list of extensions)
- `scan "src/" -> map { x := .name; "src/" + x }` (full paths)
- SSDL shape: `o==>` (codecycle; iterates over records)
- SSDL shape: `o->` (codecycle; iterates over records)
**`fold init block` (Reduce to single).**
- Signature: `fold init_value block`
@@ -1170,7 +1170,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- Examples:
- `scan "src/" -> fold 0 { acc + .size }` (total bytes)
- `scan "src/" -> fold "" { acc + .name + "\n" }` (concatenated names)
- SSDL shape: `o==>`
- SSDL shape: `o->`
**`sort key` (Order).**
- Signature: `sort key`
@@ -1188,7 +1188,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- Examples:
- `scan "src/" -> group .extension` (group by file extension)
- `scan "src/" -> group .directory` (group by parent directory)
- SSDL shape: `o==>` (codecycle)
- SSDL shape: `o->` (codecycle)
**`dedupe` (Remove duplicates).**
- Signature: `dedupe`
@@ -1206,7 +1206,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- Examples:
- `arena { [ scan ]; [ filter ]; [ print ] }` (3 basic blocks in a tape region)
- `arena { x := 42; y := x * 2; use y }` (local tape)
- SSDL shape: `o==>` (codecycle; the region is a single execution unit)
- SSDL shape: `o->` (codecycle; the region is a single execution unit)
**`scatter workers` (Fork).**
- Signature: `scatter workers_expr`
@@ -1215,7 +1215,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- Examples:
- `scan "src/" -> scatter 4 -> filter` (4-way parallel)
- `scan "src/" -> scatter auto -> map` (auto-detect core count)
- SSDL shape: `===>W===>` (wide codepath)
- SSDL shape: `=>` (wide codepath)
**`gather` (Collect).**
- Signature: `gather`
@@ -1232,7 +1232,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- Examples:
- `pipe [ scan, filter, print ]` (declarative list form; not the canonical syntax, future extension)
- `pipe` (single token; equivalent to starting a `->` chain)
- SSDL shape: `===>W===>`
- SSDL shape: `=>`
#### A.4.3 Tier 3 — Shell (10 verbs, full reference)
@@ -1305,7 +1305,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- Examples:
- `wait 1000` (wait 1 second)
- `wait 50` (wait 50ms; useful for pacing a render loop)
- SSDL shape: `o==>` (codecycle)
- SSDL shape: `o->` (codecycle)
**`poll handle ms` (Poll).**
- Signature: `poll handle_expr ms_expr`
@@ -1313,7 +1313,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- Maps to: (no direct equivalent; `shell read -t`)
- Examples:
- `poll file_handle 5000` (poll with 5s timeout)
- SSDL shape: `o==>`
- SSDL shape: `o->`
**`cwd` (Current working dir).**
- Signature: `cwd`
@@ -1332,7 +1332,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- Examples:
- `fuzzy { scan "src/" -> filter .ext }` (accepts `skan` as a typo for `scan`)
- `fuzzy { skan "src" }` (accepts the typo)
- SSDL shape: `===>`
- SSDL shape: `->`
**`try { body } recover err { fallback }` (Try / Recover).**
- Signature: `try "{" program "}" "recover" identifier "{" program "}"`
@@ -1341,7 +1341,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- Examples:
- `try { read "src/foo.py" } recover { read "src/Foo.py" }` (try capitalized variant)
- `try { read "src/foo.py" -> filter !exists -> print } recover err { audit "scan failed: " + err; return NIL }`
- SSDL shape: `===>B===>` (codepath with branch)
- SSDL shape: `->B->` (codepath with branch)
**`sandbox { body }` (Sandbox).**
- Signature: `sandbox "{" program "}"`
@@ -1350,7 +1350,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- Examples:
- `sandbox { write "tmp/x" "data" }` (write goes through HITL approval)
- `sandbox { exec "rm -rf /" }` (destructive exec requires approval)
- SSDL shape: `o==>` (codecycle; the region is an audit unit)
- SSDL shape: `o->` (codecycle; the region is an audit unit)
**`audit msg` (Audit log).**
- Signature: `audit message_expr`
@@ -1393,7 +1393,7 @@ This subsection provides the complete reference for all 42 verbs in the 4 tiers.
- Examples:
- `assumewide "refactor"` (selects the broadest refactor tool)
- `assumewide "find"` (selects a broad search rather than a narrow query)
- SSDL shape: `===>W===>`
- SSDL shape: `=>`
---
@@ -1642,9 +1642,9 @@ That's 4 verbs total, plus the grammar. The placeholder track can demonstrate a
**clusters** — the 8 prior-art groups in §2: 0 (Immediate-Mode Paradigm), 1 (Concatenative), 2 (Array), 3 (Intent-Mapping), 4 (Meta-Tooling DSLs), 5 (SSDL), 6 (Command Palette), 7 (Result convention).
**codepath** (SSDL) — a sequential list of instructions that terminates; no loops. SSDL symbol: `===>`.
**codepath** (SSDL) — a sequential list of instructions that terminates; no loops. SSDL symbol: `->`.
**codecycle** (SSDL) — a circular structure; a codepath that repeats at its first instruction after its last. SSDL symbol: `o==>`.
**codecycle** (SSDL) — a circular structure; a codepath that repeats at its first instruction after its last. SSDL symbol: `o->`.
**DSL** — Domain-Specific Language. In this report, "DSL" refers specifically to the intent-based scripting language proposed in §3 and §4.
@@ -1678,7 +1678,7 @@ That's 4 verbs total, plus the grammar. The placeholder track can demonstrate a
**sandbox** — a Tier 4 verb that declares an IEventTarget boundary. All writes inside `sandbox { ... }` go through the formal event channel (HITL approval).
**SSDL** — Spec/Sketch Description Language, per `docs/reports/computational_shapes_ssdl_digest_20260608.md`. The DSL's verbs are annotated with SSDL shape tags (`[I]`, `===>`, `o==>`, `===>W===>`).
**SSDL** — Spec/Sketch Description Language, per `docs/reports/computational_shapes_ssdl_digest_20260608.md`. The DSL's verbs are annotated with SSDL shape tags (`[I]`, `->`, `o->`, `=>`).
**tag protocol** — nagent's XML-ish self-closing tags for tool invocation. The DSL inherits the *idea* (named operation with typed attributes) but rejects the XML angle-bracket notation.
@@ -1732,7 +1732,7 @@ The bibliography is split into 4 categories: external prior art, project's own r
- **Anthropic tool-use** — `https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/define-tools`. *Key claim:* `input_examples` as a first-class schema field; `strict: true` as a guarantee.
**Cluster 5 — SSDL:**
- **`docs/reports/computational_shapes_ssdl_digest_20260608.md` §1** — (6 primitives + 7 modifiers). *Key claim:* the meta-vocabulary for annotating verb shapes (`[I]`, `===>`, `o==>`, `===>W===>`).
- **`docs/reports/computational_shapes_ssdl_digest_20260608.md` §1** — (6 primitives + 7 modifiers). *Key claim:* the meta-vocabulary for annotating verb shapes (`[I]`, `->`, `o->`, `=>`).
**Cluster 6 — Command Palette:**
- **`docs/guide_command_palette.md`** + **`src/commands.py`** (33 commands). *Key claim:* the user's existing vocabulary instinct; the DSL is a richer superset.
File diff suppressed because it is too large Load Diff