1. Introduction

Plaid UMR is a web-based editor for Uniform Meaning Representation annotation. This guide is written for annotators. It covers the everyday loop (import a .umr file or open a document another Plaid app glossed, annotate its sentence graphs and its document graph on the canvas, export it as .umr) and then the rest of the editor.

Plaid UMR is one of the apps built on the Plaid platform, beside Plaid IGT and Plaid UD. It shares a project’s text, sentences and words with them: a document glossed in Plaid IGT can be annotated for UMR in this app, with its glosses shown under the words. You do not need to know anything about Plaid itself to use the editor. For the platform, or for scripting against your data, see the Plaid manual and the Python / JavaScript client references.

Note

Text and tokenization are not edited in Plaid UMR. A project’s text, sentences and words are made and changed in Plaid IGT or Plaid UD, or come from a .umr import. This app annotates over them.

2. Getting Started

Plaid UMR is served by your Plaid server. Open it in your browser at the /umr/ path on that server. Running Plaid locally with the default settings, that is:

http://localhost:8080/umr/

Sign in with the email address and password your project administrator gave you. Your name at the top right opens your account, with your Profile (where the keyboard shortcuts are rebound) and Sign out.

The editor has three levels:

  • Projects: the list of projects you can open.

  • Documents: a project’s documents, with the project’s tabs (Guidelines, Assistant, Validation, Activity, Settings, Import and export). Validation, Activity and Settings are shown only to maintainers. Anyone else who opens Validation, Activity, General or UMR settings by its address is sent back to the project list with Only a project’s maintainers can open this page.

  • A document: its Annotate, Details, Comments and Export tabs.

3. Projects

3.1. Creating a project

New UMR project on the Projects page makes a project with a text layer, a sentence layer, a word layer, and the four layers UMR annotation lives in. Documents come in through Import and export.

3.2. A project from Plaid IGT or Plaid UD

A project made in another Plaid app opens here once a maintainer has set it up for UMR: opening its documents sends a maintainer to the setup page, where Set up for UMR adds the UMR layers beside the existing ones. Nothing already in the project changes. Everyone else sees a notice asking for a maintainer.

A project with no text at all is set up in Plaid IGT or Plaid UD first.

3.3. Language

Settings → General holds the project’s language as a BCP-47 tag (en, zh, arp). It selects the frame file the concept picker offers senses from (English, Chinese, Arabic and Portuguese are bundled). An exported gloss header carries the language of its own gloss line, not the project’s. The page names the file the saved language gets and how many rolesets are in it. A language with no bundled file is the ordinary case for a language being documented, and its rolesets come from the project’s vocabulary instead (see Vocabulary).

3.4. Vocabulary

A vocabulary linked to the project in Plaid IGT is a lexicon here. A word that IGT has linked to an entry offers that entry’s headword as its concept, with the entry’s gloss beside it, and typing in the concept picker finds any entry by its form. An entry can also stand for a roleset, which is how a language with no bundled frame file gets one. Write it in Plaid IGT, in the entry editor: the UMR band takes the roleset the entry offers as its concept (lunch-01) and a description per argument (ARG0, the one eating), and the band appears once a UMR project is linked to that vocabulary. A name that is not an ARG, or that another row already has, is marked under its row there, and the entry cannot be saved until it is mended. The concept picker then offers the roleset in place of the headword, and the argument descriptions show beside the roles when you attach one.

A node whose concept was picked from an entry remembers the entry. When the entry’s roleset or headword is changed in Plaid IGT, the node gets a warning (s2v was picked from ver, now ver-02.), counted in its sentence’s header and listed on the Validation tab. Take entry value on the node’s menu, or e, takes the entry’s new concept for that node. Take entry value for all 5 nodes, or Shift+E, takes it for every node of the document picked from that entry, and the row names how many there are. A concept typed over, on the canvas or in Text mode, no longer follows its entry. A node forgets its entry when the entry is deleted from its vocabulary. Unlinking the vocabulary from the project does not count: link it again and the nodes still follow their entries.

4. Importing and Exporting

4.1. Importing a .umr file

Import and export takes .umr files (the UMR 2.0 release format, one file per document) by drop or picker, and Import reads them. Tab reaches the drop zone, and Enter or Space opens the file picker. Each file becomes a document named after the file, with its sentences, words, graphs, alignments, gloss lines and document-level annotation.

