1121 lines
31 KiB
Plaintext
1121 lines
31 KiB
Plaintext
{
|
||
"nodes": [
|
||
{
|
||
"id": "d8e2aff974909103",
|
||
"type": "group",
|
||
"x": -3200,
|
||
"y": 1720,
|
||
"width": 4740,
|
||
"height": 2520,
|
||
"label": "Review"
|
||
},
|
||
{
|
||
"id": "617997c10ecbe3aa",
|
||
"type": "group",
|
||
"x": -2580,
|
||
"y": -80,
|
||
"width": 3380,
|
||
"height": 1635,
|
||
"label": "Flagging workflow"
|
||
},
|
||
{
|
||
"id": "c15be9ac1d7a839f",
|
||
"type": "group",
|
||
"x": -640,
|
||
"y": 1980,
|
||
"width": 2040,
|
||
"height": 2220,
|
||
"color": "3",
|
||
"label": "Building the review"
|
||
},
|
||
{
|
||
"id": "7dca5bb0aec7f730",
|
||
"type": "group",
|
||
"x": -2560,
|
||
"y": -55,
|
||
"width": 1400,
|
||
"height": 1440,
|
||
"color": "1",
|
||
"label": "Flagging"
|
||
},
|
||
{
|
||
"id": "5b84916acc0a0362",
|
||
"type": "group",
|
||
"x": -2080,
|
||
"y": 2590,
|
||
"width": 1300,
|
||
"height": 1000,
|
||
"color": "4",
|
||
"label": "Report Filestructure"
|
||
},
|
||
{
|
||
"id": "41ae23152619c090",
|
||
"type": "group",
|
||
"x": -340,
|
||
"y": -50,
|
||
"width": 400,
|
||
"height": 730,
|
||
"label": "Notes"
|
||
},
|
||
{
|
||
"id": "45c0a03b2403c787",
|
||
"type": "group",
|
||
"x": -1090,
|
||
"y": -50,
|
||
"width": 450,
|
||
"height": 500,
|
||
"color": "6",
|
||
"label": "\"Blatant Plagiarism\""
|
||
},
|
||
{
|
||
"id": "b3e4ecac08c99999",
|
||
"type": "group",
|
||
"x": -1020,
|
||
"y": 780,
|
||
"width": 380,
|
||
"height": 570,
|
||
"color": "3",
|
||
"label": "Manual checking"
|
||
},
|
||
{
|
||
"id": "91f43be181153a2f",
|
||
"type": "text",
|
||
"text": "No report if no flags",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -2180,
|
||
"y": 1305,
|
||
"width": 240,
|
||
"height": 60,
|
||
"color": "1"
|
||
},
|
||
{
|
||
"id": "e155f81df7567675",
|
||
"type": "text",
|
||
"text": "Show flagged areas:\n\n- Using comments in code\n- Highlights in LaTeX",
|
||
"styleAttributes": {},
|
||
"x": -980,
|
||
"y": 800,
|
||
"width": 320,
|
||
"height": 140
|
||
},
|
||
{
|
||
"id": "cff5136ac15e7282",
|
||
"type": "text",
|
||
"text": "User edits % confidence for AI and/or confirms blatant plagiarism, by accepting or dismissing flagged areas",
|
||
"styleAttributes": {},
|
||
"x": -980,
|
||
"y": 1000,
|
||
"width": 320,
|
||
"height": 160
|
||
},
|
||
{
|
||
"id": "369b3ccbec406b84",
|
||
"type": "text",
|
||
"text": "User can add comments to each accepted flagged area",
|
||
"styleAttributes": {},
|
||
"x": -980,
|
||
"y": 1220,
|
||
"width": 320,
|
||
"height": 100
|
||
},
|
||
{
|
||
"id": "f70e12918d4a24f5",
|
||
"type": "text",
|
||
"text": "exports into a json, e.g. assuming that there are 5 exercises:\n```json\n[\n\t{\n\t\t\"student\": 1234567,\n\t\t\"per_exercise\": [\n\t\t\t{\n\t\t\t\t\"plagiarism\": {\n\t\t\t\t\t\"value\": 100.0,\n\t\t\t\t\t\"comment\": \"student plagiarized from s7654321 (this is added by user)\",\n\t\n\t\t\t\t},\n\t\t\t\t\"ai\": {\n\t\t\t\t\t\"value\": 10.00,\n\t\t\t\t\t\"comment\": \"ai-esque formatting\",\n\t\t\t\t}\n\t\t\t}\n\t\t\t// rest of exercises (first 100% plag, 10% ai, rest 0% PLAG, 100% ai)\n\t\t],\n\t\t\"overall\": {\n\t\t\t\"plagiarism\": {\n\t\t\t\t\"value\": 20.0, // student plagiarized on 1 exercise\n\t\t\t\t\"comment\": \"blah\"\n\t\t\t},\n\t\t\t\t\n\t\t\t\"ai\": {\n\t\t\t\t\"value\": 82.0 , // blatantly ai generated the rest + 1/10 * 1/5 * 100 = 2\n\t\t\t\t\"comment\":null\n\t\t\t}\n\t\t}\n\t\t\n\t}\n]\n```",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -420,
|
||
"y": 738,
|
||
"width": 870,
|
||
"height": 818
|
||
},
|
||
{
|
||
"id": "8b73e5aa1b99be1f",
|
||
"type": "text",
|
||
"text": "For each student",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -2040,
|
||
"y": -35,
|
||
"width": 222,
|
||
"height": 60
|
||
},
|
||
{
|
||
"id": "752136851c08fc83",
|
||
"type": "text",
|
||
"text": "Prepare for manual checking",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1978,
|
||
"y": 1115,
|
||
"width": 248,
|
||
"height": 100,
|
||
"color": "4"
|
||
},
|
||
{
|
||
"id": "b037f6b77d5f7127",
|
||
"type": "text",
|
||
"text": "Get latest Themis submission",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1860,
|
||
"y": 105,
|
||
"width": 260,
|
||
"height": 60
|
||
},
|
||
{
|
||
"id": "fedd34d7c9d8e05a",
|
||
"type": "text",
|
||
"text": "Run \"blatant\" plagiarism checks",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1990,
|
||
"y": 745,
|
||
"width": 260,
|
||
"height": 60,
|
||
"color": "6"
|
||
},
|
||
{
|
||
"id": "81b169838f131921",
|
||
"type": "text",
|
||
"text": ">[!Warning]\n>All of the features described in the data extraction segments are **only to be used as markers**, as none of them are objective!",
|
||
"styleAttributes": {},
|
||
"x": -320,
|
||
"y": 220,
|
||
"width": 360,
|
||
"height": 240
|
||
},
|
||
{
|
||
"id": "f1ddd6eba5309171",
|
||
"type": "text",
|
||
"text": "Cyan arrows mean **optional**, so just ideas for now.",
|
||
"x": -320,
|
||
"y": 460,
|
||
"width": 360,
|
||
"height": 193,
|
||
"color": "5"
|
||
},
|
||
{
|
||
"id": "cd65de7baebaa0ac",
|
||
"type": "text",
|
||
"text": ">[!Warning]\n>If we want this data to be non-problematic, we CANNOT be sending any of this to third-parties (so unlicensed AI checkers don't work)",
|
||
"styleAttributes": {},
|
||
"x": -320,
|
||
"y": -20,
|
||
"width": 360,
|
||
"height": 240
|
||
},
|
||
{
|
||
"id": "3f9f56795499e26f",
|
||
"type": "text",
|
||
"text": "Peer plagiarism check",
|
||
"styleAttributes": {},
|
||
"x": -1020,
|
||
"y": -35,
|
||
"width": 260,
|
||
"height": 80
|
||
},
|
||
{
|
||
"id": "54d156c855d043cf",
|
||
"type": "text",
|
||
"text": "Blatant AI usage check\n- check for prompt leftovers, i.e.:\n> Sure, let's...\n> Here's...\n... existing code ...\n- Special character usage in code (any UTF-8 character)",
|
||
"styleAttributes": {},
|
||
"x": -1080,
|
||
"y": 165,
|
||
"width": 410,
|
||
"height": 260
|
||
},
|
||
{
|
||
"id": "8babf02556920e0f",
|
||
"type": "text",
|
||
"text": ">[!Idea]\n>If we have a reliable way to determine AI usage, we can train our own in-house AI to check for this!",
|
||
"styleAttributes": {},
|
||
"x": -740,
|
||
"y": 520,
|
||
"width": 360,
|
||
"height": 180
|
||
},
|
||
{
|
||
"id": "4a4004f9eb0df102",
|
||
"type": "text",
|
||
"text": ">[!Idea]\nRun some sort of language analysis.\n>\n> - Check for style changes in language - formal in one paragraph, informal in other\n> - Check for correctness - no grammatical or punctuation mistakes are very unlikely without AI\n> - telltale sign -> ’ vs ' - latex doesn't differentiate\n> - style in latex -> spacing and excessive bolding are characteristic of AI\n",
|
||
"styleAttributes": {
|
||
"shape": null,
|
||
"textAlign": "center"
|
||
},
|
||
"x": -2550,
|
||
"y": 605,
|
||
"width": 530,
|
||
"height": 335
|
||
},
|
||
{
|
||
"id": "ba75ad6041650471",
|
||
"type": "text",
|
||
"text": ">[!Idea]\nExtract data from code\n> - Comment to code ratio\n> - Changes in style (indentation, // vs /* \\*/, bracket placement)\n> - Advanced language usage depending on course (e.g. using const or inline during PF implies that you know your C or you're using AI)\n\n",
|
||
"styleAttributes": {
|
||
"shape": null
|
||
},
|
||
"x": -1710,
|
||
"y": 638,
|
||
"width": 520,
|
||
"height": 302
|
||
},
|
||
{
|
||
"id": "f5acbdab9fb6755c",
|
||
"type": "text",
|
||
"text": "Get latest Brightspace submission",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -2210,
|
||
"y": 95,
|
||
"width": 260,
|
||
"height": 80
|
||
},
|
||
{
|
||
"id": "49fefa2c808800a0",
|
||
"type": "text",
|
||
"text": "OCR (latex) or use tex if provided",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -2220,
|
||
"y": 275,
|
||
"width": 280,
|
||
"height": 60
|
||
},
|
||
{
|
||
"id": "d130712eb1ba3ff9",
|
||
"type": "text",
|
||
"text": "Split code into \"blocks\" (functions and such)\n",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1860,
|
||
"y": 265,
|
||
"width": 340,
|
||
"height": 80
|
||
},
|
||
{
|
||
"id": "8ec144e7b743ff08",
|
||
"type": "text",
|
||
"text": "Preprocess code sections into `.tex` files to be included (with highlighting)",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": 250,
|
||
"y": 2140,
|
||
"width": 260,
|
||
"height": 120
|
||
},
|
||
{
|
||
"id": "a30b62a70efd5f99",
|
||
"type": "text",
|
||
"text": "Inject into the corresponding `.tex`es",
|
||
"styleAttributes": {},
|
||
"x": 250,
|
||
"y": 2340,
|
||
"width": 260,
|
||
"height": 100
|
||
},
|
||
{
|
||
"id": "1161285c0887cec2",
|
||
"type": "text",
|
||
"text": "Add submission to `build/insertable.tex` document:\n```tex\n% It is possible for one of these sections to not exist (if folder is empty or d.n.e.)\n\\section{S1234567}\n\\input{review_1234567/overall.tex}\n% optional review_1234567/score.json included here\n\n\\subsection{Code Review}\n\\input{review_1234567/build/code.tex}\n\n\n\\subsection{Document Review}\n\\input{review_1234567/build/document.tex}\n```",
|
||
"styleAttributes": {},
|
||
"x": -295,
|
||
"y": 3760,
|
||
"width": 820,
|
||
"height": 405
|
||
},
|
||
{
|
||
"id": "7d6ebe642a2f40cc",
|
||
"type": "text",
|
||
"text": "Python script automatically:",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": 310,
|
||
"y": 1995,
|
||
"width": 140,
|
||
"height": 120
|
||
},
|
||
{
|
||
"id": "0da48d99a3484f6d",
|
||
"type": "text",
|
||
"text": "add to ```<ASSIGNMENT_ROOT>/report.tex```\n```tex\n% preamble\n\\begin{document}\n\n% intro\n\\section{Introduction}\nThis document is a comprehensive report of blah blah blah blah.\n\n% reports\n% s1234567\n\\input{reviews/review_1234567/build/insertable.tex}\n% other individual reports will go here\n\\end{document}\n```",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": 605,
|
||
"y": 3773,
|
||
"width": 530,
|
||
"height": 380
|
||
},
|
||
{
|
||
"id": "c40385532044360f",
|
||
"type": "text",
|
||
"text": "Consolidate document sections into a `build/document.tex`\n```tex\n%% submittable 1 %%\n\\subsubsection{Section - Introduction} % the name will be added automatically from the filename\n\n% latex file - document/1_introduction/student.tex\n\\begin{student}\nI am the student. This is \\hl{\\textbf{AI Generated}: Generated by Artifical Intelligence.}\n\\end{student}\n\n% latex file - document/1_introduction/comment.tex\n\\begin{comment}\nJudging by the completely unnecessary definition, this seems to be AI generated\n\\end{comment}\n\n% optional, data sourced from score.json, all names sourced from config.json\n\\subsubsection{Metrics}\n\\begin{center}\n\\begin{tabular}{|c|c|}\n\\hline\nMetric & Percentage \\\\\n\\hline\nPeer Plagiarism & 20\\% \\\\\nAI & 82\\%\n\n\\end{tabular}\n\\end{center}\n\n\\begin{comment}\n\\textbf{Peer Plagiarism} % also sourced from config.json\nblah\n% \\textbf{AI} this doesn't exist since \t\"comment\":null, name sourced from config.json\n\n\\end{comment}\n```",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": 380,
|
||
"y": 2560,
|
||
"width": 980,
|
||
"height": 960
|
||
},
|
||
{
|
||
"id": "c8603366bc48c5a8",
|
||
"type": "text",
|
||
"text": "Consolidate code sections into a `build/code.tex`:\n```tex\n%% submittable 1 %%\n\\subsubsection{Submittable 1} % value from config.json\n\n% Code file (code/1.py)\n\\begin{lstlisting} % highlighting will be added automatically based on file extension\n\nprint(\"not ai\")\n(*@ \\hl{print(\"ai)} @*) % <plag> print(\"ai\") </plag>\n\n\\end{lstlisting}\n\n% Latex file (code/1.tex)\n\\begin{comment} % will be enclosed in comment environment automatically\nThe user clearly used AI in the highlighted line\n\\end{comment}\n\n% optional, data sourced from score.json, all names sourced from config.json\n\\subsubsection{Metrics} \n\\begin{center}\n\\begin{tabular}{|c|c|}\n\\hline\nMetric & Percentage \\\\\n\\hline\nPeer Plagiarism & 20\\% \\\\ % config.json\nAI & 82\\% % config.json\n\n\\end{tabular}\n\\end{center}\n\n\\begin{comment}\n\\textbf{Peer Plagiarism} % also sourced from config.json\nblah\n% \\textbf{AI} this doesn't exist since \t\"comment\":null, name sourced from config.json\n\n\\end{comment}\n```",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -620,
|
||
"y": 2560,
|
||
"width": 945,
|
||
"height": 960
|
||
},
|
||
{
|
||
"id": "c38053aa7c2aad55",
|
||
"type": "text",
|
||
"text": "`<ASSIGNMENT_ROOT>/`",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1713,
|
||
"y": 2630,
|
||
"width": 267,
|
||
"height": 60
|
||
},
|
||
{
|
||
"id": "718c00c9f0b2ae02",
|
||
"type": "text",
|
||
"text": "`score.json`",
|
||
"styleAttributes": {
|
||
"border": "dashed",
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1866,
|
||
"y": 2870,
|
||
"width": 126,
|
||
"height": 60
|
||
},
|
||
{
|
||
"id": "d361b6a7e02f5ce8",
|
||
"type": "text",
|
||
"text": "`review_<studentNum>/`",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1680,
|
||
"y": 2870,
|
||
"width": 200,
|
||
"height": 60,
|
||
"color": "6"
|
||
},
|
||
{
|
||
"id": "e8bb990cf4d5abbe",
|
||
"type": "text",
|
||
"text": "`overall.tex`\nThis contains overall comments and scores",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1695,
|
||
"y": 3025,
|
||
"width": 231,
|
||
"height": 100,
|
||
"color": "5"
|
||
},
|
||
{
|
||
"id": "3b8351d46238b500",
|
||
"type": "text",
|
||
"text": "`code/`",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1920,
|
||
"y": 3030,
|
||
"width": 108,
|
||
"height": 40
|
||
},
|
||
{
|
||
"id": "2d3d8299d2940c91",
|
||
"type": "text",
|
||
"text": "numbered folders per Themis submittable \n> 1/, 2/, 3/",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1996,
|
||
"y": 3145,
|
||
"width": 260,
|
||
"height": 100,
|
||
"color": "6"
|
||
},
|
||
{
|
||
"id": "74e3b31fbf552352",
|
||
"type": "text",
|
||
"text": "`score.json`",
|
||
"styleAttributes": {
|
||
"border": "dashed",
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1680,
|
||
"y": 3165,
|
||
"width": 126,
|
||
"height": 60
|
||
},
|
||
{
|
||
"id": "1a6ef38ff82e7f26",
|
||
"type": "text",
|
||
"text": "Corresponding latex file to be included as a comment\n\n> 1.tex, 2.tex, 3.tex",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1760,
|
||
"y": 3340,
|
||
"width": 260,
|
||
"height": 140,
|
||
"color": "5"
|
||
},
|
||
{
|
||
"id": "426fecaf63cd032e",
|
||
"type": "text",
|
||
"text": "Suspicious text should be highlighted here using `\\hl{text}`\n\n (if you want highlighting)",
|
||
"styleAttributes": {
|
||
"border": "dashed",
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1840,
|
||
"y": 3650,
|
||
"width": 420,
|
||
"height": 140
|
||
},
|
||
{
|
||
"id": "2d7a0b5a695bb9dd",
|
||
"type": "text",
|
||
"text": "Problematic sections (OCR or manual review)\n\n> student.tex\n\nIncluding original text",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1445,
|
||
"y": 3380,
|
||
"width": 249,
|
||
"height": 180,
|
||
"color": "5"
|
||
},
|
||
{
|
||
"id": "d363ae68077580c2",
|
||
"type": "text",
|
||
"text": "Numbered, snake case-labelled problematic sections (exercises) in document (OCR or manual review)\n>1_exercise_1/",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1315,
|
||
"y": 3150,
|
||
"width": 300,
|
||
"height": 160,
|
||
"color": "6"
|
||
},
|
||
{
|
||
"id": "af31afa6fefe62b9",
|
||
"type": "text",
|
||
"text": "Comments for problematic section\n> comment.tex",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1165,
|
||
"y": 3405,
|
||
"width": 340,
|
||
"height": 100,
|
||
"color": "5"
|
||
},
|
||
{
|
||
"id": "18af4a0953772fca",
|
||
"type": "text",
|
||
"text": "`score.json`",
|
||
"styleAttributes": {
|
||
"border": "dashed",
|
||
"textAlign": "center"
|
||
},
|
||
"x": -951,
|
||
"y": 3200,
|
||
"width": 126,
|
||
"height": 60
|
||
},
|
||
{
|
||
"id": "fec21ca7aacbdb86",
|
||
"type": "text",
|
||
"text": "`reviews/`",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1648,
|
||
"y": 2730,
|
||
"width": 136,
|
||
"height": 60
|
||
},
|
||
{
|
||
"id": "bf5ee292546142fe",
|
||
"type": "text",
|
||
"text": "`build/`\nwill house `code.tex`, `review.tex` and `insertable.tex`",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1404,
|
||
"y": 2840,
|
||
"width": 260,
|
||
"height": 120
|
||
},
|
||
{
|
||
"id": "d4fffdc078b4aaeb",
|
||
"type": "text",
|
||
"text": "`document/`",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1420,
|
||
"y": 3035,
|
||
"width": 146,
|
||
"height": 40
|
||
},
|
||
{
|
||
"id": "71ba916ec96ad1be",
|
||
"type": "text",
|
||
"text": "Things that user should fill in/annotate are marked in **CYAN**",
|
||
"styleAttributes": {
|
||
"border": "invisible"
|
||
},
|
||
"x": -1040,
|
||
"y": 2600,
|
||
"width": 260,
|
||
"height": 100
|
||
},
|
||
{
|
||
"id": "19540bd3c895f9bc",
|
||
"type": "text",
|
||
"text": "Numbered flagged/suspicious exercises + file extension for highlighting\n> 1.c, 2.c, 3.c",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -2050,
|
||
"y": 3330,
|
||
"width": 260,
|
||
"height": 160,
|
||
"color": "5"
|
||
},
|
||
{
|
||
"id": "b6f9319ee8e11549",
|
||
"type": "text",
|
||
"text": "To highlight specific parts in the final document, surround the section in `<plag>`.\nE.g.:\n```python\n<plag> print(\"definitely not plagiarized\") </plag>\n```",
|
||
"styleAttributes": {
|
||
"textAlign": "center",
|
||
"border": "dashed"
|
||
},
|
||
"x": -2720,
|
||
"y": 3320,
|
||
"width": 600,
|
||
"height": 180
|
||
},
|
||
{
|
||
"id": "96defc0b2d99568c",
|
||
"type": "text",
|
||
"text": "> [!OPTIONAL]\n> The folders marked in **PURPLE** can contain a score.json file, which can be imported from the flagging toolkit or created manually and will be included as shown in the diagram on the right\n\n```json\n\"plagiarism\": {\n\t\"value\": 20.0, // student plagiarized on 1 exercise\n\t\"comment\": \"blah\"\n},\n\t\n\"ai\": {\n\t\"value\": 82.0 , // blatantly ai generated the rest + 1/10 * 1/5 * 100 = 2\n\t\"comment\":null\n}\n```",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1812,
|
||
"y": 2055,
|
||
"width": 770,
|
||
"height": 380
|
||
},
|
||
{
|
||
"id": "ccd335e21a1d13a0",
|
||
"type": "text",
|
||
"text": "can be exported into the report",
|
||
"styleAttributes": {},
|
||
"x": 510,
|
||
"y": 1117,
|
||
"width": 260,
|
||
"height": 60,
|
||
"color": "4"
|
||
},
|
||
{
|
||
"id": "bc5754540847ddbf",
|
||
"type": "text",
|
||
"text": "`config.json`\nIf doesn't exist, defaults will be loaded",
|
||
"styleAttributes": {
|
||
"border": "dashed",
|
||
"textAlign": "center"
|
||
},
|
||
"x": -2050,
|
||
"y": 2610,
|
||
"width": 260,
|
||
"height": 100
|
||
},
|
||
{
|
||
"id": "7c4588ca6e195422",
|
||
"type": "text",
|
||
"text": "`report.tex`\nfull, consolidated report",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -1347,
|
||
"y": 2620,
|
||
"width": 260,
|
||
"height": 80
|
||
},
|
||
{
|
||
"id": "2c91857ebd9d843d",
|
||
"type": "text",
|
||
"text": "The defaults and format for this are listed below:\n\n```json\n{\n\tstyle: {// Code subsection name\n\t\t\"per_submittable\": \"Submittable $num\", // Can use variable $num for automatic numbering\n\t\t// Or provide a list if you want specific exercise names\n\t\t\n\t\t// Document section name\n\t\t\"per_section\": \"Section - $section\", // same as above, but using $section\n\t\t// e.g. 1_introduction_robust.tex -> $section = \"Introduction Robust\"\n\t\n\t\t// optional metrics table subsection\n\t\t// you can leave this as None or omit it (table will not show even if score.json is there)\n\t\t\"table\": {\n\t\t\t\"heading\": \"Metrics\",\n\t\t\t\"key\": \"Metric\",\n\t\t\t\"value\": \"Percentage\",\n\t\t\t\"metrics\": [\"Peer Plagiarism\", \"AI\"] // be careful with the ordering here\n\t\t}\n\t}\n\t// TODO: add specific template parsing to automate the section splitting\n}\n```",
|
||
"styleAttributes": {
|
||
"textAlign": "center"
|
||
},
|
||
"x": -3120,
|
||
"y": 2330,
|
||
"width": 940,
|
||
"height": 560
|
||
},
|
||
{
|
||
"id": "9ca8a0ce1a528850",
|
||
"type": "text",
|
||
"text": "Section folders should be named as such:\n`<number>_name_in_snake_case/`",
|
||
"styleAttributes": {
|
||
"textAlign": "center",
|
||
"border": "dashed"
|
||
},
|
||
"x": -1271,
|
||
"y": 3680,
|
||
"width": 320,
|
||
"height": 80
|
||
},
|
||
{
|
||
"id": "f7cabd512e3cadf6",
|
||
"type": "text",
|
||
"text": "Assume student submitted:\n- `1.py` on Themis\n- `some.pdf` with an Introduction section\n\nThat means that the following files have been created and populated:\n- `code/1.tex` containing the student's code (highlighted with `<plag>` tags)\n- `document/1_introduction/`\n\t- `student.tex`, where the student's content resides (highlighted bad sections)\n\t- `comment`, user's notes about the student's content",
|
||
"styleAttributes": {
|
||
"textAlign": null,
|
||
"border": "invisible"
|
||
},
|
||
"x": -620,
|
||
"y": 2000,
|
||
"width": 760,
|
||
"height": 360
|
||
}
|
||
],
|
||
"edges": [
|
||
{
|
||
"id": "8e8d7ef0e80c046b",
|
||
"styleAttributes": {},
|
||
"fromNode": "f5acbdab9fb6755c",
|
||
"fromSide": "bottom",
|
||
"toNode": "49fefa2c808800a0",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "92ed4f6045968900",
|
||
"styleAttributes": {},
|
||
"fromNode": "8b73e5aa1b99be1f",
|
||
"fromSide": "bottom",
|
||
"toNode": "b037f6b77d5f7127",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "3b77235037bc5066",
|
||
"styleAttributes": {},
|
||
"fromNode": "b037f6b77d5f7127",
|
||
"fromSide": "bottom",
|
||
"toNode": "d130712eb1ba3ff9",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "5df1d17014d43944",
|
||
"styleAttributes": {},
|
||
"fromNode": "e155f81df7567675",
|
||
"fromSide": "bottom",
|
||
"toNode": "cff5136ac15e7282",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "cbecdaa0e3be1f77",
|
||
"styleAttributes": {},
|
||
"fromNode": "cff5136ac15e7282",
|
||
"fromSide": "bottom",
|
||
"toNode": "369b3ccbec406b84",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "64137ceb549cf906",
|
||
"styleAttributes": {},
|
||
"fromNode": "752136851c08fc83",
|
||
"fromSide": "left",
|
||
"toNode": "91f43be181153a2f",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "42fc6cb48ce69029",
|
||
"styleAttributes": {},
|
||
"fromNode": "7dca5bb0aec7f730",
|
||
"fromSide": "right",
|
||
"toNode": "b3e4ecac08c99999",
|
||
"toSide": "left"
|
||
},
|
||
{
|
||
"id": "e3b40cdd7188d43d",
|
||
"styleAttributes": {
|
||
"path": "short-dashed"
|
||
},
|
||
"fromNode": "d130712eb1ba3ff9",
|
||
"fromSide": "bottom",
|
||
"toNode": "ba75ad6041650471",
|
||
"toSide": "top",
|
||
"color": "5"
|
||
},
|
||
{
|
||
"id": "64d329645068a903",
|
||
"styleAttributes": {
|
||
"path": "short-dashed"
|
||
},
|
||
"fromNode": "49fefa2c808800a0",
|
||
"fromSide": "bottom",
|
||
"toNode": "4a4004f9eb0df102",
|
||
"toSide": "top",
|
||
"color": "5"
|
||
},
|
||
{
|
||
"id": "83a98839dcf7dd27",
|
||
"styleAttributes": {
|
||
"path": "short-dashed"
|
||
},
|
||
"fromNode": "4a4004f9eb0df102",
|
||
"fromSide": "bottom",
|
||
"toNode": "752136851c08fc83",
|
||
"toSide": "top",
|
||
"color": "5",
|
||
"label": "- % confidence\n- flag"
|
||
},
|
||
{
|
||
"id": "d3e85094b4185281",
|
||
"styleAttributes": {
|
||
"path": "short-dashed"
|
||
},
|
||
"fromNode": "ba75ad6041650471",
|
||
"fromSide": "bottom",
|
||
"toNode": "752136851c08fc83",
|
||
"toSide": "top",
|
||
"color": "5",
|
||
"label": "- % confidence\n- flag"
|
||
},
|
||
{
|
||
"id": "69b329f74e07784e",
|
||
"styleAttributes": {},
|
||
"fromNode": "49fefa2c808800a0",
|
||
"fromSide": "bottom",
|
||
"toNode": "fedd34d7c9d8e05a",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "0f376a018c40ae7d",
|
||
"styleAttributes": {},
|
||
"fromNode": "fedd34d7c9d8e05a",
|
||
"fromSide": "bottom",
|
||
"toNode": "752136851c08fc83",
|
||
"toSide": "top",
|
||
"color": "4"
|
||
},
|
||
{
|
||
"id": "0786e62aefcb8984",
|
||
"styleAttributes": {},
|
||
"fromNode": "d130712eb1ba3ff9",
|
||
"fromSide": "bottom",
|
||
"toNode": "fedd34d7c9d8e05a",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "25e364e83394d914",
|
||
"styleAttributes": {},
|
||
"fromNode": "8b73e5aa1b99be1f",
|
||
"fromSide": "bottom",
|
||
"toNode": "f5acbdab9fb6755c",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "b4b319007241ad48",
|
||
"styleAttributes": {
|
||
"path": null
|
||
},
|
||
"fromNode": "3f9f56795499e26f",
|
||
"fromSide": "bottom",
|
||
"toNode": "54d156c855d043cf",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "8d03658903c6fb5d",
|
||
"styleAttributes": {
|
||
"path": "short-dashed"
|
||
},
|
||
"fromNode": "e155f81df7567675",
|
||
"fromSide": "right",
|
||
"toNode": "8babf02556920e0f",
|
||
"toSide": "bottom",
|
||
"color": "5"
|
||
},
|
||
{
|
||
"id": "f22c0f9a55c6e610",
|
||
"styleAttributes": {},
|
||
"fromNode": "b3e4ecac08c99999",
|
||
"fromSide": "right",
|
||
"toNode": "f70e12918d4a24f5",
|
||
"toSide": "left"
|
||
},
|
||
{
|
||
"id": "3a703beef796d867",
|
||
"styleAttributes": {},
|
||
"fromNode": "f70e12918d4a24f5",
|
||
"fromSide": "right",
|
||
"toNode": "ccd335e21a1d13a0",
|
||
"toSide": "left"
|
||
},
|
||
{
|
||
"id": "8d0bdc9968d633a0",
|
||
"styleAttributes": {},
|
||
"fromNode": "7d6ebe642a2f40cc",
|
||
"fromSide": "bottom",
|
||
"toNode": "8ec144e7b743ff08",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "b4ced4efc3627232",
|
||
"styleAttributes": {},
|
||
"fromNode": "8ec144e7b743ff08",
|
||
"fromSide": "bottom",
|
||
"toNode": "a30b62a70efd5f99",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "670d7d2200efa9f9",
|
||
"styleAttributes": {},
|
||
"fromNode": "a30b62a70efd5f99",
|
||
"fromSide": "bottom",
|
||
"toNode": "c8603366bc48c5a8",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "347cec7ec906aecd",
|
||
"styleAttributes": {},
|
||
"fromNode": "a30b62a70efd5f99",
|
||
"fromSide": "bottom",
|
||
"toNode": "c40385532044360f",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "5dcc6dc54efb340c",
|
||
"styleAttributes": {},
|
||
"fromNode": "c8603366bc48c5a8",
|
||
"fromSide": "bottom",
|
||
"toNode": "1161285c0887cec2",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "c8dade30befae4d8",
|
||
"styleAttributes": {},
|
||
"fromNode": "c40385532044360f",
|
||
"fromSide": "bottom",
|
||
"toNode": "1161285c0887cec2",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "61997437018005a6",
|
||
"styleAttributes": {},
|
||
"fromNode": "5b84916acc0a0362",
|
||
"fromSide": "right",
|
||
"toNode": "c15be9ac1d7a839f",
|
||
"toSide": "left"
|
||
},
|
||
{
|
||
"id": "314f2e0927224dc8",
|
||
"styleAttributes": {},
|
||
"fromNode": "d361b6a7e02f5ce8",
|
||
"fromSide": "bottom",
|
||
"toNode": "3b8351d46238b500",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "82d03327d8c56a9a",
|
||
"styleAttributes": {},
|
||
"fromNode": "d361b6a7e02f5ce8",
|
||
"fromSide": "bottom",
|
||
"toNode": "d4fffdc078b4aaeb",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "3184b78bd024f346",
|
||
"styleAttributes": {},
|
||
"fromNode": "3b8351d46238b500",
|
||
"fromSide": "bottom",
|
||
"toNode": "2d3d8299d2940c91",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "db8d91187dbf68f1",
|
||
"styleAttributes": {},
|
||
"fromNode": "2d3d8299d2940c91",
|
||
"fromSide": "bottom",
|
||
"toNode": "19540bd3c895f9bc",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "b8af26de9d987134",
|
||
"styleAttributes": {},
|
||
"fromNode": "2d3d8299d2940c91",
|
||
"fromSide": "bottom",
|
||
"toNode": "1a6ef38ff82e7f26",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "92ef33139ea3ea09",
|
||
"styleAttributes": {},
|
||
"fromNode": "b6f9319ee8e11549",
|
||
"fromSide": "right",
|
||
"toNode": "19540bd3c895f9bc",
|
||
"toSide": "left"
|
||
},
|
||
{
|
||
"id": "6b0cb3af5e48f939",
|
||
"styleAttributes": {},
|
||
"fromNode": "d361b6a7e02f5ce8",
|
||
"fromSide": "bottom",
|
||
"toNode": "e8bb990cf4d5abbe",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "5af6fd68d1b39be5",
|
||
"styleAttributes": {},
|
||
"fromNode": "426fecaf63cd032e",
|
||
"fromSide": "top",
|
||
"toNode": "2d7a0b5a695bb9dd",
|
||
"toSide": "bottom"
|
||
},
|
||
{
|
||
"id": "05fe4272caa0510d",
|
||
"styleAttributes": {},
|
||
"fromNode": "d4fffdc078b4aaeb",
|
||
"fromSide": "bottom",
|
||
"toNode": "d363ae68077580c2",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "7a92fa4714516fe9",
|
||
"styleAttributes": {},
|
||
"fromNode": "d363ae68077580c2",
|
||
"fromSide": "bottom",
|
||
"toNode": "2d7a0b5a695bb9dd",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "6180db98bc8ccb5e",
|
||
"styleAttributes": {},
|
||
"fromNode": "d363ae68077580c2",
|
||
"fromSide": "bottom",
|
||
"toNode": "af31afa6fefe62b9",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "6aa557c3b9f74bdb",
|
||
"styleAttributes": {},
|
||
"fromNode": "d361b6a7e02f5ce8",
|
||
"fromSide": "left",
|
||
"toNode": "718c00c9f0b2ae02",
|
||
"toSide": "right"
|
||
},
|
||
{
|
||
"id": "ca6c404763e9ec3c",
|
||
"styleAttributes": {},
|
||
"fromNode": "d361b6a7e02f5ce8",
|
||
"fromSide": "right",
|
||
"toNode": "bf5ee292546142fe",
|
||
"toSide": "left"
|
||
},
|
||
{
|
||
"id": "ec0ee9228c7815a9",
|
||
"styleAttributes": {},
|
||
"fromNode": "2d3d8299d2940c91",
|
||
"fromSide": "right",
|
||
"toNode": "74e3b31fbf552352",
|
||
"toSide": "left"
|
||
},
|
||
{
|
||
"id": "c79ea6ea84bd1c11",
|
||
"styleAttributes": {},
|
||
"fromNode": "d363ae68077580c2",
|
||
"fromSide": "right",
|
||
"toNode": "18af4a0953772fca",
|
||
"toSide": "left"
|
||
},
|
||
{
|
||
"id": "6a52caa5ca6d9526",
|
||
"styleAttributes": {},
|
||
"fromNode": "1161285c0887cec2",
|
||
"fromSide": "right",
|
||
"toNode": "0da48d99a3484f6d",
|
||
"toSide": "left"
|
||
},
|
||
{
|
||
"id": "ba00338272affff1",
|
||
"styleAttributes": {},
|
||
"fromNode": "96defc0b2d99568c",
|
||
"fromSide": "bottom",
|
||
"toNode": "5b84916acc0a0362",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "2e5c34d59036e16d",
|
||
"styleAttributes": {},
|
||
"fromNode": "fec21ca7aacbdb86",
|
||
"fromSide": "bottom",
|
||
"toNode": "d361b6a7e02f5ce8",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "758abca1dce0f6fd",
|
||
"styleAttributes": {},
|
||
"fromNode": "c38053aa7c2aad55",
|
||
"fromSide": "bottom",
|
||
"toNode": "fec21ca7aacbdb86",
|
||
"toSide": "top"
|
||
},
|
||
{
|
||
"id": "6745de2971525d94",
|
||
"styleAttributes": {},
|
||
"fromNode": "c38053aa7c2aad55",
|
||
"fromSide": "right",
|
||
"toNode": "7c4588ca6e195422",
|
||
"toSide": "left"
|
||
},
|
||
{
|
||
"id": "0a7fa6fd1305d008",
|
||
"styleAttributes": {},
|
||
"fromNode": "c38053aa7c2aad55",
|
||
"fromSide": "left",
|
||
"toNode": "bc5754540847ddbf",
|
||
"toSide": "right"
|
||
},
|
||
{
|
||
"id": "fd4dfc3bb23055d6",
|
||
"styleAttributes": {},
|
||
"fromNode": "2c91857ebd9d843d",
|
||
"fromSide": "right",
|
||
"toNode": "bc5754540847ddbf",
|
||
"toSide": "left"
|
||
}
|
||
],
|
||
"metadata": {}
|
||
} |