diff --git a/docs/features/recording-and-replay/_assets/figures.excalidraw b/docs/features/recording-and-replay/_assets/figures.excalidraw new file mode 100644 index 00000000000..79097f2a91b --- /dev/null +++ b/docs/features/recording-and-replay/_assets/figures.excalidraw @@ -0,0 +1,1951 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "", + "elements": [ + { + "id": "dzgXRobJx5OzXavYu5zfw", + "type": "rectangle", + "x": 972.1203946860796, + "y": -518.7011527354925, + "width": 534.1071428571433, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bNw", + "roundness": null, + "seed": 961590399, + "version": 443, + "versionNonce": 994578943, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "m37Pedlyoxx23uXk-JAQg" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false + }, + { + "id": "m37Pedlyoxx23uXk-JAQg", + "type": "text", + "x": 992.7495123792997, + "y": -513.7011527354925, + "width": 492.8489074707031, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bNx", + "roundness": null, + "seed": 459525279, + "version": 573, + "versionNonce": 1161021105, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951763, + "link": null, + "locked": false, + "text": "Initialization Information, i.e., internal state accessed via FEO", + "fontSize": 16, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "top", + "containerId": "dzgXRobJx5OzXavYu5zfw", + "originalText": "Initialization Information, i.e., internal state accessed via FEO", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "Ned3Q-9-gj8B35JvB7Tqf", + "type": "rectangle", + "x": 1508.9061089717934, + "y": -518.7011527354925, + "width": 643.9285714285713, + "height": 30, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bNy", + "roundness": null, + "seed": 1470030015, + "version": 526, + "versionNonce": 1905490463, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "z72u1HrxxVCp9dMA_ZzIh" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false + }, + { + "id": "z72u1HrxxVCp9dMA_ZzIh", + "type": "text", + "x": 1682.6781339438917, + "y": -513.7011527354925, + "width": 296.384521484375, + "height": 20, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bNz", + "roundness": null, + "seed": 1604481247, + "version": 669, + "versionNonce": 1028245649, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951763, + "link": null, + "locked": false, + "text": "Trace data, i.e., content from mw/com", + "fontSize": 16, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "top", + "containerId": "Ned3Q-9-gj8B35JvB7Tqf", + "originalText": "Trace data, i.e., content from mw/com", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "sB5DoB_zoQG8CbfM2B95G", + "type": "rectangle", + "x": 134.394204209887, + "y": -592.8321051164412, + "width": 252.85714285714312, + "height": 160, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bO0", + "roundness": { + "type": 3 + }, + "seed": 486472959, + "version": 1105, + "versionNonce": 1987894847, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "yzxlLcugG_E98pm-pX-rB" + }, + { + "id": "99c3RZLrw7W_kJPHybjW4", + "type": "arrow" + }, + { + "id": "tGw-65OxabqXZNpk47XyN", + "type": "arrow" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false + }, + { + "id": "yzxlLcugG_E98pm-pX-rB", + "type": "text", + "x": 140.37289313113433, + "y": -587.8321051164412, + "width": 240.89976501464844, + "height": 150, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bO1", + "roundness": null, + "seed": 1932854559, + "version": 1273, + "versionNonce": 721718897, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951764, + "link": null, + "locked": false, + "text": "Replay\n\nThis is a time-resolved\n(movie) replay of the\noutputs and the internal\nstate of the SUR.", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "sB5DoB_zoQG8CbfM2B95G", + "originalText": "Replay\n\nThis is a time-resolved (movie) replay of the outputs and the internal state of the SUR.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "pwAUIdKYWUixxNt0uCWGS", + "type": "rectangle", + "x": 1282.2107220985044, + "y": -1654.1416289259682, + "width": 252.85714285714312, + "height": 310, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bO2", + "roundness": { + "type": 3 + }, + "seed": 28641599, + "version": 1224, + "versionNonce": 1021623903, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "Y4aiJluQs1hCauTYxSxRD" + }, + { + "id": "u4qPje7fxSrWBwDN2yaTq", + "type": "arrow" + }, + { + "id": "N7mdBTEFMeYGSUfOGz392", + "type": "arrow" + }, + { + "id": "_GBussNIOECwXRTM1Kf31", + "type": "arrow" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false + }, + { + "id": "Y4aiJluQs1hCauTYxSxRD", + "type": "text", + "x": 1287.9494055265877, + "y": -1649.1416289259682, + "width": 241.37977600097656, + "height": 300, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bO3", + "roundness": null, + "seed": 635406687, + "version": 1974, + "versionNonce": 86743121, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951764, + "link": null, + "locked": false, + "text": "Reprocessing\n\nThis is a machinery\nwhich establishes the\nrecorded internal state\nin the SUR and than\nfeeds the recorded\ninputs to the SUR such\nthat the SUR can\nexecute and new internal\nstate and SUR output\nis generated.", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "pwAUIdKYWUixxNt0uCWGS", + "originalText": "Reprocessing\n\nThis is a machinery which establishes the recorded internal state in the SUR and than feeds the recorded inputs to the SUR such that the SUR can execute and new internal state and SUR output is generated.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "AKOiZD3TGTvb0-qpsuuHp", + "type": "rectangle", + "x": 145.10848992417323, + "y": -1691.701152735492, + "width": 252.85714285714312, + "height": 385, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bO4", + "roundness": { + "type": 3 + }, + "seed": 1023739263, + "version": 603, + "versionNonce": 127638143, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "S0DcUtYm_guYHR4CWI61N" + }, + { + "id": "dyK5yTiKppa4khreGyR2E", + "type": "arrow" + }, + { + "id": "zwEoKdGDdIqJdcBmXkfOG", + "type": "arrow" + }, + { + "id": "ol__P_i5nSFFsATr7hBcO", + "type": "arrow" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false + }, + { + "id": "S0DcUtYm_guYHR4CWI61N", + "type": "text", + "x": 153.727178235069, + "y": -1686.701152735492, + "width": 235.61976623535156, + "height": 375, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bO5", + "roundness": null, + "seed": 644218271, + "version": 1082, + "versionNonce": 2107008561, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951764, + "link": null, + "locked": false, + "text": "System under recording\n(SUR)\n\nThis is the system\ngenerating the\ninformation of interest\nwhich is recorded in a\nfile, the Trace Record .\n\nThe information can be\ncommunicated as output\non the output\ninterfaces of the SUR\nor reside within the\nSUR as internal state.", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "AKOiZD3TGTvb0-qpsuuHp", + "originalText": "System under recording (SUR)\n\nThis is the system generating the information of interest which is recorded in a file, the Trace Record .\n\nThe information can be communicated as output on the output interfaces of the SUR or reside within the SUR as internal state.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "wQCMcS7ny4G1YITUbpTC4", + "type": "rectangle", + "x": -332.74865293296625, + "y": -1583.3082955926343, + "width": 252.85714285714312, + "height": 185, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bO6", + "roundness": { + "type": 3 + }, + "seed": 87224767, + "version": 835, + "versionNonce": 1801581215, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "ylXB9qzcR7g_DOhjZfd9i" + }, + { + "id": "dyK5yTiKppa4khreGyR2E", + "type": "arrow" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false + }, + { + "id": "ylXB9qzcR7g_DOhjZfd9i", + "type": "text", + "x": -309.85999086718766, + "y": -1578.3082955926343, + "width": 207.07981872558594, + "height": 175, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bO7", + "roundness": null, + "seed": 1116496351, + "version": 1188, + "versionNonce": 523008017, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951764, + "link": null, + "locked": false, + "text": "Input for the SUR\n\nThese are the inputs\nthe SUR needs to\nexecute. E.g., sensor\nreadings, outside\ncommunication, etc.", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "wQCMcS7ny4G1YITUbpTC4", + "originalText": "Input for the SUR\n\nThese are the inputs the SUR needs to execute. E.g., sensor readings, outside communication, etc.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "dyK5yTiKppa4khreGyR2E", + "type": "arrow", + "x": -68.3223965921743, + "y": -1495.7809760601417, + "width": 209.60766572132525, + "height": 4.177282863310211, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bO8", + "roundness": { + "type": 2 + }, + "seed": 1333972479, + "version": 798, + "versionNonce": 283657919, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "KlMltFma7Nr_w4eJ4WNxr" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 209.60766572132525, + -4.177282863310211 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "wQCMcS7ny4G1YITUbpTC4", + "focus": -0.023501613472252696, + "gap": 14.526164479621912 + }, + "endBinding": { + "elementId": "AKOiZD3TGTvb0-qpsuuHp", + "focus": 0.017192638259891584, + "gap": 6.878524406214638 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "KlMltFma7Nr_w4eJ4WNxr", + "type": "text", + "x": -13.008500560124958, + "y": -1522.8696174917968, + "width": 98.97987365722656, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bO9", + "roundness": null, + "seed": 655799839, + "version": 45, + "versionNonce": 736447985, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951764, + "link": null, + "locked": false, + "text": "SUR input\ninterfaces", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "dyK5yTiKppa4khreGyR2E", + "originalText": "SUR input\ninterfaces", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "zwEoKdGDdIqJdcBmXkfOG", + "type": "arrow", + "x": 404.4384426621591, + "y": -1495.0982660379982, + "width": 274.5478188048246, + "height": 1.9327087178662623, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOA", + "roundness": { + "type": 2 + }, + "seed": 272144959, + "version": 587, + "versionNonce": 919541471, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "z3yNIo0JMnpTfVCEHI43p" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 274.5478188048246, + 1.9327087178662623 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "AKOiZD3TGTvb0-qpsuuHp", + "focus": 0.016377853537238897, + "gap": 11.555282701176111 + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "z3yNIo0JMnpTfVCEHI43p", + "type": "text", + "x": 483.4424088272667, + "y": -1519.131911679065, + "width": 116.53988647460938, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOB", + "roundness": null, + "seed": 533264991, + "version": 47, + "versionNonce": 986212305, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951764, + "link": null, + "locked": false, + "text": "SUR output\ninterfaces", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "zwEoKdGDdIqJdcBmXkfOG", + "originalText": "SUR output interfaces", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "RQH89QPfo8nZ42o3Q7VpW", + "type": "rectangle", + "x": 147.60848992417323, + "y": -1187.5940098783499, + "width": 252.85714285714312, + "height": 185, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOC", + "roundness": { + "type": 3 + }, + "seed": 2056803967, + "version": 968, + "versionNonce": 1940316927, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "5id0HkyJnTtOkcH_smBFr" + }, + { + "id": "SDIr2uFR5BkLKWs3ofdYC", + "type": "arrow" + }, + { + "id": "PdqsMSzufu2_YIiDLFNuc", + "type": "arrow" + }, + { + "id": "ol__P_i5nSFFsATr7hBcO", + "type": "arrow" + }, + { + "id": "k7INkTSrCZcKMH-0-mF2A", + "type": "arrow" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false + }, + { + "id": "5id0HkyJnTtOkcH_smBFr", + "type": "text", + "x": 159.60716785909244, + "y": -1182.5940098783499, + "width": 228.8597869873047, + "height": 175, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOD", + "roundness": null, + "seed": 1466379935, + "version": 1362, + "versionNonce": 367871409, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951764, + "link": null, + "locked": false, + "text": "Recorder\n\nThe recorder needs to\ncapture the inputs and\noutputs of the SUR as\nwell as it's internal\nstate.", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "RQH89QPfo8nZ42o3Q7VpW", + "originalText": "Recorder\n\nThe recorder needs to capture the inputs and outputs of the SUR as well as it's internal state.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "SDIr2uFR5BkLKWs3ofdYC", + "type": "arrow", + "x": 134.74608440782595, + "y": -1079.6315664637086, + "width": 102.49473734079311, + "height": 381.1767291289261, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOE", + "roundness": { + "type": 2 + }, + "seed": 1088815807, + "version": 739, + "versionNonce": 938486559, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951762, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -88.20902305507843, + -74.03387198607015 + ], + [ + -102.49473734079311, + -381.1767291289261 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "RQH89QPfo8nZ42o3Q7VpW", + "focus": -0.6664739184533152, + "gap": 12.86240551634819 + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "bar", + "elbowed": false + }, + { + "id": "PdqsMSzufu2_YIiDLFNuc", + "type": "arrow", + "x": 413.60960147691094, + "y": -1072.7307844358975, + "width": 136.63302945342093, + "height": 390.6325324625468, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOF", + "roundness": { + "type": 2 + }, + "seed": 397759199, + "version": 912, + "versionNonce": 517134929, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951762, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 108.69273241469182, + -68.28435533726133 + ], + [ + 136.63302945342093, + -390.6325324625468 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "RQH89QPfo8nZ42o3Q7VpW", + "focus": 0.6400830199265405, + "gap": 13.143968695594594 + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "bar", + "elbowed": false + }, + { + "id": "ol__P_i5nSFFsATr7hBcO", + "type": "arrow", + "x": 271.05014075071176, + "y": -1192.9042533212528, + "width": 0.05323015583689994, + "height": 107.63881190293978, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOG", + "roundness": { + "type": 2 + }, + "seed": 1415945983, + "version": 520, + "versionNonce": 270233407, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951762, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -0.05323015583689994, + -107.63881190293978 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "RQH89QPfo8nZ42o3Q7VpW", + "focus": -0.026608554321598473, + "gap": 8.856404824889069 + }, + "endBinding": { + "elementId": "AKOiZD3TGTvb0-qpsuuHp", + "focus": 0.0050456328264250234, + "gap": 7.410776963860371 + }, + "startArrowhead": null, + "endArrowhead": "bar", + "elbowed": false + }, + { + "id": "ZD45CB9JdZqrTFdtnzB50", + "type": "rectangle", + "x": 147.42991849560258, + "y": -897.2368670212081, + "width": 252.85714285714312, + "height": 135, + "angle": 0, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOH", + "roundness": { + "type": 3 + }, + "seed": 158820127, + "version": 714, + "versionNonce": 621111345, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "XG2WffvdTvljvGGwjZ3ia" + }, + { + "id": "k7INkTSrCZcKMH-0-mF2A", + "type": "arrow" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false + }, + { + "id": "XG2WffvdTvljvGGwjZ3ia", + "type": "text", + "x": 155.88860314438898, + "y": -892.2368670212081, + "width": 235.9397735595703, + "height": 125, + "angle": 0, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOI", + "roundness": null, + "seed": 626731839, + "version": 844, + "versionNonce": 1484482449, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951765, + "link": null, + "locked": false, + "text": "Trace Record\n\nThis is the trace file of\nthe execution of the\nSUR.", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "ZD45CB9JdZqrTFdtnzB50", + "originalText": "Trace Record\n\nThis is the trace file of the execution of the SUR.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "k7INkTSrCZcKMH-0-mF2A", + "type": "arrow", + "x": 273.3057473030558, + "y": -1000.905789736612, + "width": 2.5750347532602973, + "height": 102.7550644108278, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOJ", + "roundness": { + "type": 2 + }, + "seed": 1953590111, + "version": 693, + "versionNonce": 1164655121, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951762, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -2.5750347532602973, + 102.7550644108278 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "RQH89QPfo8nZ42o3Q7VpW", + "focus": -0.017980620250640043, + "gap": 2.8442069380398607 + }, + "endBinding": { + "elementId": "ZD45CB9JdZqrTFdtnzB50", + "focus": -0.0377944074639213, + "gap": 1.9209032640055739 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "QiIl2_1Ed07iN7zou5zTe", + "type": "rectangle", + "x": -325.2486529329717, + "y": -581.7606765450137, + "width": 252.85714285714312, + "height": 135, + "angle": 0, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOK", + "roundness": { + "type": 3 + }, + "seed": 1661642623, + "version": 946, + "versionNonce": 92924799, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "TTjr-Hh_SC3vCyZh-QHmA" + }, + { + "id": "tGw-65OxabqXZNpk47XyN", + "type": "arrow" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false + }, + { + "id": "TTjr-Hh_SC3vCyZh-QHmA", + "type": "text", + "x": -316.7899682841853, + "y": -576.7606765450137, + "width": 235.9397735595703, + "height": 125, + "angle": 0, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOL", + "roundness": null, + "seed": 2137481119, + "version": 1070, + "versionNonce": 1286229361, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951765, + "link": null, + "locked": false, + "text": "Trace Record\n\nThis is the trace file of\nthe execution of the\nSUR.", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "QiIl2_1Ed07iN7zou5zTe", + "originalText": "Trace Record\n\nThis is the trace file of the execution of the SUR.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "tGw-65OxabqXZNpk47XyN", + "type": "arrow", + "x": -64.67909563417106, + "y": -513.1456594103302, + "width": 191.19224405483146, + "height": 0.47265587273341225, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOM", + "roundness": { + "type": 2 + }, + "seed": 1001919423, + "version": 1007, + "versionNonce": 425599903, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951762, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 191.19224405483146, + -0.47265587273341225 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "QiIl2_1Ed07iN7zou5zTe", + "focus": 0.021325174693354463, + "gap": 8.856052130023272 + }, + "endBinding": { + "elementId": "sB5DoB_zoQG8CbfM2B95G", + "focus": 0.013939534418527024, + "gap": 9.435309993447845 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "NLDsCW3O0lixd4Jt-P_Wh", + "type": "rectangle", + "x": 565.8227756384576, + "y": -592.8321051164412, + "width": 252.85714285714312, + "height": 160, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bON", + "roundness": { + "type": 3 + }, + "seed": 1880966111, + "version": 1141, + "versionNonce": 1304340945, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "4-F6-AlmQB3EJgGXY8tF7" + }, + { + "id": "99c3RZLrw7W_kJPHybjW4", + "type": "arrow" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false + }, + { + "id": "4-F6-AlmQB3EJgGXY8tF7", + "type": "text", + "x": 590.6014523526737, + "y": -537.8321051164412, + "width": 203.29978942871094, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOO", + "roundness": null, + "seed": 480735231, + "version": 1376, + "versionNonce": 163673937, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951765, + "link": null, + "locked": false, + "text": "Tooling to work with\nthe replay", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "NLDsCW3O0lixd4Jt-P_Wh", + "originalText": "Tooling to work with the replay", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "99c3RZLrw7W_kJPHybjW4", + "type": "arrow", + "x": 398.2905990906229, + "y": -512.4770386626706, + "width": 159.18333969148352, + "height": 2.5712753796424295, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOP", + "roundness": { + "type": 2 + }, + "seed": 1800869919, + "version": 1088, + "versionNonce": 885737393, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951762, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 159.18333969148352, + 2.5712753796424295 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "sB5DoB_zoQG8CbfM2B95G", + "focus": -0.022737569207726283, + "gap": 11.039252023591871 + }, + "endBinding": { + "elementId": "NLDsCW3O0lixd4Jt-P_Wh", + "focus": -0.06220446082139072, + "gap": 8.348836856352136 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "5U2h5Sx5oNmqCUJD65x4k", + "type": "rectangle", + "x": 792.6735614364834, + "y": -1560.0979633704178, + "width": 252.85714285714312, + "height": 135, + "angle": 0, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOQ", + "roundness": { + "type": 3 + }, + "seed": 1914485823, + "version": 939, + "versionNonce": 1177749471, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "VuR37rA1Ex6t4TIiG33uq" + }, + { + "id": "_GBussNIOECwXRTM1Kf31", + "type": "arrow" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false + }, + { + "id": "VuR37rA1Ex6t4TIiG33uq", + "type": "text", + "x": 801.1322460852698, + "y": -1555.0979633704178, + "width": 235.9397735595703, + "height": 125, + "angle": 0, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOR", + "roundness": null, + "seed": 886627423, + "version": 1070, + "versionNonce": 1377330481, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951765, + "link": null, + "locked": false, + "text": "Trace Recording\n\nThis is the trace file of\nthe execution of the\nSUR.", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "5U2h5Sx5oNmqCUJD65x4k", + "originalText": "Trace Recording\n\nThis is the trace file of the execution of the SUR.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "_GBussNIOECwXRTM1Kf31", + "type": "arrow", + "x": 1055.9224046061763, + "y": -1498.3618892921554, + "width": 216.5630380390885, + "height": 1.8120605758995225, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOS", + "roundness": { + "type": 2 + }, + "seed": 1734080639, + "version": 1713, + "versionNonce": 862237695, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "z9LU-eFtztQ9gQqWsGvgF" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 216.5630380390885, + -1.8120605758995225 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "5U2h5Sx5oNmqCUJD65x4k", + "focus": -0.06737521811072987, + "gap": 11.983235439238342 + }, + "endBinding": { + "elementId": "pwAUIdKYWUixxNt0uCWGS", + "focus": 0.01390433315865988, + "gap": 15.204292152963717 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "z9LU-eFtztQ9gQqWsGvgF", + "type": "text", + "x": 1114.7139867971073, + "y": -1524.2679195801052, + "width": 98.97987365722656, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOT", + "roundness": null, + "seed": 1868992671, + "version": 52, + "versionNonce": 823564049, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951765, + "link": null, + "locked": false, + "text": "SUR input\ninterfaces", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "_GBussNIOECwXRTM1Kf31", + "originalText": "SUR input\ninterfaces", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "u4qPje7fxSrWBwDN2yaTq", + "type": "arrow", + "x": 1548.6152423592166, + "y": -1495.5004135288068, + "width": 256.12310250404425, + "height": 1.6800943039161211, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOU", + "roundness": { + "type": 2 + }, + "seed": 648619199, + "version": 1261, + "versionNonce": 1103879199, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "eZTyMx2b5LRf2_SqInlag" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 256.12310250404425, + 1.6800943039161211 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "pwAUIdKYWUixxNt0uCWGS", + "focus": 0.017474329847641145, + "gap": 13.547377403569044 + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "eZTyMx2b5LRf2_SqInlag", + "type": "text", + "x": 1618.406850373934, + "y": -1519.6603663768487, + "width": 116.53988647460938, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOV", + "roundness": null, + "seed": 1556362463, + "version": 51, + "versionNonce": 1496550641, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951765, + "link": null, + "locked": false, + "text": "SUR output\ninterfaces", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "u4qPje7fxSrWBwDN2yaTq", + "originalText": "SUR output interfaces", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "YRXJmtsI2C0L6xpqcHw0V", + "type": "rectangle", + "x": 1280.782150669932, + "y": -1191.1059146402526, + "width": 252.85714285714312, + "height": 185, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOW", + "roundness": { + "type": 3 + }, + "seed": 424165631, + "version": 1122, + "versionNonce": 626589759, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "fjNSPx2VOSLhHICQjRSkV" + }, + { + "id": "cNv1bshJ-IgSYN5E65IbV", + "type": "arrow" + }, + { + "id": "b5adMDat6CIyu5LynF42j", + "type": "arrow" + }, + { + "id": "N7mdBTEFMeYGSUfOGz392", + "type": "arrow" + }, + { + "id": "sqT-yfZ6oq-lVHQdO4Dky", + "type": "arrow" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false + }, + { + "id": "fjNSPx2VOSLhHICQjRSkV", + "type": "text", + "x": 1292.7808286048512, + "y": -1186.1059146402526, + "width": 228.8597869873047, + "height": 175, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOX", + "roundness": null, + "seed": 498452767, + "version": 1517, + "versionNonce": 1106691793, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951765, + "link": null, + "locked": false, + "text": "Recorder\n\nThe recorder needs to\ncapture the inputs and\noutputs of the SUR as\nwell as it's internal\nstate.", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "YRXJmtsI2C0L6xpqcHw0V", + "originalText": "Recorder\n\nThe recorder needs to capture the inputs and outputs of the SUR as well as it's internal state.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "cNv1bshJ-IgSYN5E65IbV", + "type": "arrow", + "x": 1270.523921664796, + "y": -1080.0151329915325, + "width": 108.23477691577136, + "height": 384.3050673630041, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOY", + "roundness": { + "type": 2 + }, + "seed": 662523199, + "version": 1107, + "versionNonce": 1072472159, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951762, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -93.94906263005669, + -77.16221022014815 + ], + [ + -108.23477691577136, + -384.3050673630041 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "YRXJmtsI2C0L6xpqcHw0V", + "focus": -0.6664739184533185, + "gap": 10.258229005136855 + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "bar", + "elbowed": false + }, + { + "id": "b5adMDat6CIyu5LynF42j", + "type": "arrow", + "x": 1544.1196009996575, + "y": -1075.240961214672, + "width": 136.16082761266534, + "height": 391.63426044567586, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOZ", + "roundness": { + "type": 2 + }, + "seed": 1912556895, + "version": 1280, + "versionNonce": 2062768401, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951762, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 108.22053057393623, + -69.28608332039039 + ], + [ + 136.16082761266534, + -391.63426044567586 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "YRXJmtsI2C0L6xpqcHw0V", + "focus": 0.640083019926523, + "gap": 10.480307472582354 + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "bar", + "elbowed": false + }, + { + "id": "N7mdBTEFMeYGSUfOGz392", + "type": "arrow", + "x": 1401.603093063134, + "y": -1195.563555802852, + "width": 0.12048796663111716, + "height": 136.4395413620996, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOa", + "roundness": { + "type": 2 + }, + "seed": 2022459775, + "version": 1437, + "versionNonce": 1666661503, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951762, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -0.12048796663111716, + -136.4395413620996 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "YRXJmtsI2C0L6xpqcHw0V", + "focus": -0.043648690222373665, + "gap": 4.45764116259943 + }, + "endBinding": { + "elementId": "pwAUIdKYWUixxNt0uCWGS", + "focus": 0.057711534060484834, + "gap": 12.138531761016566 + }, + "startArrowhead": null, + "endArrowhead": "bar", + "elbowed": false + }, + { + "id": "czSCLA7Bcarype55eKwtt", + "type": "rectangle", + "x": 1282.032150669932, + "y": -903.4273432116834, + "width": 252.85714285714312, + "height": 135, + "angle": 0, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOb", + "roundness": { + "type": 3 + }, + "seed": 2019869087, + "version": 870, + "versionNonce": 237506289, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "WICAHAJmhV2E-Ec39luYY" + }, + { + "id": "sqT-yfZ6oq-lVHQdO4Dky", + "type": "arrow" + } + ], + "updated": 1754574951762, + "link": null, + "locked": false + }, + { + "id": "WICAHAJmhV2E-Ec39luYY", + "type": "text", + "x": 1290.4908353187184, + "y": -898.4273432116834, + "width": 235.9397735595703, + "height": 125, + "angle": 0, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOc", + "roundness": null, + "seed": 850998719, + "version": 1001, + "versionNonce": 100123825, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951765, + "link": null, + "locked": false, + "text": "Trace Record\n\nThis is the trace file of\nthe execution of the\nSUR.", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "czSCLA7Bcarype55eKwtt", + "originalText": "Trace Record\n\nThis is the trace file of the execution of the SUR.", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "sqT-yfZ6oq-lVHQdO4Dky", + "type": "arrow", + "x": 1414.2546184398861, + "y": -1002.4254851504438, + "width": 1.8304877196842426, + "height": 96.00899380406008, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "bOd", + "roundness": { + "type": 2 + }, + "seed": 1856644575, + "version": 1321, + "versionNonce": 688589009, + "isDeleted": false, + "boundElements": [], + "updated": 1754574951762, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 1.8304877196842426, + 96.00899380406008 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "YRXJmtsI2C0L6xpqcHw0V", + "focus": -0.04670148893590089, + "gap": 6.165134330753062 + }, + "endBinding": { + "elementId": "czSCLA7Bcarype55eKwtt", + "focus": 0.07022124264296642, + "gap": 6.1551895237262215 + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + } + ], + "appState": { + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#ffffff", + "lockedMultiSelections": {} + }, + "files": {} +} diff --git a/docs/features/recording-and-replay/_assets/record.png b/docs/features/recording-and-replay/_assets/record.png new file mode 100644 index 00000000000..e7ffe425a71 Binary files /dev/null and b/docs/features/recording-and-replay/_assets/record.png differ diff --git a/docs/features/recording-and-replay/_assets/replay.png b/docs/features/recording-and-replay/_assets/replay.png new file mode 100644 index 00000000000..0a574add1f5 Binary files /dev/null and b/docs/features/recording-and-replay/_assets/replay.png differ diff --git a/docs/features/recording-and-replay/_assets/reprocessing.png b/docs/features/recording-and-replay/_assets/reprocessing.png new file mode 100644 index 00000000000..ad77a9ea191 Binary files /dev/null and b/docs/features/recording-and-replay/_assets/reprocessing.png differ diff --git a/docs/features/recording-and-replay/_assets/trace.png b/docs/features/recording-and-replay/_assets/trace.png new file mode 100644 index 00000000000..100f79dd158 Binary files /dev/null and b/docs/features/recording-and-replay/_assets/trace.png differ diff --git a/docs/features/recording-and-replay/index.rst b/docs/features/recording-and-replay/index.rst new file mode 100644 index 00000000000..c9a65b96f3f --- /dev/null +++ b/docs/features/recording-and-replay/index.rst @@ -0,0 +1,274 @@ +.. + # ******************************************************************************* + # Copyright (c) 2025 Contributors to the Eclipse Foundation + # + # See the NOTICE file(s) distributed with this work for additional + # information regarding copyright ownership. + # + # This program and the accompanying materials are made available under the + # terms of the Apache License Version 2.0 which is available at + # https://www.apache.org/licenses/LICENSE-2.0 + # + # SPDX-License-Identifier: Apache-2.0 + # ******************************************************************************* + +.. _record_and_replay_feature: + +Recording and Tracing +##################### + +.. document:: Recording and Tracing + :id: doc__record_and_replay + :status: draft + :safety: tbd + :tags: feature_request + +Feature flag +============ + +To activate this feature, use the following feature flag: + +``experimental_record_and_replay`` + + +Abstract +======== + +Recording is a function allowing to record a trace, called a *Trace Record*, of +the activity of the system while it is executing. Replay is a function which +allows to inspect the activity of the system at a later point in time. +Reprocessing is a function which allows to execute the system using a Trace +Record as stimulus. Recording, replay or reprocessing can happen in different environments. +E.g., a trace can be recorded in the vehicle. It can be replayed on a developer's +machine for debugging. It can also be used in a compute backend as input for +large-scale functional validation and testing using reprocessing. + + +Motivation +========== + +This feature request is connected to the log and trace capabilities of mw. +Integration with existing functions and features will be discussed in a +follow-up meeting. + + + +Rationale +========= + +A Trace Record can be used it two different ways. It can be replayed to +inspect the time-resolved behavior of the recorded system (movie). This usage is +called *Replay* in the following. It can also be used as input to the same +system which has originally been recorded such that that system can be executed +and runtime-inspected. This usage is called *Reprocessing* in the following. +Let's take a close look at Recording, Replay, and Reprocessing. + +Recording +--------- +Recording is the activity of capturing the input, output, and possibly the +internal state of a defined system, the System Under Recording (SUR). + +|record| + +* **Input:** The blue box depicts all parts of the larger system which generates + inputs consumed by the SUR via its input interfaces. +* **System under Record:** The System Under Record (SUR), green box, is the + system of which the runtime behavior shall be recorded. It consumes its + inputs, executes on them, and generates its outputs. While executing, the SUR + might acquire internal state. +* **Recorder:** The Recorder is a function able to read inputs, outputs, and + possibly the internal state of the SUR and writes them time-ordered to a file, + the Trace Record. +* **Trace Record:** The Trace Record is the artifacts produced by the recorder, + yellow box. + + +Replay +------ + +Replay unfolds the Trace Record in time allowing to inspect the system behavior as +is has been recorded. + +|replay| + +* **Trace Record:** The Trace Record is the artifact created earlier and is the input + to "Replay". +* **Replay:** This is a function to read the Trace Record and unfold it in time to + inspect the system behavior and make the content of the Trace Record accessible + to tooling. + + +Reprocessing +------------ + +Reprocessing takes a Trace Recording and any compatible version of the SUR. The +SUR is started up and its usual inputs are replaced by the ones recorded in the +Trace Record. That way, reprocessing allows to execute the SUR again on recorded +inputs, making is possible to + +* inspect the runtime behavior of the SUR at any point in time, but also to +* investigate the behavior of another version of the SUR compared to what + version was used for recording. + +|reprocessing| + +To reproduce the internal behavior of the SUR when reprocessing, its original +internal state at the beginning of the recording must be available to properly +initialize the SUR. Consequently, the original internal state must be part of +the Trace Record. + +A trace can be recorded from Reprocessing in a similar way as from a SUR. That +Trace Record can be used for both use-cases, replay and reprocessing. + + +Specification +============= + +Given the discussion in section `Rational <#Rationale>`_ we arrive at the +following requirements. + + +Requirements for the recording of traces +---------------------------------------- + +* A Trace Record shall be able to capture all information necessary to later + initialize the SUR for reprocessing to the exact state it has when recording + started. + + .. note:: + A possible design would be to have a header part of the Trace Record which stores the + initialization information, followed by the trace recording. + + |trace| + +* Initialization information shall only be written once to the Trace Record. +* The time-gap between the recorded initialization information and the first + recorded sample of continuous trace data (from mw/com) shall be minimal. + + .. note:: + Ideally, the initialization information is recorded from execution step n-1 and + recording from mw/com start with execution step n. A more relaxed, but less + precise requirement, is that the recorded initialization information and the + recordings from mw/com shall *fit together*. That, however, is very context dependent + and might be an ill-posed problem for our scope. +* Activities (replace with the correct term from FEO denoting an **execution + unit**) shall be able and required to register (with a recording daemon) their + internal state needed to reestablish its state for initialization for + reprocessing. +* The Trace Record shall resemble the time-order of messages as seen by FEO at + execution time. (Do we need that requirement?) + + +Requirements for reprocessing of traces +--------------------------------------- + +* The S-CORE stack shall provide the possibility to execute in an artificial + environment in which inputs are provided from a Trace Record. This execution + mode is called **Reprocessing**. +* Reprocessing shall use already established communication interfaces. A + special reprocessing input path for data is to be avoided. +* On initialization of Reprocessing all activities, for which initialization + information is available in the Trace Record, shall be restored to that state. +* All output interfaces shall publish in reprocessing such that a **reprocessed + trace** can be recorded. + + + +Backwards Compatibility +======================= + +[Describe potential impact (especially including safety and security impacts) and severity on pre-existing platform/project elements.] + + +Security Impact +=============== + +[How could a malicious user take advantage of this new/modified feature?] + + .. note:: + If there are security concerns in relation to the CR, those concerns should be explicitly written out to make sure reviewers of the CR are aware of them. + +Which security requirements are affected or has to be changed? +Could the new/modified feature enable new threat scenarios? +Could the new/modified feature enable new attack paths? +Could the new/modified feature impact functional safety? +If applicable, which additional security measures must be implemented to mitigate the risk? + + .. note:: + Use Trust Boundary, Defense in Depth Analysis and/or Security Software Critically Analysis, + Vulnerability Analysis. + [Methods will be defined later in Process area Security Analysis] + These analyses may not be available at the time of creation of the feature (request) but content will be improved iteratively. + +Safety Impact +============= + +[How could the safety be impacted by the new/modified feature?] + + +Which safety requirements are affected or has to be changed? +Could the new/modified feature be a potential common cause or cascading failure initiator? +If applicable, which additional safety measures must be implemented to mitigate the risk? + + .. note:: + Use Dependency Failure Analysis and/or Safety Software Critically Analysis. + [Methods will be defined later in Process area Safety Analysis] + These analyses may not be available at the time of creation of the feature (request) but content will be improved iteratively. + +For new feature contributions: + +[What is the expected ASIL level?] + + +License Impact +============== + +[How could the copyright impacted by the license of the new contribution?] + + +How to Teach This +================= + +[How to teach users, new and experienced, how to apply the CR to their work.] + + .. note:: + For a CR that adds new functionality or changes behavior, it is helpful to include a section on how to teach users, new and experienced, how to apply the CR to their work. + + + +Rejected Ideas +============== + +[Why certain ideas that were brought while discussing this CR were not ultimately pursued.] + + .. note:: + Throughout the discussion of a CR, various ideas will be proposed which are not accepted. + Those rejected ideas should be recorded along with the reasoning as to why they were rejected. + This both helps record the thought process behind the final version of the CR as well as preventing people from bringing up the same rejected idea again in subsequent discussions. + In a way this section can be thought of as a breakout section of the Rationale section that is focused specifically on why certain ideas were not ultimately pursued. + + + +Open Issues +=========== + +[Any points that are still being decided/discussed.] + + .. note:: + While a CR is in draft, ideas can come up which warrant further discussion. + Those ideas should be recorded so people know that they are being thought about but do not have a concrete resolution. + This helps make sure all issues required for the CR to be ready for consideration are complete and reduces people duplicating prior discussion. + + + + +Footnotes +========= + +[A collection of footnotes cited in the CR, and a place to list non-inline hyperlink targets.] + + +.. |record| image:: _assets/record.png +.. |reprocessing| image:: _assets/reprocessing.png +.. |replay| image:: _assets/replay.png +.. |trace| image:: _assets/trace.png