When the project already has a document of the file’s name whose words match the file’s, sentence by sentence, and which has no graph yet, the file’s graphs land on that document’s words instead. This is how a document glossed in Plaid IGT gets its UMR annotation from a file. A document of the file’s name that already has a graph, or a graph kept as text, refuses the file: "Okul" already has a graph. When that document’s words differ from the file’s, or it has none, the file becomes a new document of that name, and the report says why: Imported as a new document: …​. A file whose name two documents of the project already share is refused.

A Sentence: line is read as the sentence’s text. Onto a document from Plaid IGT, the document’s own text stays the sentence’s text.

The report lists each note under its file, with its sentence number. A note that recurs across sentences is one line with the count (5 sentences: No sentence id line. …​).

A sentence whose graph the parser cannot read is kept as text and written back unchanged on export, and the sentence’s header says so. Text opens on the kept text, to mend it and apply it. Once the sentence has a node, made there or on the canvas, the graph you see is the one exported and the kept text is not written. Mending such a graph in Text mode keeps the alignment the file gave each node. The document-level relations that name a node of such a sentence are kept with the sentence whose block wrote them and written back there on export, and the report counts them (Sentence 38: 3 document-level relations are held until sentence 37 is mended.). Mending the graph in Text mode makes them relations again, in the same change. A node named like a document-level block (s8s0) is imported with a note to rename it. Older files are read as they are: an obsolete gloss header is written back in its current form, and -1—​1 is read as unaligned.

4.2. Exporting

A document’s Export tab shows it as .umr, to copy or download. Import and export exports every document of the project as a zip.

The file is written in the 2026 UMR file format: a sentence’s graph in PENMAN with children in the order they were made, an alignment line for every node (0-0 for an unaligned one), and the document-level block with the temporal, modal and coreference triples of that sentence. Each sentence starts with a bare # :: snt1 line. The sentence’s text is written on a Sentence: line after the gloss lines of the words and morphemes, only when it is not the words joined by spaces (Sentence: Ali, eve gitti. under Words: Ali eve gitti). A sentence whose text has more items than its words, such as punctuation standing apart (Tu viens ?) or a word holding a space, has no Sentence: line. The whole file is written in Unicode NFC. The export numbers the sentences 1, 2, 3 in order, except in a document imported from a file whose numbers start elsewhere. There each sentence keeps its file’s number, and a sentence added in Plaid IGT takes its position, or the next number past the highest when that one is taken. No number is written twice. A triple between nodes of two sentences is written in the block of the later one. A re-entrant node is written in full where it is first reached from the root and as a bare variable elsewhere. The file holds one graph a sentence, the root’s. A part of the sentence the root does not reach (a node made with no parent, or what a deleted edge cut off) is shown on the canvas and marked as an error, and the export leaves it out, with its alignment and its document-level relations. The Words line is split on spaces, so a word holding one (two words merged in IGT) is written with _ in its place. A document the file cannot hold, such as one with two nodes of a sentence under one variable, is not exported, and the page lists each problem.

5. The Canvas

The Annotate tab draws every sentence of the document as a block: the graph above, the words below. A long document is paged. The page is in the address, a document opens on the page you left it at, and Back and Forward step through the pages you turned.

5.1. Nodes

A node shows its variable, its concept, and its attributes as a line of text (aspect performance · polarity -). A node anchored to words sits above them. The anchored words are underlined, and hovering or focusing a node lights them. A node with no anchor (person, name, a -91 roleset) is drawn hollow and sits above its parent. A node a service drafted has a dashed violet border, and one made by a member whose work the project reviews a dashed amber one. The mark goes when you edit the node, which records it as yours, or when you accept it. A relation’s label and a document-level tag carry the same dashed violet or amber border while the relation is unreviewed. The edge’s line does not change. Hovering a marked node or label shows where it came from (Machine-made, unverified), and an accepted one still says so (Machine-made, confirmed). To accept a node as it stands, choose Accept on its menu or press Ctrl+Enter (Cmd+Enter). That accepts the node and its relation to its parent. Accept graph beside a sentence accepts every node and relation of it. A sentence with anything a person made or accepted is kept whole when a draft overwrites. Discard graph beside it deletes the drafted nodes and relations of the sentence that nobody has accepted, after asking. It keeps what a person made, what a member whose work the project reviews made, and what was accepted, and a drafted node that one of those relations hangs from or points to. A drafted relation between two nodes that stay is deleted, unless it leads to a node a person made or corrected. That one stays, still drafted, and so does the node it hangs from. A relation another sentence has onto a deleted node is deleted too. The question says how many of those other sentences lose. History lists it as one change. The root’s concept is underlined.

5.2. Edges

