{"type":"last-prompt","leafUuid":"36431421-0c82-481e-82fd-f6a806be0438","sessionId":"613968b7-e9f7-49a3-9f9b-02cdef17e0c7"}
{"type":"mode","mode":"normal","sessionId":"613968b7-e9f7-49a3-9f9b-02cdef17e0c7"}
{"type":"permission-mode","permissionMode":"default","sessionId":"613968b7-e9f7-49a3-9f9b-02cdef17e0c7"}
{"parentUuid":null,"isSidechain":false,"attachment":{"type":"hook_success","hookName":"SessionStart:startup","toolUseID":"24467bbc-8587-4e3f-8fd5-28667e9169f9","hookEvent":"SessionStart","content":"","stdout":"{\"systemMessage\":\"\\n\\nEntire CLI will link this conversation to your next commit.\"}\n","stderr":"","exitCode":0,"command":"entire hooks claude-code session-start","durationMs":272},"type":"attachment","uuid":"1d82c768-4a32-468d-8e07-badf20598f43","timestamp":"2026-06-17T14:47:51.791Z","userType":"external","entrypoint":"cli","cwd":"/Users/jan/prg/ClusterCockpit/cc-backend","sessionId":"613968b7-e9f7-49a3-9f9b-02cdef17e0c7","version":"2.1.179","gitBranch":"feature/517-make-legal-links-configurable"}
{"parentUuid":"1d82c768-4a32-468d-8e07-badf20598f43","isSidechain":false,"attachment":{"type":"hook_system_message","content":"\n\nEntire CLI will link this conversation to your next commit.","hookName":"SessionStart:startup","toolUseID":"24467bbc-8587-4e3f-8fd5-28667e9169f9","hookEvent":"SessionStart"},"type":"attachment","uuid":"36431421-0c82-481e-82fd-f6a806be0438","timestamp":"2026-06-17T14:47:51.791Z","userType":"external","entrypoint":"cli","cwd":"/Users/jan/prg/ClusterCockpit/cc-backend","sessionId":"613968b7-e9f7-49a3-9f9b-02cdef17e0c7","version":"2.1.179","gitBranch":"feature/517-make-legal-links-configurable"}
{"type":"file-history-snapshot","messageId":"86aac03e-c1d2-4be9-8585-baa7ac62f3aa","snapshot":{"messageId":"86aac03e-c1d2-4be9-8585-baa7ac62f3aa","trackedFileBackups":{},"timestamp":"2026-06-17T14:48:19.895Z"},"isSnapshotUpdate":false}
{"parentUuid":"36431421-0c82-481e-82fd-f6a806be0438","isSidechain":false,"promptId":"07668d9c-ca98-4096-9250-1f34a47771c6","type":"user","message":{"role":"user","content":"Caveat: The messages below were generated by the user while running local commands. DO NOT respond to these messages or otherwise consider them in your response unless the user explicitly asks you to."},"isMeta":true,"uuid":"4660f0e2-16f8-406f-a2dd-58d3c59858d0","timestamp":"2026-06-17T14:48:19.894Z","userType":"external","entrypoint":"cli","cwd":"/Users/jan/prg/ClusterCockpit/cc-backend","sessionId":"613968b7-e9f7-49a3-9f9b-02cdef17e0c7","version":"2.1.179","gitBranch":"feature/517-make-legal-links-configurable"}
{"parentUuid":"4660f0e2-16f8-406f-a2dd-58d3c59858d0","isSidechain":false,"promptId":"07668d9c-ca98-4096-9250-1f34a47771c6","type":"user","message":{"role":"user","content":"/model\n model\n "},"uuid":"86aac03e-c1d2-4be9-8585-baa7ac62f3aa","timestamp":"2026-06-17T14:48:19.894Z","userType":"external","entrypoint":"cli","cwd":"/Users/jan/prg/ClusterCockpit/cc-backend","sessionId":"613968b7-e9f7-49a3-9f9b-02cdef17e0c7","version":"2.1.179","gitBranch":"feature/517-make-legal-links-configurable"}
{"parentUuid":"86aac03e-c1d2-4be9-8585-baa7ac62f3aa","isSidechain":false,"promptId":"07668d9c-ca98-4096-9250-1f34a47771c6","type":"user","message":{"role":"user","content":"Set model to \u001b[1mOpus 4.8 (1M context)\u001b[22m and saved as your default for new sessions"},"uuid":"11facadf-7252-45a9-ad3f-eae1b37c7a3c","timestamp":"2026-06-17T14:48:19.894Z","userType":"external","entrypoint":"cli","cwd":"/Users/jan/prg/ClusterCockpit/cc-backend","sessionId":"613968b7-e9f7-49a3-9f9b-02cdef17e0c7","version":"2.1.179","gitBranch":"feature/517-make-legal-links-configurable"}
{"type":"file-history-snapshot","messageId":"f19ce5d7-d05e-4aad-8153-abb5efc506f9","snapshot":{"messageId":"f19ce5d7-d05e-4aad-8153-abb5efc506f9","trackedFileBackups":{},"timestamp":"2026-06-17T14:51:07.588Z"},"isSnapshotUpdate":false}
{"parentUuid":"11facadf-7252-45a9-ad3f-eae1b37c7a3c","isSidechain":false,"promptId":"134972a0-bfb3-4f1d-ab0c-4ad95b8d4679","type":"user","message":{"role":"user","content":"Currently the legal pages imprint and privacy are rendered from templates which can be overwritten by placing files into ./var folder. There should be another option to specify URLs in the configuration to directly link to external pages. There is a patch @make-footer-links-configurable.patch with a proposal. Analyse the options and propose a plan, you may take into account the patch."},"uuid":"f19ce5d7-d05e-4aad-8153-abb5efc506f9","timestamp":"2026-06-17T14:51:06.662Z","permissionMode":"plan","promptSource":"typed","userType":"external","entrypoint":"cli","cwd":"/Users/jan/prg/ClusterCockpit/cc-backend","sessionId":"613968b7-e9f7-49a3-9f9b-02cdef17e0c7","version":"2.1.179","gitBranch":"feature/517-make-legal-links-configurable","slug":"currently-the-legal-pages-tender-kernighan"}
{"parentUuid":"f19ce5d7-d05e-4aad-8153-abb5efc506f9","isSidechain":false,"attachment":{"type":"file","filename":"/Users/jan/prg/ClusterCockpit/cc-backend/make-footer-links-configurable.patch","content":{"type":"text","file":{"filePath":"/Users/jan/prg/ClusterCockpit/cc-backend/make-footer-links-configurable.patch","content":"diff --git a/configs/config.json b/configs/config.json\nindex 6b654e4f..f2cfdf7c 100644\n--- a/configs/config.json\n+++ b/configs/config.json\n@@ -18,6 +18,10 @@\n \"trigger\": 180,\n \"resolutions\": [240, 60]\n },\n+ \"footer-links\": {\n+ \"imprint\": \"/imprint\",\n+ \"privacy\": \"/privacy\"\n+ },\n \"api-subjects\": {\n \"subject-job-event\": \"cc.job.event\",\n \"subject-node-state\": \"cc.node.state\"\ndiff --git a/internal/config/config.go b/internal/config/config.go\nindex f635b7e4..74193ea4 100644\n--- a/internal/config/config.go\n+++ b/internal/config/config.go\n@@ -75,10 +75,21 @@ type ProgramConfig struct {\n \t// Systemd unit name for log viewer (default: \"clustercockpit\")\n \tSystemdUnit string `json:\"systemd-unit\"`\n\n+\t// Optional external/legal links shown in the footer.\n+\tFooterLinks FooterLinksConfig `json:\"footer-links\"`\n+\n \t// Node state retention configuration\n \tNodeStateRetention *NodeStateRetention `json:\"nodestate-retention\"`\n }\n\n+// FooterLinksConfig configures the legal/footer links that are rendered in the UI.\n+type FooterLinksConfig struct {\n+\t// Link target for the \"Imprint\" footer entry.\n+\tImprint string `json:\"imprint\"`\n+\t// Link target for the \"Privacy Policy\" footer entry.\n+\tPrivacy string `json:\"privacy\"`\n+}\n+\n type NodeStateRetention struct {\n \tPolicy string `json:\"policy\"` // \"delete\" or \"move\"\n \tAge int `json:\"age\"` // hours, default 24\n@@ -131,6 +142,10 @@ var Keys ProgramConfig = ProgramConfig{\n \tSessionMaxAge: \"168h\",\n \tStopJobsExceedingWalltime: 0,\n \tShortRunningJobsDuration: 5 * 60,\n+\tFooterLinks: FooterLinksConfig{\n+\t\tImprint: \"/imprint\",\n+\t\tPrivacy: \"/privacy\",\n+\t},\n }\n\n func Init(mainConfig json.RawMessage) {\ndiff --git a/internal/config/schema.go b/internal/config/schema.go\nindex 5e02732d..8f2bf68f 100644\n--- a/internal/config/schema.go\n+++ b/internal/config/schema.go\n@@ -88,6 +88,20 @@ var configSchema = `\n \"description\": \"Systemd unit name for log viewer (default: 'clustercockpit').\",\n \"type\": \"string\"\n },\n+ \"footer-links\": {\n+ \"description\": \"Optional footer links for legal pages (imprint/privacy).\",\n+ \"type\": \"object\",\n+ \"properties\": {\n+ \"imprint\": {\n+ \"description\": \"Target URL/path for the footer imprint link.\",\n+ \"type\": \"string\"\n+ },\n+ \"privacy\": {\n+ \"description\": \"Target URL/path for the footer privacy link.\",\n+ \"type\": \"string\"\n+ }\n+ }\n+ },\n \"resampling\": {\n \"description\": \"Enable dynamic zoom in frontend metric plots.\",\n \"type\": \"object\",\ndiff --git a/web/templates/base.tmpl b/web/templates/base.tmpl\nindex fd94668c..c2cd22ec 100644\n--- a/web/templates/base.tmpl\n+++ b/web/templates/base.tmpl\n@@ -52,8 +52,8 @@\n {{block \"footer\" .}}\n