From 54b0773dbaf440c067570812c3b75237814f5d3c Mon Sep 17 00:00:00 2001 From: MelekTaus Date: Sun, 18 Oct 2026 18:28:24 +0200 Subject: [PATCH] Describe silent music, growing groups and covered comments (#429) - MCP: get_asset lists under silent what is not heard, the Notes range C4 to B4 of a new instrument, coveredNotes in lint_graph. - Behaviors: groups take in new nodes, Arrange takes groups and comments along, comments move below their nodes when covered. --- Behaviors.md | 10 +++++++--- MCP.md | 34 +++++++++++++++++++++++++++------- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/Behaviors.md b/Behaviors.md index ded9c33..4b05d7a 100644 --- a/Behaviors.md +++ b/Behaviors.md @@ -635,9 +635,13 @@ the inspector). those and leaves the rest; they keep their place if they fit there and no link to the rest runs backwards from there. Else they go next to the node they link to — left of one they hand a value to, right of one they take from — where there is room and their links cross the fewest others, - and of those places the one nearest to the two ports lying level; only when there is none, right - of everything. A group around them stays where it is. One undo step, *Arrange nodes*. - It measures every node as drawn; the rule is the pure `editor/graph/arrange.ts`. + and of those places the one nearest to the two ports lying level. Nodes put between two that stay, + with no room there, push what they feed and everything right of it further right; only when that + fails too, right of everything. Groups and comments go along in the same undo step, *Arrange + nodes*: a group whose nodes all moved alike moves as it is, else it is fitted round its nodes + again; a comment goes with the group or the nodes just below it (or just above it). + It measures every node as drawn; the rules are the pure `editor/graph/arrange.ts` and + `editor/graph/annotationFollow.ts`. - **One tab per behavior**: each behavior opens as a document of its own (double-click in the asset panel), several at once, each keeping its zoom and scroll for the session. A selection never changes what a tab shows; selecting a node of another graph brings that graph's tab up. diff --git a/MCP.md b/MCP.md index eb1d5b2..b91ec99 100644 --- a/MCP.md +++ b/MCP.md @@ -60,7 +60,7 @@ the badge says *Agent offline* meanwhile. | `list_assets` | The project's settings (start scene, layers, play settings, master bus) and the assets with ids, names and types, by type or a part of the name | | `get_asset` | One asset as stored, with the rows of its properties and the named objects of a scene or container, the content of a placed container too (marked `fromContainer`, ids like `~`). A graph is only counted, and so are the cells of a map past 400. Pixel art lists its palette as `colors` and, up to 16 384 pixels over all layers and frames, every layer of every frame as rows of characters (`.` is transparent, `1`-`9`, `a`-`z`, `A`-`Z` the indices 1 to 61); a bigger one says how many pixels are painted. Colors of palettes and vector art read as `#rrggbb`. An animation lists what its rows may aim at (`targets`, the root as `""`), with the properties each offers | | `get_graph` | A graph: every node with its settings and its ports as they are now (the ports it declares itself under `ports`), the edges, the groups and comments with their boxes and colors | -| `lint_graph` | How a graph reads, counted as you see it: nodes on top of each other, links that cross, links running over a node that is not theirs, links running right to left, the longest links, with a few ids of each | +| `lint_graph` | How a graph reads, counted as you see it: nodes on top of each other, links that cross, links running over a node that is not theirs, links running right to left, comments a node lies on, the longest links, with a few ids of each | | `catalog` | What there is to make: the commands by area with what each does, and with a query (an area or command names) their arguments; the nodes a graph can hold (all of them, or the best matches of a search in full); the asset types and their properties; the variable kinds | | `run_commands` | Changes the project, see below | | `open` | Brings up an asset's tab, or the scene or game tab | @@ -94,15 +94,26 @@ it. One Ctrl+Z takes the whole call back. run, the way the [Arrange](Behaviors) button does it, and the move is part of the same undo step. Nodes that were there before stay where they are, so what you laid out by hand is never shuffled; the new ones go next to the node they link to, where their links cross the fewest - others. `arrange_graph` arranges nodes the agent - names, or the whole graph, which the agent is told to do only when you ask. + others. When that node is in a group, the new ones go into it and the group grows round them — + unless it would then take in a node not its own. New nodes put between two that stay, say a + filter between an instrument's Delay and its Output, make room: what they feed and everything + right of it moves right as one, so no link runs backwards. `arrange_graph` arranges nodes the + agent names, or the whole graph, which the agent is told to do only when you ask. - **Readable graphs.** The agent is told to fetch a value needed far away with a second Get or Owner node next to where it is used rather than one long link, and to check with `lint_graph` — the crossings too, with `arrange_graph` when there are more than the links need. Nodes that belong together go into a group (`add_group`), with a comment on what they do (`add_comment`). Both take the nodes they are about rather than a box: a group is drawn around - them, a comment just above, and when the call arranges its nodes they follow them there, still - in the same undo step. The group is the one *Group* in the graph's menu draws around a selection. + them, a comment just above — below them where another node or a group's title bar stands above — + and when the call arranges its nodes they follow them there, still in the same undo step. The + group is the one *Group* in the graph's menu draws around a selection. `lint_graph` also counts + comments a node lies on (`coveredNotes`), which `fit_group` puts back by their nodes. +- **Silent music.** A pattern plays nothing without an instrument, and an instrument sounds only + the notes its Notes nodes take in (C4 to B4 in a new one). Nothing else says so. `get_asset` lists + under `silent` what of a pattern, a song or a composition is not heard: all of it for want of an + instrument, or the notes outside what the instrument sounds, in a song after the transpose of the + item. Each line names the notes, what the instrument sounds instead and how to mend it. + `add_notes` mentions both. The keys the pattern tab greys out are worked out the same way. - **Variables in a graph.** A Variables node reads (and with `set_port_write` writes) a variable once `add_port` names it; the port takes the kind of the variable. Properties and Sound FX parameters nodes work the same way, a start or end node or a struct gets ports of a kind given. @@ -242,7 +253,8 @@ What is behind it on the server, and the routes it uses: [API](API), [Developmen - `tests/editor/agent-view.test.ts`: what `get_view` answers, its one line, the tools' arguments. - `tests/editor/agent-edit.test.ts`: a walking object built in one call and taken back whole by one undo, a failing step that leaves nothing, argument checks, deletes that ask, nodes arranged at the - end of a call while placed ones stay, `arrange_graph`, what the editor shows after a call (and + end of a call while placed ones stay, a new node linked into a group put into it within the same + undo step, `arrange_graph`, what the editor shows after a call (and the scene switch inside the undo step, and nothing with *Follow agent* off), the reading tools and the catalog (every area in full under the size an answer is cut at). - `tests/editor/agent-catalog.test.ts`: a Variables node reading a variable once `add_port` names @@ -269,7 +281,15 @@ What is behind it on the server, and the routes it uses: [API](API), [Developmen level); a clip of a sound added, changed and removed; an object, a picture and a pattern laid on a composition, an animation and the composition itself refused as items, an item moved with its clip, a clip over another refused, fades only on what sounds, an item removed with its object, and - the tracks of a composition. + the tracks of a composition; what of a pattern, a song and a composition is silent without an + instrument, until the item or the pattern has one; the notes outside the range of the + instrument named, in a song after the transpose, until the range of its Notes node takes them in. +- `tests/editor/graph-follow.test.ts`: a new node feeding one in a group joining it while the group + grows round it (and not, where it would take in a stranger), a new node taking from one in a group + put beside it rather than where it waited, a group fitted again after Arrange with its comment + going along, one moved as it is, room made between an instrument's Notes and Output (and none + where there is room), comments put below their nodes where above is taken, and covered comments + counted. - `tests/editor/graph-arrange.test.ts`: the layout on the graph an agent really built for "walk with the arrow keys" (no overlaps, no link over a node, none backwards, at most 8 crossings with one Owner for four moves and 4 with one each), chains running straight, the flow on top when two