Tree edges run down from a parent to its children, the relation floating above the child, straight down when the child is under its parent. Every edge carries a head at the end it points to, which is the only thing that says which way a re-entrant or a document-level relation runs. A node with a second way in (a re-entrancy) shows the second edge as a dashed curve, the only dashed line on the canvas, with its relation beside it where it covers no node and no other label. Between rows it leaves and arrives at the same side of the two nodes, and between two nodes of one row it dips under the row. The children of one parent that lie beyond its box share one line across the gap between rows, with a drop to each.

5.3. Words and glosses

The words carry their number. Under them, the project’s gloss lines: the morphemes and their glosses grouped under the word they belong to, a part of speech per word, and a translation as a row. Each line is named to its left. A node aligns to whole words. A word’s morphemes are shown as plain text under it and stand for their word. A word nobody has segmented in Plaid IGT shows as itself on the Morphemes line, as IGT shows it, and its morpheme gloss is _. The lines of an imported file go under the words wherever the file lets that be told: a line with one item per word, a line whose hyphens and equals signs join its items into as many words as the sentence has (’a- ní- dz- oo- d- záa =go is one word), or a gloss line that pairs item for item with such a Morphemes line. Any other line, and a translation, runs as a row of its own. Which layers feed which lines is set in Settings → UMR settings (see Gloss lines).

5.4. The margin

The margin to the left of each graph pins the document graph’s constants: author, root, document-creation-time, and any other constant a triple of that sentence names. Only the ones the sentence uses are shown. The rest appear while a node is focused or while you are dragging, which is when you would aim at one. A document-level relation reads on each node it joins as a tag, in this sentence or another: modal relations in dark blue-grey, temporal ones in teal, coreference in brown. The tag reads the triple in its own order, with a dot where the node itself stands: (s3d :before s3b) is ● :before s3b on s3d and s3d :before ● on s3b. A temporal relation says how the second node stands to the first, its reference time, so here s3b is before s3d. The relations of one kind and one direction share a tag (● :overlap s1d s1m), each variable in it its own click. author :full-affirmative, which nearly every event carries, is grey, so that any other modality stands out. A node wears at most five tags and a tag names at most four other nodes. Past that a count (+22) takes their place, which lists them all when clicked. A click on a tag changes its relation. Focusing or hovering a node draws its own relations, each in its tag’s color: a line to the constant, a line to the other node, and for a node of another sentence a line across the sentences between, with the node at the far end outlined. Nothing is drawn for the others, so a long sentence stays readable.

5.5. Coreference

Nodes in one coreference chain wear a numbered chip in the chain’s color. Clicking the chip goes to the next mention of the chain, in this sentence or another.

5.6. Validation marks

The official UMR checks run as you edit. A sentence’s header counts its errors and warnings, except unaligned words, which the Validation tab lists. Clicking the count lists them. A node a check names wears a dot and a ring in red for an error or magenta for a warning, with the message on hover. Besides the official checks, an edge whose two nodes are in different sentences is an error on the node it leaves, and the export leaves it out. The project’s Validation tab lists every problem in every document.

5.7. When the text changes under an annotation

The text, the sentences and the words belong to the whole project, and someone can edit them in Plaid IGT or Plaid UD after the UMR annotation is made. Opening the document here puts right what such an edit left behind, in one entry in the history, named for what it did.

A node anchored to words follows its words. Letters typed at an anchored word’s edge or inside it, a space included, stay in the nodes anchored to it. A node anchored to no word belongs to the sentence it was made in and stands over the whole of it, so an edit anywhere in the text leaves it where it belongs. Two sentences joined into one bring their nodes together in it, where they are two graphs until the annotator joins them, which the sentence’s header counts and the Validation tab lists. A sentence split in Plaid IGT or UD deletes the edges that would join nodes of the two new sentences, in the same step. Opening a document as a maintainer deletes, once for the project, such edges an earlier split left behind. A sentence’s text deleted takes that sentence’s nodes with it, and its history keeps them.

A node whose words are deleted (deleting a word in Plaid IGT keeps its text) becomes a node anchored to no word, drawn hollow, and the history entry names it (1 node lost its word (s3y2)). Tokenizing the text again does not anchor it again. A sentence with no words at all (after Clear tokens in Plaid IGT) is left as it is until it is tokenized again, and its nodes keep their anchors. Its graph is still drawn, with every node unaligned, and can be edited as usual except for Change anchor, which needs a word.

