From 52eec06c34419be040b118703197e8bf1eb82f4d Mon Sep 17 00:00:00 2001 From: Tim van Osch Date: Mon, 15 Jun 2026 10:25:29 +0200 Subject: [PATCH 1/6] fix(dashboard): guard pipeline create page against nil Pipeline The traces panel on the pipeline editor dereferenced p.Pipeline.Id unconditionally, panicking when rendering the create page (Pipeline is nil). Hide the panel when there is no pipeline yet. Co-Authored-By: Claude Opus 4.8 --- .../dashboard/views/pipelineEditPage.qtpl | 4 +- .../dashboard/views/pipelineEditPage.qtpl.go | 326 +++++++++--------- 2 files changed, 171 insertions(+), 159 deletions(-) diff --git a/services/dashboard/views/pipelineEditPage.qtpl b/services/dashboard/views/pipelineEditPage.qtpl index cd3629e9..617fecdc 100644 --- a/services/dashboard/views/pipelineEditPage.qtpl +++ b/services/dashboard/views/pipelineEditPage.qtpl @@ -84,7 +84,8 @@ -
@@ -94,6 +95,7 @@
+ {% endif %} {% endfunc %} diff --git a/services/dashboard/views/pipelineEditPage.qtpl.go b/services/dashboard/views/pipelineEditPage.qtpl.go index 96b92807..28dfffba 100644 --- a/services/dashboard/views/pipelineEditPage.qtpl.go +++ b/services/dashboard/views/pipelineEditPage.qtpl.go @@ -181,60 +181,70 @@ func (p *PipelineEditPage) StreamBody(qw422016 *qt422016.Writer) { -
Incoming data and processing statusses +//line views/pipelineEditPage.qtpl:93 + qw422016.E().S(U("/traces/list?pipeline=%s&limit=%d", p.Pipeline.Id, 10)) +//line views/pipelineEditPage.qtpl:93 + qw422016.N().S(`" hx-trigger="load, click" hx-target="next div">Refresh
+ `) +//line views/pipelineEditPage.qtpl:98 + } +//line views/pipelineEditPage.qtpl:98 + qw422016.N().S(` `) -//line views/pipelineEditPage.qtpl:98 +//line views/pipelineEditPage.qtpl:100 } -//line views/pipelineEditPage.qtpl:98 +//line views/pipelineEditPage.qtpl:100 func (p *PipelineEditPage) WriteBody(qq422016 qtio422016.Writer) { -//line views/pipelineEditPage.qtpl:98 +//line views/pipelineEditPage.qtpl:100 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/pipelineEditPage.qtpl:98 +//line views/pipelineEditPage.qtpl:100 p.StreamBody(qw422016) -//line views/pipelineEditPage.qtpl:98 +//line views/pipelineEditPage.qtpl:100 qt422016.ReleaseWriter(qw422016) -//line views/pipelineEditPage.qtpl:98 +//line views/pipelineEditPage.qtpl:100 } -//line views/pipelineEditPage.qtpl:98 +//line views/pipelineEditPage.qtpl:100 func (p *PipelineEditPage) Body() string { -//line views/pipelineEditPage.qtpl:98 +//line views/pipelineEditPage.qtpl:100 qb422016 := qt422016.AcquireByteBuffer() -//line views/pipelineEditPage.qtpl:98 +//line views/pipelineEditPage.qtpl:100 p.WriteBody(qb422016) -//line views/pipelineEditPage.qtpl:98 +//line views/pipelineEditPage.qtpl:100 qs422016 := string(qb422016.B) -//line views/pipelineEditPage.qtpl:98 +//line views/pipelineEditPage.qtpl:100 qt422016.ReleaseByteBuffer(qb422016) -//line views/pipelineEditPage.qtpl:98 +//line views/pipelineEditPage.qtpl:100 return qs422016 -//line views/pipelineEditPage.qtpl:98 +//line views/pipelineEditPage.qtpl:100 } -//line views/pipelineEditPage.qtpl:100 +//line views/pipelineEditPage.qtpl:102 func (p *PipelineEditPage) StreamRenderPipelineSteps(qw422016 *qt422016.Writer, pipeline *api.Pipeline, workers *[]api.UserWorker) { -//line views/pipelineEditPage.qtpl:100 +//line views/pipelineEditPage.qtpl:102 qw422016.N().S(`