diff --git a/api/og.sha b/api/og.sha index 81749f6..bd39cb7 100644 --- a/api/og.sha +++ b/api/og.sha @@ -1 +1 @@ -f7bccbe8fca84fb81dfcd8d6069ac8865948f2bb9a7e42658ba7a2ac8920481b +b0dc13542dc3d646d3d60af1a29989be66feb93c4f8ab7ab4b7328797cd84b92 diff --git a/billing/og.sha b/billing/og.sha index 2c91ee1..eab1465 100644 --- a/billing/og.sha +++ b/billing/og.sha @@ -1 +1 @@ -a66d59955dc65fbc07fb3d8a1bebee0ace48754c9fad4c6b8fa971a0844ce010 +16ce5f5d2457f0ace4463a8eabe20c76cd6e9a337e65a80d5ea9ad99274259f5 diff --git a/chat.css b/chat.css index 19768ad..f78c782 100644 --- a/chat.css +++ b/chat.css @@ -213,12 +213,15 @@ html[data-chat-waiting]::after{content:"ask \00b7 " attr(data-chat-waiting);pos sized to the text; a person's mark is the firm brightness and an agent's the mid, as the Processes page draws them, and both beat the linked label's own color; a system's element mark is the firm brightness too, since a system is a thing and not an agent. An open position is a - dashed box with no fill, and the frame the agents of a group stand in is shaded. */ + dashed box with no fill, as is a scenario's extension, and the frame the agents of a group + stand in is shaded. */ .rbchat-diagram-box svg .label-icon{width:1.15em;height:1.15em;vertical-align:-.2em;margin-right:.3em} .rbchat-diagram-box svg .rbchat-mark.human{color:var(--c-firm,var(--ink))!important} .rbchat-diagram-box svg .rbchat-mark.agent{color:var(--c-mid)!important} +.rbchat-diagram-box svg .rbchat-mark.actor{color:var(--c-firm,var(--ink))!important} .rbchat-diagram-box svg .rbchat-mark.element{color:var(--c-firm,var(--ink))!important} .rbchat-diagram-box svg .node.open rect{fill:none!important} +.rbchat-diagram-box svg .node.ext rect{fill:none!important} .rbchat-diagram-box svg .cluster.agents rect{fill:var(--press)!important} .rbchat-diagram-reading{margin:.35rem .1rem 0;font-size:.8rem;line-height:1.4;color:var(--dim)} /* A page's own picture is a preview: fitted to the column, never past its own size, and diff --git a/chat.js b/chat.js index e8e2aee..23b70db 100644 --- a/chat.js +++ b/chat.js @@ -129,7 +129,7 @@ github: "{title} on GitHub", commit: "commit {sha}", modalClose: "Close \u00b7 Esc", ask: { from: "The link you opened asks:", label: "A question from the link you opened", send: "Send", edit: "Edit", discard: "Discard" }, - diagram: { concepts: "Concepts", process: "Process", neighborhood: "Connections", schema: "Meta-model", context: "Context map", aggregate: "Aggregate", flow: "Flow", lifecycle: "Lifecycle", organization: "Organization", system: "Landscape", holds: "Data held", reading: { context: "One-way arrows run from upstream to downstream; each arrow names the pattern between the two contexts.", aggregate: "The root holds what the diamonds join; the dashed arrows are the events it emits.", flow: "Solid arrows are commands sent to the aggregate, dashed arrows the events it emits; a box names the condition of each branch.", lifecycle: "Each arrow is a step from one state to the next, labeled with the command that takes it where there is one.", organization: "Solid arrows run from a lead to the leads below; a dashed line joins staff to the head they serve; a dashed box is an open position, beside a lead the search for a successor; agents stand in the shaded frame, and a dotted arrow from a person to an agent says who directs it, where an agent with no arrow is directed by everyone in the frame.", system: "Solid arrows run from the system the data comes from to the one that takes it, labeled with the interface, what is carried and how; a dotted line joins a system to what it runs on; a rounded box is a service the system provides; a cylinder is data it holds, by a heavy arrow where its copy leads, a solid one where it writes and a dotted one where it only reads.", holds: "Each cylinder is data kept of the concept named under it; a heavy arrow marks the system whose copy leads, a solid one a system that writes a copy of its own, a dotted one a system that only reads." }, expand: "Open full screen", shut: "Close full screen", zoomIn: "Zoom in", zoomOut: "Zoom out", fit: "Fit", fitTip: "Fit to the screen", failed: "The diagram could not be drawn; this is its source." }, + diagram: { concepts: "Concepts", process: "Process", neighborhood: "Connections", schema: "Meta-model", context: "Context map", aggregate: "Aggregate", flow: "Flow", lifecycle: "Lifecycle", organization: "Organization", system: "Landscape", holds: "Data held", usecase: "Use case", scenario: "Scenario", requirements: "Requirements", reading: { context: "One-way arrows run from upstream to downstream; each arrow names the pattern between the two contexts.", aggregate: "The root holds what the diamonds join; the dashed arrows are the events it emits.", flow: "Solid arrows are commands sent to the aggregate, dashed arrows the events it emits; a box names the condition of each branch.", lifecycle: "Each arrow is a step from one state to the next, labeled with the command that takes it where there is one.", organization: "Solid arrows run from a lead to the leads below; a dashed line joins staff to the head they serve; a dashed box is an open position, beside a lead the search for a successor; agents stand in the shaded frame, and a dotted arrow from a person to an agent says who directs it, where an agent with no arrow is directed by everyone in the frame.", system: "Solid arrows run from the system the data comes from to the one that takes it, labeled with the interface, what is carried and how; a dotted line joins a system to what it runs on; a rounded box is a service the system provides; a cylinder is data it holds, by a heavy arrow where its copy leads, a solid one where it writes and a dotted one where it only reads.", holds: "Each cylinder is data kept of the concept named under it; a heavy arrow marks the system whose copy leads, a solid one a system that writes a copy of its own, a dotted one a system that only reads.", usecase: "The actor stands outside the frame, which is the use case's scope; a dashed arrow runs from a use case to one its steps include, a solid one to a feature it asks something of; a hexagon is a requirement it is held to, with a heavy border where it must and a dashed one where it may.", scenario: "The rounded box is the trigger; each box is a step, in order, with who acts; a dashed box is an extension, the condition first and what happens then.", requirements: "A hexagon is a requirement, with a heavy border where it must and a dashed one where it may, in a frame for its kind; an arrow runs to what it applies to, a dotted one to a rule it follows." }, expand: "Open full screen", shut: "Close full screen", zoomIn: "Zoom in", zoomOut: "Zoom out", fit: "Fit", fitTip: "Fit to the screen", failed: "The diagram could not be drawn; this is its source." }, refusal: { too_long: "That message is over 1,000 characters.", too_much: "The conversation has grown too long to send; start a new one.", @@ -177,7 +177,7 @@ github: "{title} auf GitHub", commit: "Commit {sha}", modalClose: "Schliessen \u00b7 Esc", ask: { from: "Der Link, den Sie geöffnet haben, enthält diese Frage:", label: "Eine Frage aus dem Link, den Sie geöffnet haben", send: "Senden", edit: "Bearbeiten", discard: "Verwerfen" }, - diagram: { concepts: "Konzepte", process: "Prozess", neighborhood: "Verbindungen", schema: "Meta-Modell", context: "Context Map", aggregate: "Aggregat", flow: "Ablauf", lifecycle: "Lebenszyklus", organization: "Organisation", system: "Landschaft", holds: "Datenbestand", reading: { context: "Einfache Pfeile laufen vom Upstream- zum Downstream-Kontext; jeder Pfeil nennt das Muster zwischen den beiden Kontexten.", aggregate: "Die Wurzel des Aggregats hält, was die Rauten verbinden; die gestrichelten Pfeile sind die Ereignisse, die sie auslöst.", flow: "Durchgezogene Pfeile sind Befehle an das Aggregat, gestrichelte die Ereignisse, die es auslöst; ein Kasten nennt die Bedingung jedes Zweigs.", lifecycle: "Jeder Pfeil ist ein Schritt von einem Zustand zum nächsten, beschriftet mit dem Befehl, der ihn auslöst, wo es einen gibt.", organization: "Durchgezogene Pfeile laufen von einer Führungskraft zu den Führungskräften darunter; eine gestrichelte Linie verbindet eine Stabsstelle mit der Leitung, der sie zuarbeitet; ein gestrichelter Kasten ist eine offene Stelle, neben einer Führungskraft die Suche nach ihrer Nachfolge; Software-Agenten stehen im farbig hinterlegten Rahmen, und ein gepunkteter Pfeil von einer Person zu einem Agenten sagt, wer ihn steuert; ein Agent ohne Pfeil wird von allen im Rahmen gesteuert.", system: "Durchgezogene Pfeile laufen vom System, aus dem die Daten stammen, zum System, das sie übernimmt, beschriftet mit der Schnittstelle und mit dem, was übertragen wird und wie; eine gepunktete Linie verbindet ein System mit dem, worauf es läuft; ein abgerundeter Kasten ist ein Service, den das System bereitstellt; ein Zylinder ist ein Datenbestand, den es hält – mit einem dicken Pfeil, wo seine Kopie führend ist, einem durchgezogenen, wo es schreibt, und einem gepunkteten, wo es nur liest.", holds: "Jeder Zylinder ist ein Datenbestand zum darunter genannten Konzept; ein dicker Pfeil markiert das System, dessen Kopie führend ist, ein durchgezogener ein System, das eine eigene Kopie schreibt, ein gepunkteter ein System, das nur liest." }, expand: "Im Vollbild öffnen", shut: "Vollbild schliessen", zoomIn: "Vergrössern", zoomOut: "Verkleinern", fit: "Einpassen", fitTip: "Auf den Bildschirm einpassen", failed: "Das Diagramm konnte nicht gezeichnet werden; dies ist seine Quelle." }, + diagram: { concepts: "Konzepte", process: "Prozess", neighborhood: "Verbindungen", schema: "Meta-Modell", context: "Context Map", aggregate: "Aggregat", flow: "Ablauf", lifecycle: "Lebenszyklus", organization: "Organisation", system: "Landschaft", holds: "Datenbestand", usecase: "Anwendungsfall", scenario: "Szenario", requirements: "Anforderungen", reading: { context: "Einfache Pfeile laufen vom Upstream- zum Downstream-Kontext; jeder Pfeil nennt das Muster zwischen den beiden Kontexten.", aggregate: "Die Wurzel des Aggregats hält, was die Rauten verbinden; die gestrichelten Pfeile sind die Ereignisse, die sie auslöst.", flow: "Durchgezogene Pfeile sind Befehle an das Aggregat, gestrichelte die Ereignisse, die es auslöst; ein Kasten nennt die Bedingung jedes Zweigs.", lifecycle: "Jeder Pfeil ist ein Schritt von einem Zustand zum nächsten, beschriftet mit dem Befehl, der ihn auslöst, wo es einen gibt.", organization: "Durchgezogene Pfeile laufen von einer Führungskraft zu den Führungskräften darunter; eine gestrichelte Linie verbindet eine Stabsstelle mit der Leitung, der sie zuarbeitet; ein gestrichelter Kasten ist eine offene Stelle, neben einer Führungskraft die Suche nach ihrer Nachfolge; Software-Agenten stehen im farbig hinterlegten Rahmen, und ein gepunkteter Pfeil von einer Person zu einem Agenten sagt, wer ihn steuert; ein Agent ohne Pfeil wird von allen im Rahmen gesteuert.", system: "Durchgezogene Pfeile laufen vom System, aus dem die Daten stammen, zum System, das sie übernimmt, beschriftet mit der Schnittstelle und mit dem, was übertragen wird und wie; eine gepunktete Linie verbindet ein System mit dem, worauf es läuft; ein abgerundeter Kasten ist ein Service, den das System bereitstellt; ein Zylinder ist ein Datenbestand, den es hält – mit einem dicken Pfeil, wo seine Kopie führend ist, einem durchgezogenen, wo es schreibt, und einem gepunkteten, wo es nur liest.", holds: "Jeder Zylinder ist ein Datenbestand zum darunter genannten Konzept; ein dicker Pfeil markiert das System, dessen Kopie führend ist, ein durchgezogener ein System, das eine eigene Kopie schreibt, ein gepunkteter ein System, das nur liest.", usecase: "Der Rahmen ist der Geltungsbereich des Anwendungsfalls, und der Akteur steht ausserhalb; ein gestrichelter Pfeil läuft von einem Anwendungsfall zu einem anderen, den seine Schritte einbinden, ein durchgezogener zu einem Feature, von dem er etwas verlangt; ein Sechseck ist eine Anforderung, die für den Anwendungsfall gilt, mit dickem Rand, wo sie «muss» sagt, und gestricheltem, wo sie «darf» sagt.", scenario: "Der abgerundete Kasten ist der Auslöser; die Kästen sind die Schritte in ihrer Reihenfolge, und jeder nennt, wer handelt; ein gestrichelter Kasten ist eine Erweiterung: zuerst die Bedingung, dann, was geschieht.", requirements: "Ein Sechseck ist eine Anforderung, mit dickem Rand, wo sie «muss» sagt, und gestricheltem, wo sie «darf» sagt; der Rahmen um sie nennt ihre Art; ein Pfeil läuft zu dem, wofür sie gilt, ein gepunkteter zu einer Regel, der sie folgt." }, expand: "Im Vollbild öffnen", shut: "Vollbild schliessen", zoomIn: "Vergrössern", zoomOut: "Verkleinern", fit: "Einpassen", fitTip: "Auf den Bildschirm einpassen", failed: "Das Diagramm konnte nicht gezeichnet werden; dies ist seine Quelle." }, refusal: { too_long: "Diese Nachricht ist länger als 1’000 Zeichen.", too_much: "Das Gespräch ist zu lang geworden, um es zu senden; beginnen Sie ein neues.", @@ -787,10 +787,11 @@ }; } // Where Mermaid put a node in its SVG: a group whose id ends in the node's name and a number, - // after `classId` in a class diagram and `flowchart` in a flowchart. The one place that knows + // after `classId` in a class diagram and `flowchart` in a flowchart; a scenario's step is `s0` + // and on and is listed where its actor is a seat. The one place that knows // it, so a Mermaid release that names them otherwise is fixed here and nowhere else. function nodeElement(svg, node){ - if (!svg || !/^n\d+$/.test(String(node))) return null; + if (!svg || !/^[ns]\d+$/.test(String(node))) return null; var re = new RegExp("-(?:classId|flowchart)-" + node + "-\\d+$"), all = svg.querySelectorAll("g[id]"); for (var i = 0; i < all.length; i++) if (re.test(all[i].id)) return all[i]; return null; @@ -926,6 +927,7 @@ var MARKS = { human: '', agent: '', + actor: '', "application-component": '', node: '', "system-software": '', @@ -936,7 +938,7 @@ function withMarks(m){ if (m && typeof m.registerIconPacks === "function" && !m.rbMarks) { var icons = {}; - Object.keys(MARKS).forEach(function(k){ icons[k] = { body: '' + MARKS[k] + "" }; }); + Object.keys(MARKS).forEach(function(k){ icons[k] = { body: '' + MARKS[k] + "" }; }); m.registerIconPacks([{ name: "fak", icons: { prefix: "fak", width: 16, height: 16, icons: icons } }]); m.rbMarks = true; } diff --git a/model/og.sha b/model/og.sha index 7f2adbd..dda8516 100644 --- a/model/og.sha +++ b/model/og.sha @@ -1 +1 @@ -25216fd5d867f5943a11c39b43e570c2defbba6566610ddf40a58efc044a9de1 +f8fee0c7609393753f7c4c1e9d1bae034abae9b0a2d8a97d26f1bb9e1fd00dc9 diff --git a/og.sha b/og.sha index d71b7dd..cc6025b 100644 --- a/og.sha +++ b/og.sha @@ -1 +1 @@ -215f61fd4358b2e227f2c1a75f9b88811e4201c98491703665a0b3a364b40db6 +c319fa53115f3372ea844e5448f8063d9a864e14a0d2e785bd8f271d1bb20029 diff --git a/package-lock.json b/package-lock.json index 0d2aa17..942c3f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "companygraph-meta-model": "github:companygraph/meta-model#v0.88.0" }, "devDependencies": { - "@robertblust/design": "github:robertblust/design#v0.150.0", + "@robertblust/design": "github:robertblust/design#v0.151.0", "companygraph-mcp-server": "github:companygraph/mcp-server#v0.62.0", "pdf-lib": "^1.17.1", "playwright": "^1.63.0", @@ -96,8 +96,8 @@ } }, "node_modules/@robertblust/design": { - "version": "0.150.0", - "resolved": "git+ssh://git@github.com/robertblust/design.git#63044b26ec57d169d7bb91a5de8fd12ee4b78881", + "version": "0.151.0", + "resolved": "git+ssh://git@github.com/robertblust/design.git#65b78c6310af99370e594d48de0f8bff6a682448", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index fa17f67..b0ae402 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "pin:check": "node pin-check.mjs" }, "devDependencies": { - "@robertblust/design": "github:robertblust/design#v0.150.0", + "@robertblust/design": "github:robertblust/design#v0.151.0", "companygraph-mcp-server": "github:companygraph/mcp-server#v0.62.0", "pdf-lib": "^1.17.1", "playwright": "^1.63.0", diff --git a/principles/og.sha b/principles/og.sha index 49a3add..a63f273 100644 --- a/principles/og.sha +++ b/principles/og.sha @@ -1 +1 @@ -64bae13fbbc0037a9dd139b09e83dd6a6d05ff0df08e7ed8560f971c21e0de37 +78cc3731f6a85a95229672c8f3f6833fb1aa40f364003f493f239cfd3d32280e diff --git a/privacy/og.sha b/privacy/og.sha index 4db797e..408bd3a 100644 --- a/privacy/og.sha +++ b/privacy/og.sha @@ -1 +1 @@ -aa1304aa5ee6eaf56c3f02a09172435c0021b402a13ecf5aa36409244f2a631e +4e07d23c9d4042a4e4af4a83bc76527ef6bc38ce258ec40a71924d65a68e0f3e diff --git a/problems/og.sha b/problems/og.sha index df60f61..6ece32c 100644 --- a/problems/og.sha +++ b/problems/og.sha @@ -1 +1 @@ -ae868e5c7ec7ad8a7c3dafec9938e7f3bfdf44fa352011a247199195e7b27787 +797956323f454d2d46aceea23f0ac5aba64efa23585a626f5b8c828e8e68fa33 diff --git a/processes/og.sha b/processes/og.sha index 911dc0f..7b88536 100644 --- a/processes/og.sha +++ b/processes/og.sha @@ -1 +1 @@ -d8a7402ea8878547c0fdc86eef1d45fa7e1d1085befea5f86b8af25e95bc7e4f +e74a58c5d224c5c9fbad1ab7d084baa753b0aaabc7c05943eeedb2391d63271c diff --git a/processes/pictures/answering.sha b/processes/pictures/answering.sha index 48781cc..c62283d 100644 --- a/processes/pictures/answering.sha +++ b/processes/pictures/answering.sha @@ -1 +1 @@ -4decf2a5b45e907bf64043674e33cd19047a7ef89a294ce8abb2ba4e553efa00 +983410cae0321568b610f7252d21bd21e4d93de12c4d14389e5ffb89d5145dfc diff --git a/processes/pictures/contribution.sha b/processes/pictures/contribution.sha index 3dfdabe..a1a3fb5 100644 --- a/processes/pictures/contribution.sha +++ b/processes/pictures/contribution.sha @@ -1 +1 @@ -5fdaef5728d298b9e5c0320cfb0373807be3f0b904cb14c368a7f8494a679198 +78d09e1d6debb1904f328b93ec472f198fbe22ff267105273990614443ff6ffa diff --git a/processes/pictures/deciding.sha b/processes/pictures/deciding.sha index a84afa2..f89395a 100644 --- a/processes/pictures/deciding.sha +++ b/processes/pictures/deciding.sha @@ -1 +1 @@ -e3226dd3d40cc2a7a28c09569d4633a40c5cc41e4038d8fab4613964dacb6b76 +6024f02525d1b1fc6ede83faaf6f321418626e0f6e1fa3b69bf4b2811716c02c diff --git a/processes/pictures/delivery.sha b/processes/pictures/delivery.sha index d7bf7d2..8a254dc 100644 --- a/processes/pictures/delivery.sha +++ b/processes/pictures/delivery.sha @@ -1 +1 @@ -04839431a9ead9aa3e9abf4a055eee1282eb4abcedfcffcdb46cf00415ae87ac +9fc548f92799b2c56496b006b9a28ccebda77270a21fe9d79527d58fdb6d41e4 diff --git a/processes/pictures/feature-request.sha b/processes/pictures/feature-request.sha index c371046..5713ccf 100644 --- a/processes/pictures/feature-request.sha +++ b/processes/pictures/feature-request.sha @@ -1 +1 @@ -f670be16664807ea7e53578d92d4b66ed19d063265d30c4759e31c143d3b34eb +337ff9900eefd9efaa1cdb1cc5b4888979794a81abe9dbb592de0ec84123b2b7 diff --git a/processes/pictures/narrating.sha b/processes/pictures/narrating.sha index 5075ed3..8b466f6 100644 --- a/processes/pictures/narrating.sha +++ b/processes/pictures/narrating.sha @@ -1 +1 @@ -f71b67aa8227a5d4d4b5cab392cd7b58e50beb7bf505a20805d64acd55158632 +30559298d12eb70970269433e9b7223ee58d9ce05153597db19e40615681232b diff --git a/surfaces/og.sha b/surfaces/og.sha index 20fc375..c6a9634 100644 --- a/surfaces/og.sha +++ b/surfaces/og.sha @@ -1 +1 @@ -0541992bc43a0687660fb77fd8c47cb5c314e7ee2b75c6b1bd8b6e56b39c4548 +07eccf18ba72fb7772c8386a0e5efa869b5c7087c92bece0930350288582f4c8 diff --git a/talks/intro/og.sha b/talks/intro/og.sha index afbfcbc..b4b89e9 100644 --- a/talks/intro/og.sha +++ b/talks/intro/og.sha @@ -1 +1 @@ -64e4851d50b4f69802e78976c80bef9e5f63c573f02e2d87062178c73083048c +0b812afbe64876220d33988e12a731d557c2a7524a4eb2ee4faeb178de00f943 diff --git a/talks/og.sha b/talks/og.sha index 6b3ffc0..18f9939 100644 --- a/talks/og.sha +++ b/talks/og.sha @@ -1 +1 @@ -455ab5896f92b993f5a29b5d3cfd2c9f11dfd91e40cbef69c998d44ededd9b92 +122feefde01e742aec5e0b2a4d2211e7408fd66d037b5cf122bd61f0428e9058