When sentences are added or removed before a sentence, its variables take its new number and keep the rest of the name (s2v in what is now sentence 1 is s1v). Variables are not renumbered in a document whose first # :: snt number, as imported, is not 1, such as an excerpt that starts at snt5. Its variables stay as the file named them. A graph kept as text is mended under the names it has, even when sentences were added or removed before it since the import. The next time the document is opened, its variables take the sentence’s number.

When a sentence is typed in before an existing one in Plaid IGT, the existing sentence keeps its imported lines: its number, its gloss and metadata lines, and its document-level relations. The history entry of the next opening names the repair: moved the stored lines of 1 sentence to the sentence they describe.

An addition cut off partway (a closed tab, a lost connection) leaves nothing behind once the document is opened again. A node picked from a vocabulary entry that has since been deleted no longer names it. No repair is made while a service run or an approved assistant plan is writing to the document. It is made the next time the document is opened. A repair cut off partway is named Repair on open (interrupted) in the history, and the next opening finishes it. When someone saves while a repair is being made, it starts again by itself. If it fails again, or the server does not answer, a message asks you to reload the page.

6. Editing

Every edit is written as it happens and lands in the document’s history. There is no save button. An edit that gets no answer, because the connection is down or the server does not reply, is sent again until the server answers, and the edits made after it wait their turn. Meanwhile the page reads Offline, retrying, or Can’t reach the server, retrying while the browser is online, and closing the tab asks first. An edit that reached the server before its answer was lost is not saved twice. Focus a node by clicking it or with the arrows, then the keys below act on it. The default shortcuts are listed here. Arrows, Tab, Enter and Escape are fixed, and every other key can be rebound under your profile. ? Keys and marks over the sentences lists every key, with any you have rebound.

6.1. With the mouse

Every one of the actions below can be reached without the keyboard.

A click on a node focuses it, and a double-click on one of its parts edits that part: the concept, the variable, or an attribute chip. A second single click only keeps the node focused. A document-level tag, the +N count, a relation’s label and the chain chip act on a single click. Click a relation’s label to change the relation, or drag it onto another node to move the subtree there.

Everything else is on the node’s own menu, which opens on a right-click anywhere on the node or with the ⋯ button at its top right, and from the keyboard with the Menu key or Shift+F10. The menu lists every action with the key that does the same thing, and greys out the ones that do not apply (a root has no relation to a parent). Add a child on the menu waits for the next click: the child’s word, an existing node to make the child, or empty space for a child with no word. Cancel in the sentence header leaves it.

6.2. Moving around

  • Arrows move between nodes: up to the parent, down to the first child in reading order, left and right between the nodes of a row.

  • Alt+Left and Alt+Right move the focused node earlier or later among its siblings in the written order, the order the export and text mode use. The canvas keeps drawing children over their words. A node with two parents is written in full and drawn under the parent the written order reaches first. Moving it past a sibling whose subtree also holds it moves it into that subtree, on the canvas and in the file, and the graph stays the same. In a right-to-left document the arrows follow the screen, so Alt+Right moves earlier.

  • Shift+Tab leaves the block. Escape, then Tab, goes on to the next sentence’s root.

  • PageDown and PageUp go to the root of the next or previous sentence, turning the page when needed, in a read-only view too. They can be rebound, to a plain letter as well.

  • A sentence with no graph is a stop of its own for Tab.

6.3. Making nodes and edges

  • Tab starts a child of the focused node. Type a word’s number to anchor the child to that word, then pick its concept from the word’s senses (Enter keeps the word as typed), or type a concept for an abstract node. Then the relation.

  • Drag the grip on a node’s lower edge onto another node for an edge (a second edge into a node is a re-entrancy), onto a word for a new node anchored there, or onto empty space for an abstract node. The relation is asked at the drop.

  • n makes a node with no parent, from a focused node, the sentence, or an empty sentence’s graph. A double-click on a word or on empty space does the same. Either way the concept picker opens, prefilled with the word when there is one.

  • Drag the grip under a node onto another node, a word, empty space or a margin constant to make a relation from it.

  • r adds a second parent to the focused node: pick the parent from the list of the sentence’s nodes, or click it, then give the relation.

A relation that takes a value does not take a node: :aspect and the other attributes with a set of values, :li, :list-item, :wiki, a name’s :op1, :op2 and so on, and :ARG2 of have-polarity-91. A new edge there, made, moved or relabeled, is refused with ':aspect' takes a value, not a node. So is a concept change that would put a node there, such as and with a node under :op1 changed to name. The assistant and Draft refuse it too. An edge an imported file brought there is kept, and the Validation tab lists it.

While u or Add a child waits for its click, the arrows still move and Escape leaves it. Other keys do nothing until it ends, except the digits, Backspace and Enter of u. The list of m and r closes on Escape, and ends the wait with it.

6.4. Changing a node

  • Enter edits the concept. The picker lists the frame file’s senses of the anchored word first, with their arguments, then the vocabulary entries the word is linked to, then the word itself, then the abstract concepts, rolesets and discourse concepts. Typing searches the bundled frame file too, on any node, so buy finds buy-01 for bought. In Arabic a word also finds its roleset with one proclitic (و ف ب ل ك ال) and a suffix taken off, so وقالت offers قال-01, and the word’s own roleset comes first. A hamza on the alif and a tatweel make no difference: اعلن finds أعلن-01, and قـال finds قال-01. A verb that drops its last letter before a suffix finds its roleset too, after the word’s other senses: نمت lists نما-01, and رموا lists رمى-01. A roleset whose lemma is written as the word writes it comes first: الأم lists أم-01 before ألام-01, and أعلن lists أعلن-01 before اعلن-01. A second verb of a root that the Arabic file keys with a doubled hyphen (أثر—​01) is listed after the lemma’s other senses.

  • : (colon) edits the relation to the parent. The picker lists the parent roleset’s own arguments first, with what each means.

  • a opens the attribute picker. Aspect, person and number are lattices: pick the coarsest value you are sure of, and the finer values under it appear. The other attributes are lists, and anything without a set (:quant, :wiki) is a text line at the bottom. A time is written bare, :time 15:30. A list item is :li with the item’s place as a number (:li 1, and :li -1 for the last) or its label in quotes (:li "(a)"). :list-item is the same relation and takes the same values. :modal-strength is last and marked deprecated, since modality belongs in the document graph. Every pick is saved at once. Arrows move, Enter picks, Backspace clears the row, Escape closes. A value the official validator cannot read (Imperative, .5, "") is refused with the reason. One an imported file carried is kept, exported as it came, and listed on the Validation tab.

  • v renames the variable. A variable is s, the sentence number, letters, and a number, unique in the document. A variable cannot be s8s0 and the like, which the file uses for sentence 8’s document-level block. A name that is taken or malformed is refused with the reason under the box, which stays open to correct it. A new node’s variable is made from its concept’s first letter, from a to z: an accented letter gives its base letter (ébrio gives s4e), and anything else gives x. A variable typed by hand may hold an accented letter, but the official validator then refuses a document-level relation that names it.

  • u changes the anchor: click words, or type a word’s number and press Enter, to add or remove them, then Done in the sentence’s header, or Escape.

  • m moves the node under another parent: pick the new parent from the list, or click it. The list leaves out the node’s parent and the nodes under it. Dragging an edge’s label onto a node does the same.

  • e takes the new concept of the vocabulary entry the node was picked from, and Shift+E takes it for every node picked from that entry (see Vocabulary).

  • Ctrl+Shift+R (Cmd+Shift+R) makes the focused node the sentence’s root.

6.5. Deleting

  • Shift+Backspace deletes the edge into the focused node, and with it whatever only that edge reached. More than one node going asks first. A leaf goes without a question, since history keeps it.

  • Ctrl+Shift+Backspace (Cmd+Shift+Backspace) deletes the node and everything under it.

  • In a relation editor, Shift+Backspace before anything is typed deletes that edge or triple.

6.6. The pickers

Enter commits what was typed. An option is taken instead only when the arrows moved to it, it was clicked, or its value is exactly what was typed. The option under the pointer is shaded lighter than the one the arrows moved to, and is not a choice. The list also shows options whose description holds the typed text, so an argument can be found by what it means, but Enter never takes one of those on its own: typing place gives :place, not the :ARG1 described as "place or thing escaped". In the relation pickers, the start of a relation is enough (ARG gives :ARG0, the colon optional). A concept is any word, so it is never finished for you: rat stays rat. Escape cancels.

6.7. Text mode

Text in a sentence’s header shows the sentence’s graph as PENMAN in place of the canvas. Every node of the sentence is in the text: the root’s graph first, then each part the root does not reach as a graph of its own below it. The text is parsed as you type, and the first problem shows under it. Ctrl+Enter (Cmd+Enter) applies, as Apply does. Apply compares the text with the stored graph, node by variable and edge by relation and target, and writes the difference as one operation: a node that is new in the text is made unaligned (anchor it on the canvas afterwards), a node missing from the text is deleted with what only it reached, a changed root moves the root. An empty text deletes every node of the sentence. Apply writes the whole text at once: if it fails, nothing of it is applied. An apply too large to write in one step that fails partway says what was saved and what was not. The line under the text names every concept Apply changes, by variable (s9x changes from sleep-01 to cat, s9y from cat to sleep-01.). Nodes are matched by variable, so exchanging two variables exchanges their concepts, and each node keeps its words and document-level relations. Apply refuses what the canvas refuses: a new node’s variable that is malformed or used elsewhere in the document, a relation UMR does not have, a new edge that closes a cycle through anything but :quote, a new node under a relation that takes a value (s1a: ':li' takes a value, not a node.), and a value the official validator cannot read, with the reason. A value a node already has from an import is kept as it is. A variable typed over is read as a rename when one variable goes and one arrives and they are plainly the same node: the same concept, under the same parents by the same relations, or both the sentence’s root. The node keeps its anchor, its edges and its document-level relations, and the line under the text says which name changed. Anything less clear-cut, two variables typed over at once or a concept changed along with the name, is a node deleted and a node made, and the line names what Apply would delete that way. Cancel, or Text again, with unapplied changes asks first.

7. The Document Graph

Temporal, modal and coreference relations are UMR’s document-level annotation. In this editor they are made from the same canvas as the sentence graph.

  • Drag a node’s grip onto a constant in the margin: a modal relation for author, root or null-conceiver, a temporal one for document-creation-time and the reference constants. The relation is asked at the drop and appears as a tag on the node.

  • Hold Ctrl (Cmd) while dragging from an event onto another node for a temporal relation: the node dropped on is the event’s reference time.

  • Drag onto a node of another sentence for a coreference (without Ctrl) or a temporal relation (with Ctrl).

  • c on the focused node starts a coreference: pick the other node by its variable, then the relation (:same-entity, :same-event, :subset-of).

  • t starts a temporal relation: pick the event’s reference time (a constant or another node’s variable), then the relation. Each relation is listed with what it says, so :before on s9p with document-creation-time reads "s9p before document-creation-time" and is written (document-creation-time :before s9p).

  • o starts a modal relation: pick the conceiver (author, root, null-conceiver, or a node), then the relation.

A tag on a node opens its relation to change it, at either end, and the trash button or Shift+Backspace there deletes it. d lists the focused node’s document relations. Pick one to change it, or press Shift+Backspace in the relation editor to delete it. The node menu has the same row. The one kind of triple no node wears, one between two constants (root :modal author), is listed in the margin, under the constants, and opens the same way.

8. Gloss lines

Settings → UMR settings holds the gloss lines: which of the project’s layers feed the lines under the words and in an exported file, in what order. A line’s source is the morpheme layer (written as Morphemes), one of the substrate’s annotation layers (Plaid IGT’s fields, which say their scope: a morpheme-scoped field is written as Morpheme Gloss or Morpheme Category, a word-scoped one as Word Gloss or Part of Speech, a sentence-scoped one as Sentence Gloss), or the lines an import stored that nothing else covers. Propose lines fills the list from the layers' names and scopes. Index and Words are always written.

The lines are kept in scope order, word lines first, then morpheme lines, then sentence lines, which is the order an interlinear text is read in and what lets a word’s morpheme lines share their columns. The arrows order the lines of one scope against each other, so a line cannot be moved out of its group.

9. History

History at the end of a document’s tab row, on any tab, opens the document’s history: every operation, who made it and when. A service’s run is recorded under the service’s account, and its entry names the person who ran it: UMR draft of sentence 3, requested by second. Selecting an entry shows the document as it was then, read-only, on Annotate, Export and Details. Compare and Comments are not shown at a past state. Restore returns the document to that state as a new operation, so nothing is lost.

An entry that is one of these kinds is marked with it:

  • Import: a .umr file brought in.

  • Automatic: a Draft run, or another service’s.

  • Assistant: an approved assistant plan.

  • Review: a node, or a whole graph, accepted as it stands.

  • Repair: a repair made when the document was opened.

The Activity tab marks its entries the same way. An assistant plan that stopped partway is listed as Assistant, partly applied: followed by the changes it wrote.

10. Validation

The Validation tab lists what the official UMR checks find in every document of the project: unknown relations, values outside their set, an event without :aspect, alignment problems, references a sentence cannot make, values the official validator cannot read (a capital letter, an accented letter or a space in a bare value, a bare value that starts like a variable such as s1x-b, an empty string or a quote inside one), a variable, concept or value not in Unicode NFC, coreference between an event and an entity, coreferent nodes with different Wikidata ids, temporal relations that contradict each other once what follows from them is counted (s1x :before s2y with s2y :before s1x), a list item that is neither a number nor a quoted label (:li first), a node under a relation that takes a value, a node whose vocabulary entry now reads another concept, and the rest. The contradictions one temporal relation sets off in a sentence are one row, with their count (26 contradictions follow from the temporal relation (s4y :before s1x).). Show list under it lists them, and Hide list folds them again. A graph kept as text is one error, with what the parser found. Two nodes of one sentence under the same variable are an error, and the export refuses the document until one is renamed. The same checks mark the canvas as you edit.

Each row links to its sentence, at the node it names. The table’s page is in the address, so Back from a row’s sentence returns to that page.

The value sets the pickers offer and the checks accept are the official validator’s. The one exception is :li: the official validator refuses every value under it, the guidelines' own :li "(a)" included, and takes the same values under :list-item.

11. Comments, Activity, Sharing

A document’s Comments tab holds comments on the document and on its sentences. Activity shows who has been working on the project and on what.

Two people can have one document open, and neither page shows the other’s edits as they are made. An edit is refused when another person changed the document since the page loaded, unless everything they changed is annotation this edit does not touch, such as a gloss in Plaid IGT on another word. It says Changed elsewhere. Now showing the latest version. Redo your edit., and the page then shows their change. Settings → Access manages the project’s members and invitation links, and makes named tokens for scripts and services.

12. Services

A project’s Services settings name which service each task runs with by default. The Draft button on the Annotate tab runs a drafting service over the document or one sentence: a language model proposes a sentence graph from the words and their glosses, written as machine annotation for you to correct. Sentences that already have a graph are skipped. Overwrite existing graphs redrafts the ones a service wrote. A sentence with anything a person made or accepted is kept whole, and so is one that another sentence’s graph links into. The run’s report counts what it kept. A sentence the draft could not do is named in the report with its reason, and the report stays until it is closed. A reply the model writes as one block per node, linked by variables, is read as one graph. A block that no earlier block uses is refused as a second graph. A draft stops early when the model gives no answer for two sentences in a row. It keeps what it drafted, and its report names those two sentences and counts the sentences it did not reach. Stop ends a draft within about a second, even while the model has not answered. A draft writes each sentence’s graph whole. If it fails partway, the message says how many sentences were drafted. The operator sets how long one reply may take (--timeout, 120 seconds by default). A reply that does not come in time is asked for once more, then its sentence is reported as not drafted. A second drafting method, Skeleton from glosses, needs no model: it writes one anchored node per word that is linked to a vocabulary entry or carries a gloss, with the headword or the gloss’s lexical part as the concept and the grammatical abbreviations (3SG, NEG, HAB) as attributes, and marks the word carrying tense or aspect as the root. It draws no relations.

12.1. Compare

A document’s Compare tab scores its graphs against another document of the same text, two annotators' copies or a draft against its corrected version, with the AnCast metric (the comparison service, services/umr_ancast.py). Pick the other document and run Compare. The report is written on the document and the tab shows it: the document scores (sentence graphs, modal, temporal, coreference and the comprehensive score), and sentence by sentence both graphs side by side. The report names the person who ran the comparison. A group neither document annotates has no score and reads n/a. The sentence number and each marked variable open Annotate on that sentence or node. A sentence edited on either side since the comparison is marked Changed since this comparison. Run Compare again to rescore it.

AnCast pairs each node with a node of the other graph where it can. In the graphs, a node with no counterpart has a dashed blue outline, and a node paired with a node of another concept (leave-11 against leave-02, meal against lunch) a solid rose one. Under the graphs the pairs are listed, those of different concepts first with both concepts. A pair marked left over was made only because both nodes were left once the rest were paired, and says nothing about whether they are the same node.

A copy of a document for a second annotator is made on the document’s Details tab with Copy document, choosing Text only. The copy has the words and glosses and no UMR graphs, and History lists it as one entry. If the graphs cannot be taken off the copy, the copy is not made. Text and UMR graphs copies everything. Everyone in the project can open both copies.

13. The Assistant

The Assistant tab is a chat with a language model that knows your project. Ask it which events still lack :aspect, what the document graph says about a sentence, or to summarize the concepts used across the corpus. It reads the documents and their graphs, the search results, the project’s guidelines, the comments and the history to answer, and it shows what it read. Steps it could not make are shown in red and are not counted.

When you ask it to change something, it does not touch the data. It proposes a plan, which you Approve or Discard. The plan lists every change under the document it lands in. Each node is a link to its place on the canvas, so a change can be checked before it is approved. A long group of like changes is folded into one line that names what it does and each node with its concept (remove 20 nodes: (s3a2 / about), (s3d / date-entity), …). A document-level relation is listed under the later of its two sentences. A change to something a person made or accepted is marked Accepted, counted on a line of its own above the list, and never folded away. Asked to set an attribute on every node of a concept, the assistant leaves a node that already has that attribute as it is, unless you ask it to replace existing values. The card then says what it replaces: :aspect performance on 9 node(s) with concept "eat-01" in "Lunch", replacing process on 5. Approved changes are written under your own account, recorded as the assistant’s work accepted by you, and show as accepted. Tick Record as human-made before approving to record them as your own work instead, with no machine marking. Reading needs Reader access, and applying a plan needs Writer.

Approving a plan after a sentence it changes has been edited is refused, and the card then reads Out of date. An edit to another sentence does not stop it, and an edit to a sentence’s glosses in Plaid IGT counts as an edit to that sentence. A change to every node of a concept is refused after any edit to its document. Approving a plan on a document that another run (Draft, a parser) is writing to is refused with nothing written. Approve again once the run has finished.

A plan that stops partway reads Partly applied, with how many of its changes were written, and the changes not written are dimmed. Ask the assistant to finish it.

A reply is written into the conversation as it arrives, and it lands whether or not the page stays open: leave the tab, reload, or close the browser, and the answer is there when the conversation is next opened. Stop ends a turn early, even while the model is still working on its answer. A turn the model does not finish ends with the reason and Retry. Conversations are private to you, kept per project, and can be downloaded or copied as Markdown. Your server’s administrator can read them.

13.1. The panel

The Assistant button in the header opens the same assistant in a panel beside whatever you are looking at. A handle on the right edge of the window, halfway down, opens it too. The panel stays where it is as you move around, and the page narrows to make room for it. It can be dragged wider or narrower and hidden again, and its width and whether it is open are remembered. A narrow window has no room for it, and neither the button, the handle nor the panel is offered there.

One conversation runs per project. The panel picks up the last one you had in the project you are in and keeps it as you move from document to document. A question asked on a document is about that document: name no document and that is the one it reads, though it can still look at the rest of the project when the question calls for it. Ask, beside Text and Comment on a sentence, puts that sentence into the question, and you can take it out again before sending.

Typing @ in the message box names something without leaving the message: the sentences of the document you have open (s3), and the documents of the project. Sentences are matched on what they say, so @ followed by a word finds the sentence that contains it. Arrow keys move through the list, Enter takes the one that is highlighted, and Escape closes the list and leaves what you typed.

A plan approved in the panel re-reads the document, so the canvas shows the result without losing your place.

13.2. How full a conversation is

The panel’s header shows how much of the model’s limit the last turn used, with the counts behind it on hover. A conversation fills up as it grows, because every turn sends the whole thread again. Past 85 percent the panel says so, and a new conversation starts with room again. Where the model’s limit is not known the count is shown without a percentage, unless the assistant was started with its limit stated.

13.3. When no assistant is connected

The assistant is a service that your server’s operator runs and picks the model for (plaid-umr-agent, installed from a checkout of the source tree). When none is connected there is nothing to open, so the tab, the button, the handle and Ask are not shown. Conversations already saved are unaffected and open from their own links.

14. Keyboard reference

The defaults. Arrows, Tab, Enter and Escape are fixed, and every other key can be rebound under your profile, Keyboard.

Key Action

Arrows

Move between nodes

Tab

New child of the focused node

Enter

Edit the concept

:

Edit the relation to the parent

a

Edit the attributes

v

Rename the variable

u

Change the anchor: click words or type their numbers

m

Move under another node: pick or click it

Alt+Left, Alt+Right

Move earlier or later among its siblings

r

Add a second parent: pick or click it

c

Coreference with another node

t

Temporal relation

o

Modal relation

d

Change or delete a document relation of the node

n

New node with no parent, also with no node focused

e

Take the new concept of a changed vocabulary entry

Shift+E

The same, for every node picked from that entry

PageDown, PageUp

Next or previous sentence

Ctrl+Shift+R

Make the node the root

Ctrl+Enter

Accept the node and its relation to its parent

Shift+Backspace

Delete the edge to the parent, with what only it reached

Ctrl+Shift+Backspace

Delete the node and everything under it

Escape

Leave a mode, cancel a picker, or unfocus the node

Menu, Shift+F10

Open the node’s menu