detached a8cc2eb

feat(web): show resolved issues and linked issue history

commit
a8cc2eb2e4df41b3fd7ca24493d3cbf47d20e8c4
author
brice · · 2026-10-22 18:14 UTC
committer
brice · · 2026-10-22 18:41 UTC
parent
38857c6
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
16 files · +1643 -915
M internal/adapters/web/fragments.go +5 -1
@@ -67,7 +67,7 @@ func liveEvent(we ports.WatchEvent) bool {
6767 domain.RepoCreated, domain.RepoUpdated, domain.RepoDeleted, domain.PushEvent,
6868 domain.MergeRequestOpened, domain.MergeRequestMerged, domain.MergeRequestClosed, domain.MergeRequestReady, domain.MergeRequestAutoMergeEnabled, domain.MergeRequestAutoMergeCancelled, domain.MergeRequestMergeability, domain.CommentAdded, domain.CommentEdited, domain.CommentDeleted, domain.CommentResolved,
6969 domain.RunUpdated, domain.JobUpdated,
70- domain.IssueOpened, domain.IssueClosed, domain.IssueReopened, domain.IssueCommented, domain.IssueSubmitted, domain.IssuePendingRemoved, domain.IssueReferenced:
70+ domain.IssueOpened, domain.IssueResolved, domain.IssueClosed, domain.IssueReopened, domain.IssueCommented, domain.IssueSubmitted, domain.IssuePendingRemoved, domain.IssueReferenced:
7171 return true
7272 }
7373 return false
@@ -129,6 +129,8 @@ func (l *liveStream) home(ctx context.Context, we ports.WatchEvent) ([]fragment,
129129 name, fresh = ev.Repo.String(), true
130130 case domain.IssueOpened:
131131 name, fresh = ev.Issue.Repo.String(), true
132+ case domain.IssueResolved:
133+ name, fresh = ev.Issue.Repo.String(), true
132134 case domain.IssueClosed:
133135 name, fresh = ev.Issue.Repo.String(), true
134136 case domain.IssueReopened:
@@ -239,6 +241,8 @@ func (l *liveStream) repoPage(ctx context.Context, we ports.WatchEvent) ([]fragm
239241 return l.mrNotice(ctx, ev.Number, "a comment was added — reload")
240242 case domain.IssueOpened:
241243 return l.issueNotice(ctx, ev.Issue.Number, "an issue was opened — reload")
244+ case domain.IssueResolved:
245+ return l.issueNotice(ctx, ev.Issue.Number, "this issue was resolved — reload")
242246 case domain.IssueClosed:
243247 return l.issueNotice(ctx, ev.Issue.Number, "this issue was closed — reload")
244248 case domain.IssueReopened:
@@ -67,7 +67,7 @@ func liveEvent(we ports.WatchEvent) bool {
67 domain.RepoCreated, domain.RepoUpdated, domain.RepoDeleted, domain.PushEvent,67 domain.RepoCreated, domain.RepoUpdated, domain.RepoDeleted, domain.PushEvent,
68 domain.MergeRequestOpened, domain.MergeRequestMerged, domain.MergeRequestClosed, domain.MergeRequestReady, domain.MergeRequestAutoMergeEnabled, domain.MergeRequestAutoMergeCancelled, domain.MergeRequestMergeability, domain.CommentAdded, domain.CommentEdited, domain.CommentDeleted, domain.CommentResolved,68 domain.MergeRequestOpened, domain.MergeRequestMerged, domain.MergeRequestClosed, domain.MergeRequestReady, domain.MergeRequestAutoMergeEnabled, domain.MergeRequestAutoMergeCancelled, domain.MergeRequestMergeability, domain.CommentAdded, domain.CommentEdited, domain.CommentDeleted, domain.CommentResolved,
69 domain.RunUpdated, domain.JobUpdated,69 domain.RunUpdated, domain.JobUpdated,
70- domain.IssueOpened, domain.IssueClosed, domain.IssueReopened, domain.IssueCommented, domain.IssueSubmitted, domain.IssuePendingRemoved, domain.IssueReferenced:70+ domain.IssueOpened, domain.IssueResolved, domain.IssueClosed, domain.IssueReopened, domain.IssueCommented, domain.IssueSubmitted, domain.IssuePendingRemoved, domain.IssueReferenced:
71 return true71 return true
72 }72 }
73 return false73 return false
@@ -129,6 +129,8 @@ func (l *liveStream) home(ctx context.Context, we ports.WatchEvent) ([]fragment,
129 name, fresh = ev.Repo.String(), true129 name, fresh = ev.Repo.String(), true
130 case domain.IssueOpened:130 case domain.IssueOpened:
131 name, fresh = ev.Issue.Repo.String(), true131 name, fresh = ev.Issue.Repo.String(), true
132+ case domain.IssueResolved:
133+ name, fresh = ev.Issue.Repo.String(), true
132 case domain.IssueClosed:134 case domain.IssueClosed:
133 name, fresh = ev.Issue.Repo.String(), true135 name, fresh = ev.Issue.Repo.String(), true
134 case domain.IssueReopened:136 case domain.IssueReopened:
@@ -239,6 +241,8 @@ func (l *liveStream) repoPage(ctx context.Context, we ports.WatchEvent) ([]fragm
239 return l.mrNotice(ctx, ev.Number, "a comment was added — reload")241 return l.mrNotice(ctx, ev.Number, "a comment was added — reload")
240 case domain.IssueOpened:242 case domain.IssueOpened:
241 return l.issueNotice(ctx, ev.Issue.Number, "an issue was opened — reload")243 return l.issueNotice(ctx, ev.Issue.Number, "an issue was opened — reload")
244+ case domain.IssueResolved:
245+ return l.issueNotice(ctx, ev.Issue.Number, "this issue was resolved — reload")
242 case domain.IssueClosed:246 case domain.IssueClosed:
243 return l.issueNotice(ctx, ev.Issue.Number, "this issue was closed — reload")247 return l.issueNotice(ctx, ev.Issue.Number, "this issue was closed — reload")
244 case domain.IssueReopened:248 case domain.IssueReopened:
M internal/adapters/web/home_test.go +1 -1
@@ -379,7 +379,7 @@ func TestActivityEventsRefreshTheHomeRow(t *testing.T) {
379379 domain.MergeRequestOpened{MergeRequest: mr}, domain.MergeRequestMerged{MergeRequest: mr},
380380 domain.MergeRequestClosed{MergeRequest: mr}, domain.MergeRequestReady{MergeRequest: mr},
381381 domain.CommentAdded{Repo: repo.Name}, domain.IssueOpened{Issue: issue},
382- domain.IssueClosed{Issue: issue}, domain.IssueReopened{Issue: issue}, domain.IssueCommented{Repo: repo.Name},
382+ domain.IssueResolved{Issue: issue}, domain.IssueClosed{Issue: issue}, domain.IssueReopened{Issue: issue}, domain.IssueCommented{Repo: repo.Name},
383383 } {
384384 t.Run(ev.EventKind(), func(t *testing.T) {
385385 t.Parallel()
@@ -379,7 +379,7 @@ func TestActivityEventsRefreshTheHomeRow(t *testing.T) {
379 domain.MergeRequestOpened{MergeRequest: mr}, domain.MergeRequestMerged{MergeRequest: mr},379 domain.MergeRequestOpened{MergeRequest: mr}, domain.MergeRequestMerged{MergeRequest: mr},
380 domain.MergeRequestClosed{MergeRequest: mr}, domain.MergeRequestReady{MergeRequest: mr},380 domain.MergeRequestClosed{MergeRequest: mr}, domain.MergeRequestReady{MergeRequest: mr},
381 domain.CommentAdded{Repo: repo.Name}, domain.IssueOpened{Issue: issue},381 domain.CommentAdded{Repo: repo.Name}, domain.IssueOpened{Issue: issue},
382- domain.IssueClosed{Issue: issue}, domain.IssueReopened{Issue: issue}, domain.IssueCommented{Repo: repo.Name},382+ domain.IssueResolved{Issue: issue}, domain.IssueClosed{Issue: issue}, domain.IssueReopened{Issue: issue}, domain.IssueCommented{Repo: repo.Name},
383 } {383 } {
384 t.Run(ev.EventKind(), func(t *testing.T) {384 t.Run(ev.EventKind(), func(t *testing.T) {
385 t.Parallel()385 t.Parallel()
M internal/adapters/web/inbox.go +1 -1
@@ -287,7 +287,7 @@ func (s *Server) inboxCount(ctx context.Context) (n int, show bool) {
287287 func (l *liveStream) inbox(ctx context.Context, we ports.WatchEvent) ([]fragment, error) {
288288 switch we.Event.(type) {
289289 case domain.MergeRequestOpened, domain.MergeRequestMerged, domain.MergeRequestClosed, domain.MergeRequestReady, domain.CommentAdded, domain.CommentEdited, domain.CommentDeleted, domain.CommentResolved,
290- domain.IssueOpened, domain.IssueClosed, domain.IssueReopened, domain.IssueCommented, domain.IssueSubmitted, domain.IssuePendingRemoved,
290+ domain.IssueOpened, domain.IssueResolved, domain.IssueClosed, domain.IssueReopened, domain.IssueCommented, domain.IssueSubmitted, domain.IssuePendingRemoved,
291291 domain.RepoUpdated, domain.RepoDeleted, domain.RunUpdated:
292292 default:
293293 return nil, nil
@@ -287,7 +287,7 @@ func (s *Server) inboxCount(ctx context.Context) (n int, show bool) {
287 func (l *liveStream) inbox(ctx context.Context, we ports.WatchEvent) ([]fragment, error) {287 func (l *liveStream) inbox(ctx context.Context, we ports.WatchEvent) ([]fragment, error) {
288 switch we.Event.(type) {288 switch we.Event.(type) {
289 case domain.MergeRequestOpened, domain.MergeRequestMerged, domain.MergeRequestClosed, domain.MergeRequestReady, domain.CommentAdded, domain.CommentEdited, domain.CommentDeleted, domain.CommentResolved,289 case domain.MergeRequestOpened, domain.MergeRequestMerged, domain.MergeRequestClosed, domain.MergeRequestReady, domain.CommentAdded, domain.CommentEdited, domain.CommentDeleted, domain.CommentResolved,
290- domain.IssueOpened, domain.IssueClosed, domain.IssueReopened, domain.IssueCommented, domain.IssueSubmitted, domain.IssuePendingRemoved,290+ domain.IssueOpened, domain.IssueResolved, domain.IssueClosed, domain.IssueReopened, domain.IssueCommented, domain.IssueSubmitted, domain.IssuePendingRemoved,
291 domain.RepoUpdated, domain.RepoDeleted, domain.RunUpdated:291 domain.RepoUpdated, domain.RepoDeleted, domain.RunUpdated:
292 default:292 default:
293 return nil, nil293 return nil, nil
M internal/adapters/web/inbox_test.go +5 -0
@@ -188,6 +188,11 @@ func TestInboxLiveFragments(t *testing.T) {
188188 assert.Contains(t, frags[4].html, `id="inbox-mrs"`)
189189 assert.Contains(t, frags[5].html, `id="inbox-issues"`)
190190
191+ resolved, err := ls.render(withOwner(t.Context()), ports.WatchEvent{Event: domain.IssueResolved{Issue: domain.Issue{Repo: repoName(t, "beta"), Number: 7}}})
192+ require.NoError(t, err)
193+ require.Len(t, resolved, 6)
194+ assert.Contains(t, resolved[5].html, `id="inbox-issues"`)
195+
191196 none, err := ls.render(withOwner(t.Context()), ports.WatchEvent{Event: domain.PushEvent{Repo: repoName(t, "beta")}})
192197 require.NoError(t, err)
193198 assert.Empty(t, none, "a push is not inbox news")
@@ -188,6 +188,11 @@ func TestInboxLiveFragments(t *testing.T) {
188 assert.Contains(t, frags[4].html, `id="inbox-mrs"`)188 assert.Contains(t, frags[4].html, `id="inbox-mrs"`)
189 assert.Contains(t, frags[5].html, `id="inbox-issues"`)189 assert.Contains(t, frags[5].html, `id="inbox-issues"`)
190 190
191+ resolved, err := ls.render(withOwner(t.Context()), ports.WatchEvent{Event: domain.IssueResolved{Issue: domain.Issue{Repo: repoName(t, "beta"), Number: 7}}})
192+ require.NoError(t, err)
193+ require.Len(t, resolved, 6)
194+ assert.Contains(t, resolved[5].html, `id="inbox-issues"`)
195+
191 none, err := ls.render(withOwner(t.Context()), ports.WatchEvent{Event: domain.PushEvent{Repo: repoName(t, "beta")}})196 none, err := ls.render(withOwner(t.Context()), ports.WatchEvent{Event: domain.PushEvent{Repo: repoName(t, "beta")}})
192 require.NoError(t, err)197 require.NoError(t, err)
193 assert.Empty(t, none, "a push is not inbox news")198 assert.Empty(t, none, "a push is not inbox news")
A internal/adapters/web/issue_timeline.go +92 -0
@@ -0,0 +1,92 @@
1+// SPDX-License-Identifier: AGPL-3.0-or-later
2+
3+package web
4+
5+import (
6+ "sort"
7+ "strconv"
8+ "time"
9+
10+ "bnema.dev/ermite/internal/domain"
11+ "bnema.dev/ermite/internal/ports"
12+)
13+
14+// TimelineItem holds either a comment or a compact system event.
15+type TimelineItem struct {
16+ Comment *CommentView
17+ Event *IssueEventView
18+ at time.Time
19+}
20+
21+type IssueEventView struct {
22+ ID, Kind, Actor, Text, When, WhenAt, Abs string
23+ MR *Link
24+ Closes bool
25+ Icon string
26+}
27+
28+type IssueLinkView struct {
29+ Number, Title, State, Href string
30+ Closes bool
31+}
32+
33+// issueTimeline keeps comments ahead of events with the same timestamp.
34+func (s *Server) issueTimeline(repo string, comments []CommentView, events []ports.IssueEventDetail, mr bool) []TimelineItem {
35+ items := make([]TimelineItem, 0, len(comments)+len(events))
36+ for _, c := range comments {
37+ at := c.createdAt
38+ items = append(items, TimelineItem{Comment: &c, at: at})
39+ }
40+ for _, detail := range events {
41+ e := detail.Event
42+ v := IssueEventView{ID: strconv.FormatInt(e.ID, 10), Kind: string(e.Kind), Actor: s.who(e.Actor), Closes: e.Closes}
43+ v.When, v.WhenAt = whenOf(s.cfg.Now(), e.CreatedAt)
44+ if !e.CreatedAt.IsZero() {
45+ v.Abs = absolute(e.CreatedAt)
46+ }
47+ switch e.Kind {
48+ case domain.IssueEventReferenced:
49+ v.Text, v.Icon = "referenced this in", "↗"
50+ if e.Closes {
51+ v.Text = "will resolve this in"
52+ }
53+ case domain.IssueEventClosed:
54+ v.Text, v.Icon = "closed this", "✗"
55+ case domain.IssueEventReopened:
56+ v.Text, v.Icon = "reopened this", "↻"
57+ case domain.IssueEventResolved:
58+ v.Text, v.Icon = "resolved this", "✓"
59+ if e.MergeRequest != 0 {
60+ v.Text += " with"
61+ }
62+ default:
63+ continue
64+ }
65+ if mr {
66+ // IDs are per issue, so MR event anchors also include the issue number.
67+ v.ID = strconv.FormatInt(e.Issue, 10) + "-" + v.ID
68+ v.MR = &Link{Label: "#" + strconv.FormatInt(e.Issue, 10), Href: issueHref(repo, e.Issue)}
69+ switch e.Kind {
70+ case domain.IssueEventReferenced:
71+ v.Text = "referenced"
72+ if e.Closes {
73+ v.Text = "will resolve"
74+ }
75+ case domain.IssueEventResolved:
76+ v.Text = "resolved"
77+ case domain.IssueEventClosed:
78+ v.Text = "closed"
79+ case domain.IssueEventReopened:
80+ v.Text = "reopened"
81+ }
82+ } else if e.MergeRequest != 0 {
83+ v.MR = numberLink(repo, e.MergeRequest)
84+ if title := visibleText(detail.MergeRequestTitle.String()); title != "" {
85+ v.MR.Label += " " + title
86+ }
87+ }
88+ items = append(items, TimelineItem{Event: &v, at: e.CreatedAt})
89+ }
90+ sort.SliceStable(items, func(i, j int) bool { return items[i].at.Before(items[j].at) })
91+ return items
92+}
@@ -0,0 +1,92 @@
1+// SPDX-License-Identifier: AGPL-3.0-or-later
2+
3+package web
4+
5+import (
6+ "sort"
7+ "strconv"
8+ "time"
9+
10+ "bnema.dev/ermite/internal/domain"
11+ "bnema.dev/ermite/internal/ports"
12+)
13+
14+// TimelineItem holds either a comment or a compact system event.
15+type TimelineItem struct {
16+ Comment *CommentView
17+ Event *IssueEventView
18+ at time.Time
19+}
20+
21+type IssueEventView struct {
22+ ID, Kind, Actor, Text, When, WhenAt, Abs string
23+ MR *Link
24+ Closes bool
25+ Icon string
26+}
27+
28+type IssueLinkView struct {
29+ Number, Title, State, Href string
30+ Closes bool
31+}
32+
33+// issueTimeline keeps comments ahead of events with the same timestamp.
34+func (s *Server) issueTimeline(repo string, comments []CommentView, events []ports.IssueEventDetail, mr bool) []TimelineItem {
35+ items := make([]TimelineItem, 0, len(comments)+len(events))
36+ for _, c := range comments {
37+ at := c.createdAt
38+ items = append(items, TimelineItem{Comment: &c, at: at})
39+ }
40+ for _, detail := range events {
41+ e := detail.Event
42+ v := IssueEventView{ID: strconv.FormatInt(e.ID, 10), Kind: string(e.Kind), Actor: s.who(e.Actor), Closes: e.Closes}
43+ v.When, v.WhenAt = whenOf(s.cfg.Now(), e.CreatedAt)
44+ if !e.CreatedAt.IsZero() {
45+ v.Abs = absolute(e.CreatedAt)
46+ }
47+ switch e.Kind {
48+ case domain.IssueEventReferenced:
49+ v.Text, v.Icon = "referenced this in", "↗"
50+ if e.Closes {
51+ v.Text = "will resolve this in"
52+ }
53+ case domain.IssueEventClosed:
54+ v.Text, v.Icon = "closed this", "✗"
55+ case domain.IssueEventReopened:
56+ v.Text, v.Icon = "reopened this", "↻"
57+ case domain.IssueEventResolved:
58+ v.Text, v.Icon = "resolved this", "✓"
59+ if e.MergeRequest != 0 {
60+ v.Text += " with"
61+ }
62+ default:
63+ continue
64+ }
65+ if mr {
66+ // IDs are per issue, so MR event anchors also include the issue number.
67+ v.ID = strconv.FormatInt(e.Issue, 10) + "-" + v.ID
68+ v.MR = &Link{Label: "#" + strconv.FormatInt(e.Issue, 10), Href: issueHref(repo, e.Issue)}
69+ switch e.Kind {
70+ case domain.IssueEventReferenced:
71+ v.Text = "referenced"
72+ if e.Closes {
73+ v.Text = "will resolve"
74+ }
75+ case domain.IssueEventResolved:
76+ v.Text = "resolved"
77+ case domain.IssueEventClosed:
78+ v.Text = "closed"
79+ case domain.IssueEventReopened:
80+ v.Text = "reopened"
81+ }
82+ } else if e.MergeRequest != 0 {
83+ v.MR = numberLink(repo, e.MergeRequest)
84+ if title := visibleText(detail.MergeRequestTitle.String()); title != "" {
85+ v.MR.Label += " " + title
86+ }
87+ }
88+ items = append(items, TimelineItem{Event: &v, at: e.CreatedAt})
89+ }
90+ sort.SliceStable(items, func(i, j int) bool { return items[i].at.Before(items[j].at) })
91+ return items
92+}
A internal/adapters/web/issue_timeline.templ +34 -0
@@ -0,0 +1,34 @@
1+// SPDX-License-Identifier: AGPL-3.0-or-later
2+
3+package web
4+
5+templ issueTimeline(items []TimelineItem) {
6+ if len(items) > 0 {
7+ <ol class="timeline" aria-label="Conversation history">
8+ for _, item := range items {
9+ <li>
10+ if item.Comment != nil {
11+ @commentView(*item.Comment, "")
12+ } else if item.Event != nil {
13+ @issueEventRow(*item.Event)
14+ }
15+ </li>
16+ }
17+ </ol>
18+ }
19+}
20+
21+templ issueEventRow(e IssueEventView) {
22+ <div class="sys" id={ "e" + e.ID } data-kind={ e.Kind }>
23+ <span class="sys-icon" aria-hidden="true">{ e.Icon }</span>
24+ <span>
25+ { e.Actor } { e.Text }
26+ if e.MR != nil {
27+ { " " }<a class="ref" href={ templ.SafeURL(e.MR.Href) }>{ e.MR.Label }</a>
28+ }
29+ </span>
30+ if e.WhenAt != "" {
31+ { " · " }<time datetime={ e.WhenAt } title={ e.Abs }>{ e.When }</time>
32+ }
33+ </div>
34+}
@@ -0,0 +1,34 @@
1+// SPDX-License-Identifier: AGPL-3.0-or-later
2+
3+package web
4+
5+templ issueTimeline(items []TimelineItem) {
6+ if len(items) > 0 {
7+ <ol class="timeline" aria-label="Conversation history">
8+ for _, item := range items {
9+ <li>
10+ if item.Comment != nil {
11+ @commentView(*item.Comment, "")
12+ } else if item.Event != nil {
13+ @issueEventRow(*item.Event)
14+ }
15+ </li>
16+ }
17+ </ol>
18+ }
19+}
20+
21+templ issueEventRow(e IssueEventView) {
22+ <div class="sys" id={ "e" + e.ID } data-kind={ e.Kind }>
23+ <span class="sys-icon" aria-hidden="true">{ e.Icon }</span>
24+ <span>
25+ { e.Actor } { e.Text }
26+ if e.MR != nil {
27+ { " " }<a class="ref" href={ templ.SafeURL(e.MR.Href) }>{ e.MR.Label }</a>
28+ }
29+ </span>
30+ if e.WhenAt != "" {
31+ { " · " }<time datetime={ e.WhenAt } title={ e.Abs }>{ e.When }</time>
32+ }
33+ </div>
34+}
A internal/adapters/web/issue_timeline_templ.go +266 -0 generated file: collapsed
M internal/adapters/web/issues.go +18 -14
@@ -25,7 +25,7 @@ import (
2525 //
2626 // Routes:
2727 //
28-// GET /<repo>/issues the list, open or closed (?state=), paged (?page=)
28+// GET /<repo>/issues the list, open, closed or resolved (?state=), paged (?page=)
2929 // GET /<repo>/issues/new the form that opens one (owner)
3030 // GET /<repo>/issues/<n> the issue with its comments
3131 //
@@ -55,11 +55,11 @@ type IssueRow struct {
5555 type IssueListPage struct {
5656 Rows []IssueRow
5757 // Closed is true on the tab of the closed issues.
58- Closed bool
59- OpenHref, ClosedHref string
60- Older, Newest string
61- NewHref string // the form that opens an issue; "" unless the owner
62- Live bool
58+ Closed, Resolved bool
59+ OpenHref, ClosedHref, ResolvedHref string
60+ Older, Newest string
61+ NewHref string // the form that opens an issue; "" unless the owner
62+ Live bool
6363 }
6464
6565 // IssueActions are the buttons of the owner on an issue.
@@ -80,11 +80,12 @@ type IssuePage struct {
8080 // Desc is the body rendered as Markdown, "" when it is empty.
8181 Desc template.HTML
8282 Comments []CommentView
83+ Timeline []TimelineItem
8384 Form *CommentForm
8485 Transition *IssueActions
8586 Live bool
86- // ClosedBy is the merge request whose merge closed the issue.
87- ClosedBy *Link
87+ // ResolvedBy is the merge request whose merge resolved the issue.
88+ ResolvedBy *Link
8889 // References are the merge requests naming the issue.
8990 References []IssueRefView
9091 }
@@ -192,6 +193,8 @@ func (s *Server) issueList(ctx context.Context, r *http.Request) (templ.Componen
192193 case "", "open":
193194 case "closed":
194195 state = domain.IssueStateClosed
196+ case "resolved":
197+ state = domain.IssueStateResolved
195198 default:
196199 return nil, 0, errNotFound
197200 }
@@ -200,8 +203,8 @@ func (s *Server) issueList(ctx context.Context, r *http.Request) (templ.Componen
200203 closed := state == domain.IssueStateClosed
201204 link := func(page string) string {
202205 q := url.Values{}
203- if closed {
204- q.Set("state", "closed")
206+ if state != domain.IssueStateOpen {
207+ q.Set("state", string(state))
205208 }
206209 if page != "" {
207210 q.Set("page", page)
@@ -218,7 +221,7 @@ func (s *Server) issueList(ctx context.Context, r *http.Request) (templ.Componen
218221 if err != nil {
219222 return nil, 0, err
220223 }
221- p := IssueListPage{Closed: closed, OpenHref: base, ClosedHref: base + "?state=closed"}
224+ p := IssueListPage{Closed: closed, OpenHref: base, ClosedHref: base + "?state=closed", Resolved: state == domain.IssueStateResolved, ResolvedHref: base + "?state=resolved"}
222225 for _, i := range res.Issues {
223226 p.Rows = append(p.Rows, s.issueRow(d.name(), i))
224227 }
@@ -293,7 +296,7 @@ func (s *Server) issueShow(ctx context.Context, r *http.Request) (templ.Componen
293296 if p.Desc, err = s.issueBody(ctx, d, i); err != nil {
294297 return nil, 0, err
295298 }
296- p.ClosedBy = numberLink(d.name(), i.ClosedByMergeRequest)
299+ p.ResolvedBy = numberLink(d.name(), i.ClosedByMergeRequest)
297300 p.References = issueRefViews(d.name(), res.References)
298301 p.Opened.Name = s.who(i.Author)
299302 if i.External {
@@ -307,7 +310,7 @@ func (s *Server) issueShow(ctx context.Context, r *http.Request) (templ.Componen
307310 p.Updated, p.UpdatedAt = whenOf(now, i.UpdatedAt)
308311 for _, c := range res.Comments {
309312 v := CommentView{
310- ID: strconv.FormatInt(c.ID, 10), Author: s.who(c.Author), Parts: plainParts(c.Text.String()),
313+ createdAt: c.CreatedAt, ID: strconv.FormatInt(c.ID, 10), Author: s.who(c.Author), Parts: plainParts(c.Text.String()),
311314 }
312315 v.When, v.WhenAt = whenOf(now, c.CreatedAt)
313316 if !c.CreatedAt.IsZero() {
@@ -315,12 +318,13 @@ func (s *Server) issueShow(ctx context.Context, r *http.Request) (templ.Componen
315318 }
316319 p.Comments = append(p.Comments, v)
317320 }
321+ p.Timeline = s.issueTimeline(d.name(), p.Comments, res.Events, false)
318322 if signed {
319323 p.Form = &CommentForm{ID: "cf-general", Action: issueHref(d.name(), n, "comments"), Title: "comment on the issue", Plain: true}
320324 switch i.State {
321325 case domain.IssueStateOpen:
322326 p.Transition = &IssueActions{Action: issueHref(d.name(), n, "close"), Label: "Close issue"}
323- case domain.IssueStateClosed:
327+ case domain.IssueStateClosed, domain.IssueStateResolved:
324328 p.Transition = &IssueActions{Action: issueHref(d.name(), n, "reopen"), Label: "Reopen issue"}
325329 }
326330 }
@@ -25,7 +25,7 @@ import (
25 //25 //
26 // Routes:26 // Routes:
27 //27 //
28-// GET /<repo>/issues the list, open or closed (?state=), paged (?page=)28+// GET /<repo>/issues the list, open, closed or resolved (?state=), paged (?page=)
29 // GET /<repo>/issues/new the form that opens one (owner)29 // GET /<repo>/issues/new the form that opens one (owner)
30 // GET /<repo>/issues/<n> the issue with its comments30 // GET /<repo>/issues/<n> the issue with its comments
31 //31 //
@@ -55,11 +55,11 @@ type IssueRow struct {
55 type IssueListPage struct {55 type IssueListPage struct {
56 Rows []IssueRow56 Rows []IssueRow
57 // Closed is true on the tab of the closed issues.57 // Closed is true on the tab of the closed issues.
58- Closed bool58+ Closed, Resolved bool
59- OpenHref, ClosedHref string59+ OpenHref, ClosedHref, ResolvedHref string
60- Older, Newest string60+ Older, Newest string
61- NewHref string // the form that opens an issue; "" unless the owner61+ NewHref string // the form that opens an issue; "" unless the owner
62- Live bool62+ Live bool
63 }63 }
64 64
65 // IssueActions are the buttons of the owner on an issue.65 // IssueActions are the buttons of the owner on an issue.
@@ -80,11 +80,12 @@ type IssuePage struct {
80 // Desc is the body rendered as Markdown, "" when it is empty.80 // Desc is the body rendered as Markdown, "" when it is empty.
81 Desc template.HTML81 Desc template.HTML
82 Comments []CommentView82 Comments []CommentView
83+ Timeline []TimelineItem
83 Form *CommentForm84 Form *CommentForm
84 Transition *IssueActions85 Transition *IssueActions
85 Live bool86 Live bool
86- // ClosedBy is the merge request whose merge closed the issue.87+ // ResolvedBy is the merge request whose merge resolved the issue.
87- ClosedBy *Link88+ ResolvedBy *Link
88 // References are the merge requests naming the issue.89 // References are the merge requests naming the issue.
89 References []IssueRefView90 References []IssueRefView
90 }91 }
@@ -192,6 +193,8 @@ func (s *Server) issueList(ctx context.Context, r *http.Request) (templ.Componen
192 case "", "open":193 case "", "open":
193 case "closed":194 case "closed":
194 state = domain.IssueStateClosed195 state = domain.IssueStateClosed
196+ case "resolved":
197+ state = domain.IssueStateResolved
195 default:198 default:
196 return nil, 0, errNotFound199 return nil, 0, errNotFound
197 }200 }
@@ -200,8 +203,8 @@ func (s *Server) issueList(ctx context.Context, r *http.Request) (templ.Componen
200 closed := state == domain.IssueStateClosed203 closed := state == domain.IssueStateClosed
201 link := func(page string) string {204 link := func(page string) string {
202 q := url.Values{}205 q := url.Values{}
203- if closed {206+ if state != domain.IssueStateOpen {
204- q.Set("state", "closed")207+ q.Set("state", string(state))
205 }208 }
206 if page != "" {209 if page != "" {
207 q.Set("page", page)210 q.Set("page", page)
@@ -218,7 +221,7 @@ func (s *Server) issueList(ctx context.Context, r *http.Request) (templ.Componen
218 if err != nil {221 if err != nil {
219 return nil, 0, err222 return nil, 0, err
220 }223 }
221- p := IssueListPage{Closed: closed, OpenHref: base, ClosedHref: base + "?state=closed"}224+ p := IssueListPage{Closed: closed, OpenHref: base, ClosedHref: base + "?state=closed", Resolved: state == domain.IssueStateResolved, ResolvedHref: base + "?state=resolved"}
222 for _, i := range res.Issues {225 for _, i := range res.Issues {
223 p.Rows = append(p.Rows, s.issueRow(d.name(), i))226 p.Rows = append(p.Rows, s.issueRow(d.name(), i))
224 }227 }
@@ -293,7 +296,7 @@ func (s *Server) issueShow(ctx context.Context, r *http.Request) (templ.Componen
293 if p.Desc, err = s.issueBody(ctx, d, i); err != nil {296 if p.Desc, err = s.issueBody(ctx, d, i); err != nil {
294 return nil, 0, err297 return nil, 0, err
295 }298 }
296- p.ClosedBy = numberLink(d.name(), i.ClosedByMergeRequest)299+ p.ResolvedBy = numberLink(d.name(), i.ClosedByMergeRequest)
297 p.References = issueRefViews(d.name(), res.References)300 p.References = issueRefViews(d.name(), res.References)
298 p.Opened.Name = s.who(i.Author)301 p.Opened.Name = s.who(i.Author)
299 if i.External {302 if i.External {
@@ -307,7 +310,7 @@ func (s *Server) issueShow(ctx context.Context, r *http.Request) (templ.Componen
307 p.Updated, p.UpdatedAt = whenOf(now, i.UpdatedAt)310 p.Updated, p.UpdatedAt = whenOf(now, i.UpdatedAt)
308 for _, c := range res.Comments {311 for _, c := range res.Comments {
309 v := CommentView{312 v := CommentView{
310- ID: strconv.FormatInt(c.ID, 10), Author: s.who(c.Author), Parts: plainParts(c.Text.String()),313+ createdAt: c.CreatedAt, ID: strconv.FormatInt(c.ID, 10), Author: s.who(c.Author), Parts: plainParts(c.Text.String()),
311 }314 }
312 v.When, v.WhenAt = whenOf(now, c.CreatedAt)315 v.When, v.WhenAt = whenOf(now, c.CreatedAt)
313 if !c.CreatedAt.IsZero() {316 if !c.CreatedAt.IsZero() {
@@ -315,12 +318,13 @@ func (s *Server) issueShow(ctx context.Context, r *http.Request) (templ.Componen
315 }318 }
316 p.Comments = append(p.Comments, v)319 p.Comments = append(p.Comments, v)
317 }320 }
321+ p.Timeline = s.issueTimeline(d.name(), p.Comments, res.Events, false)
318 if signed {322 if signed {
319 p.Form = &CommentForm{ID: "cf-general", Action: issueHref(d.name(), n, "comments"), Title: "comment on the issue", Plain: true}323 p.Form = &CommentForm{ID: "cf-general", Action: issueHref(d.name(), n, "comments"), Title: "comment on the issue", Plain: true}
320 switch i.State {324 switch i.State {
321 case domain.IssueStateOpen:325 case domain.IssueStateOpen:
322 p.Transition = &IssueActions{Action: issueHref(d.name(), n, "close"), Label: "Close issue"}326 p.Transition = &IssueActions{Action: issueHref(d.name(), n, "close"), Label: "Close issue"}
323- case domain.IssueStateClosed:327+ case domain.IssueStateClosed, domain.IssueStateResolved:
324 p.Transition = &IssueActions{Action: issueHref(d.name(), n, "reopen"), Label: "Reopen issue"}328 p.Transition = &IssueActions{Action: issueHref(d.name(), n, "reopen"), Label: "Reopen issue"}
325 }329 }
326 }330 }
M internal/adapters/web/issues.templ +21 -11
@@ -11,7 +11,7 @@ templ IssueList(l Layout, p IssueListPage) {
1111 <nav class="since" aria-label="State">
1212 <a
1313 href={ templ.SafeURL(p.OpenHref) }
14- if !p.Closed {
14+ if !p.Closed && !p.Resolved {
1515 aria-current="page"
1616 }
1717 >open</a>
@@ -21,6 +21,12 @@ templ IssueList(l Layout, p IssueListPage) {
2121 aria-current="page"
2222 }
2323 >closed</a>
24+ <a
25+ href={ templ.SafeURL(p.ResolvedHref) }
26+ if p.Resolved {
27+ aria-current="page"
28+ }
29+ >resolved</a>
2430 </nav>
2531 <div class="filter">
2632 <label for="issue-filter" class="sr">filter</label>
@@ -34,7 +40,9 @@ templ IssueList(l Layout, p IssueListPage) {
3440 />
3541 </div>
3642 <h2 class="rule-h">
37- if p.Closed {
43+ if p.Resolved {
44+ <span>Resolved</span>
45+ } else if p.Closed {
3846 <span>Closed</span>
3947 } else {
4048 <span>Open</span>
@@ -43,7 +51,9 @@ templ IssueList(l Layout, p IssueListPage) {
4351 </h2>
4452 @issueRows(p.Rows)
4553 if len(p.Rows) == 0 {
46- if p.Closed {
54+ if p.Resolved {
55+ <p class="lede dim">no resolved issues.</p>
56+ } else if p.Closed {
4757 <p class="lede dim">no closed issues.</p>
4858 } else {
4959 <p class="lede dim">no open issues.</p>
@@ -95,7 +105,9 @@ templ issueListRail(p IssueListPage) {
95105 <dt>open</dt>
96106 <dd>being worked on</dd>
97107 <dt>closed</dt>
98- <dd>done with, can be reopened</dd>
108+ <dd>closed without resolution</dd>
109+ <dt>resolved</dt>
110+ <dd>fixed, can be reopened</dd>
99111 </dl>
100112 </section>
101113 if p.NewHref != "" {
@@ -149,9 +161,9 @@ templ IssueShow(l Layout, p IssuePage) {
149161 { " · " }<time datetime={ p.Opened.WhenAt } title={ p.Opened.Abs }>{ p.Opened.When }</time>
150162 }
151163 </dd>
152- if p.ClosedBy != nil {
153- <dt>closed by</dt>
154- <dd><a class="ref" href={ templ.SafeURL(p.ClosedBy.Href) }>{ p.ClosedBy.Label }</a></dd>
164+ if p.ResolvedBy != nil {
165+ <dt>resolved by</dt>
166+ <dd><a class="ref" href={ templ.SafeURL(p.ResolvedBy.Href) }>{ p.ResolvedBy.Label }</a></dd>
155167 }
156168 if p.UpdatedAt != "" {
157169 <dt>updated</dt>
@@ -169,9 +181,7 @@ templ IssueShow(l Layout, p IssuePage) {
169181 @LiveSlot("mr-notice")
170182 }
171183 <h2 class="rule-h" id="comments"><span>Comments</span><span class="count">{ itoa(len(p.Comments)) }</span></h2>
172- for _, c := range p.Comments {
173- @commentView(c, "")
174- }
184+ @issueTimeline(p.Timeline)
175185 if len(p.Comments) == 0 {
176186 <p class="dim">no comments yet.</p>
177187 }
@@ -192,7 +202,7 @@ templ issueRail(p IssuePage) {
192202 { " " + r.Title + " " }
193203 <span class="mr-state" data-state={ r.State }>{ r.State }</span>
194204 if r.Closes {
195- { " · closes" }
205+ { " · resolves" }
196206 }
197207 </li>
198208 }
@@ -11,7 +11,7 @@ templ IssueList(l Layout, p IssueListPage) {
11 <nav class="since" aria-label="State">11 <nav class="since" aria-label="State">
12 <a12 <a
13 href={ templ.SafeURL(p.OpenHref) }13 href={ templ.SafeURL(p.OpenHref) }
14- if !p.Closed {14+ if !p.Closed && !p.Resolved {
15 aria-current="page"15 aria-current="page"
16 }16 }
17 >open</a>17 >open</a>
@@ -21,6 +21,12 @@ templ IssueList(l Layout, p IssueListPage) {
21 aria-current="page"21 aria-current="page"
22 }22 }
23 >closed</a>23 >closed</a>
24+ <a
25+ href={ templ.SafeURL(p.ResolvedHref) }
26+ if p.Resolved {
27+ aria-current="page"
28+ }
29+ >resolved</a>
24 </nav>30 </nav>
25 <div class="filter">31 <div class="filter">
26 <label for="issue-filter" class="sr">filter</label>32 <label for="issue-filter" class="sr">filter</label>
@@ -34,7 +40,9 @@ templ IssueList(l Layout, p IssueListPage) {
34 />40 />
35 </div>41 </div>
36 <h2 class="rule-h">42 <h2 class="rule-h">
37- if p.Closed {43+ if p.Resolved {
44+ <span>Resolved</span>
45+ } else if p.Closed {
38 <span>Closed</span>46 <span>Closed</span>
39 } else {47 } else {
40 <span>Open</span>48 <span>Open</span>
@@ -43,7 +51,9 @@ templ IssueList(l Layout, p IssueListPage) {
43 </h2>51 </h2>
44 @issueRows(p.Rows)52 @issueRows(p.Rows)
45 if len(p.Rows) == 0 {53 if len(p.Rows) == 0 {
46- if p.Closed {54+ if p.Resolved {
55+ <p class="lede dim">no resolved issues.</p>
56+ } else if p.Closed {
47 <p class="lede dim">no closed issues.</p>57 <p class="lede dim">no closed issues.</p>
48 } else {58 } else {
49 <p class="lede dim">no open issues.</p>59 <p class="lede dim">no open issues.</p>
@@ -95,7 +105,9 @@ templ issueListRail(p IssueListPage) {
95 <dt>open</dt>105 <dt>open</dt>
96 <dd>being worked on</dd>106 <dd>being worked on</dd>
97 <dt>closed</dt>107 <dt>closed</dt>
98- <dd>done with, can be reopened</dd>108+ <dd>closed without resolution</dd>
109+ <dt>resolved</dt>
110+ <dd>fixed, can be reopened</dd>
99 </dl>111 </dl>
100 </section>112 </section>
101 if p.NewHref != "" {113 if p.NewHref != "" {
@@ -149,9 +161,9 @@ templ IssueShow(l Layout, p IssuePage) {
149 { " · " }<time datetime={ p.Opened.WhenAt } title={ p.Opened.Abs }>{ p.Opened.When }</time>161 { " · " }<time datetime={ p.Opened.WhenAt } title={ p.Opened.Abs }>{ p.Opened.When }</time>
150 }162 }
151 </dd>163 </dd>
152- if p.ClosedBy != nil {164+ if p.ResolvedBy != nil {
153- <dt>closed by</dt>165+ <dt>resolved by</dt>
154- <dd><a class="ref" href={ templ.SafeURL(p.ClosedBy.Href) }>{ p.ClosedBy.Label }</a></dd>166+ <dd><a class="ref" href={ templ.SafeURL(p.ResolvedBy.Href) }>{ p.ResolvedBy.Label }</a></dd>
155 }167 }
156 if p.UpdatedAt != "" {168 if p.UpdatedAt != "" {
157 <dt>updated</dt>169 <dt>updated</dt>
@@ -169,9 +181,7 @@ templ IssueShow(l Layout, p IssuePage) {
169 @LiveSlot("mr-notice")181 @LiveSlot("mr-notice")
170 }182 }
171 <h2 class="rule-h" id="comments"><span>Comments</span><span class="count">{ itoa(len(p.Comments)) }</span></h2>183 <h2 class="rule-h" id="comments"><span>Comments</span><span class="count">{ itoa(len(p.Comments)) }</span></h2>
172- for _, c := range p.Comments {184+ @issueTimeline(p.Timeline)
173- @commentView(c, "")
174- }
175 if len(p.Comments) == 0 {185 if len(p.Comments) == 0 {
176 <p class="dim">no comments yet.</p>186 <p class="dim">no comments yet.</p>
177 }187 }
@@ -192,7 +202,7 @@ templ issueRail(p IssuePage) {
192 { " " + r.Title + " " }202 { " " + r.Title + " " }
193 <span class="mr-state" data-state={ r.State }>{ r.State }</span>203 <span class="mr-state" data-state={ r.State }>{ r.State }</span>
194 if r.Closes {204 if r.Closes {
195- { " · closes" }205+ { " · resolves" }
196 }206 }
197 </li>207 </li>
198 }208 }
M internal/adapters/web/issues_templ.go +288 -257 generated file: collapsed
M internal/adapters/web/issues_test.go +93 -4
@@ -304,6 +304,9 @@ func TestIssueLiveNotices(t *testing.T) {
304304 }{
305305 {domain.IssueOpened{Issue: issue}, "issues", "", "issues changed"},
306306 {domain.IssueClosed{Issue: issue}, "issues", "", "issues changed"},
307+ {domain.IssueResolved{Issue: issue}, "issues", "", "issues changed"},
308+ {domain.IssueResolved{Issue: issue}, "issue", "5", "this issue was resolved"},
309+ {domain.IssueResolved{Issue: issue}, "issue", "6", ""},
307310 {domain.IssueOpened{Issue: issue}, "issue", "5", "an issue was opened"},
308311 {domain.IssueClosed{Issue: issue}, "issue", "5", "this issue was closed"},
309312 {domain.IssueReopened{Issue: issue}, "issue", "5", "this issue was reopened"},
@@ -338,7 +341,7 @@ func TestIssueShowReferences(t *testing.T) {
338341 r := newIssueRig(t, domain.IssuesPublic, true)
339342 title, err := domain.ParseMRTitle("fix <b>it</b>")
340343 require.NoError(t, err)
341- issue := testIssue(t, 5, domain.IssueStateClosed, "bug", "see #7 and #8")
344+ issue := testIssue(t, 5, domain.IssueStateResolved, "bug", "see #7 and #8")
342345 issue.ClosedByMergeRequest = 2
343346 r.issues.EXPECT().Get(mock.Anything, mock.Anything, repoName(t, "proj"), int64(5)).Return(ports.IssueDetail{
344347 Issue: issue,
@@ -353,12 +356,12 @@ func TestIssueShowReferences(t *testing.T) {
353356 rec := r.do("GET", "/proj/issues/5", false, nil)
354357 require.Equal(t, 200, rec.Code, rec.Body.String())
355358 body := rec.Body.String()
356- assert.Contains(t, body, "closed by")
359+ assert.Contains(t, body, "resolved by")
357360 assert.Contains(t, body, `href="/proj/merge-requests/2"`)
358361 assert.Contains(t, body, ">!2<")
359362 assert.Contains(t, body, ">!3<")
360363 assert.Contains(t, body, `id="r-refs"`)
361- assert.Contains(t, body, "closes")
364+ assert.Contains(t, body, "resolves")
362365 assert.Contains(t, body, "fix &lt;b&gt;it&lt;/b&gt;")
363366 assert.Contains(t, body, `href="/proj/merge-requests/7"`, "#7 in the body")
364367 assert.Contains(t, body, `title="merge request 7"`)
@@ -373,5 +376,91 @@ func TestIssueShowWithoutReferences(t *testing.T) {
373376 }, nil)
374377 body := r.do("GET", "/proj/issues/5", false, nil).Body.String()
375378 assert.NotContains(t, body, "r-refs")
376- assert.NotContains(t, body, "closed by")
379+ assert.NotContains(t, body, "resolved by")
380+}
381+
382+func TestIssueResolvedList(t *testing.T) {
383+ t.Parallel()
384+ r := newIssueRig(t, domain.IssuesOwner, false)
385+ for _, token := range []string{"", "next"} {
386+ r.issues.EXPECT().List(mock.Anything, mock.Anything, repoName(t, "proj"), ports.ListIssuesParams{State: domain.IssueStateResolved, PageSize: pageSize, PageToken: token}).Return(ports.IssuePage{Issues: []domain.Issue{testIssue(t, 5, domain.IssueStateResolved, "fixed", "")}, NextPageToken: "next"}, nil)
387+ path := "/proj/issues?state=resolved"
388+ if token != "" {
389+ path += "&page=" + token
390+ }
391+ rec := r.do("GET", path, false, nil)
392+ require.Equal(t, 200, rec.Code)
393+ body := rec.Body.String()
394+ assert.Contains(t, body, `href="/proj/issues?state=resolved" aria-current="page"`)
395+ assert.Contains(t, body, `data-state="resolved"`)
396+ assert.Contains(t, body, `href="/proj/issues?page=next&amp;state=resolved"`)
397+ }
398+}
399+
400+func TestIssueResolvedTimeline(t *testing.T) {
401+ t.Parallel()
402+ r := newIssueRig(t, domain.IssuesOwner, false)
403+ at := time.Date(2026, 1, 2, 12, 0, 0, 123, time.UTC)
404+ issue := testIssue(t, 5, domain.IssueStateResolved, "fixed", "")
405+ issue.ClosedByMergeRequest = 12
406+ text, err := domain.ParseIssueBody("comment between events")
407+ require.NoError(t, err)
408+ title, err := domain.ParseMRTitle("Fix login")
409+ require.NoError(t, err)
410+ r.issues.EXPECT().Get(mock.Anything, mock.Anything, mock.Anything, int64(5)).Return(ports.IssueDetail{
411+ Issue: issue,
412+ Comments: []domain.IssueComment{{ID: 7, Author: "owner", Text: text, CreatedAt: at}},
413+ Events: []ports.IssueEventDetail{
414+ {Event: domain.IssueEvent{ID: 1, Kind: domain.IssueEventReferenced, MergeRequest: 12, Actor: "owner", CreatedAt: at.Add(-time.Second)}, MergeRequestTitle: title},
415+ {Event: domain.IssueEvent{ID: 2, Kind: domain.IssueEventResolved, MergeRequest: 12, Actor: "owner", CreatedAt: at}, MergeRequestTitle: title},
416+ },
417+ }, nil)
418+ for _, owner := range []bool{false, true} {
419+ rec := r.do("GET", "/proj/issues/5", owner, nil)
420+ require.Equal(t, 200, rec.Code)
421+ body := rec.Body.String()
422+ assert.Contains(t, body, `data-state="resolved"`)
423+ assert.Contains(t, body, "resolved by")
424+ assert.Contains(t, body, "!12 Fix login")
425+ assert.Contains(t, body, `datetime="2026-01-02T12:00:00Z"`)
426+ assert.Less(t, strings.Index(body, `id="e1"`), strings.Index(body, `id="c7"`))
427+ assert.Less(t, strings.Index(body, `id="c7"`), strings.Index(body, `id="e2"`), "comment precedes event on exact timestamp tie")
428+ assert.NotContains(t, body, `/5/resolve`)
429+ assert.NotContains(t, body, `/5/close`)
430+ if owner {
431+ assert.Contains(t, body, `action="/proj/issues/5/reopen"`)
432+ } else {
433+ assert.NotContains(t, body, `/5/reopen`)
434+ }
435+ }
436+}
437+
438+func TestIssueHistoryEventKinds(t *testing.T) {
439+ t.Parallel()
440+ s := &Server{cfg: Config{Now: time.Now}}
441+ for _, tc := range []struct {
442+ kind domain.IssueEventKind
443+ mr int64
444+ closes bool
445+ text string
446+ }{
447+ {domain.IssueEventReferenced, 12, false, "referenced this in"},
448+ {domain.IssueEventReferenced, 12, true, "will resolve this in"},
449+ {domain.IssueEventClosed, 0, false, "closed this"},
450+ {domain.IssueEventReopened, 0, false, "reopened this"},
451+ {domain.IssueEventResolved, 0, false, "resolved this"},
452+ {domain.IssueEventResolved, 12, false, "resolved this with"},
453+ } {
454+ items := s.issueTimeline("proj", nil, []ports.IssueEventDetail{{Event: domain.IssueEvent{ID: 1, Kind: tc.kind, MergeRequest: tc.mr, Closes: tc.closes, Actor: "owner", CreatedAt: time.Now()}}}, false)
455+ require.Len(t, items, 1)
456+ body := renderToString(t, issueTimeline(items))
457+ assert.Contains(t, body, "owner "+tc.text)
458+ assert.Contains(t, body, `data-kind="`+string(tc.kind)+`"`)
459+ assert.Contains(t, body, `<ol class="timeline" aria-label="Conversation history">`)
460+ if tc.mr != 0 {
461+ assert.Contains(t, body, `href="/proj/merge-requests/12">!12</a>`)
462+ } else {
463+ assert.NotContains(t, body, `/merge-requests/`)
464+ }
465+ }
377466 }
@@ -304,6 +304,9 @@ func TestIssueLiveNotices(t *testing.T) {
304 }{304 }{
305 {domain.IssueOpened{Issue: issue}, "issues", "", "issues changed"},305 {domain.IssueOpened{Issue: issue}, "issues", "", "issues changed"},
306 {domain.IssueClosed{Issue: issue}, "issues", "", "issues changed"},306 {domain.IssueClosed{Issue: issue}, "issues", "", "issues changed"},
307+ {domain.IssueResolved{Issue: issue}, "issues", "", "issues changed"},
308+ {domain.IssueResolved{Issue: issue}, "issue", "5", "this issue was resolved"},
309+ {domain.IssueResolved{Issue: issue}, "issue", "6", ""},
307 {domain.IssueOpened{Issue: issue}, "issue", "5", "an issue was opened"},310 {domain.IssueOpened{Issue: issue}, "issue", "5", "an issue was opened"},
308 {domain.IssueClosed{Issue: issue}, "issue", "5", "this issue was closed"},311 {domain.IssueClosed{Issue: issue}, "issue", "5", "this issue was closed"},
309 {domain.IssueReopened{Issue: issue}, "issue", "5", "this issue was reopened"},312 {domain.IssueReopened{Issue: issue}, "issue", "5", "this issue was reopened"},
@@ -338,7 +341,7 @@ func TestIssueShowReferences(t *testing.T) {
338 r := newIssueRig(t, domain.IssuesPublic, true)341 r := newIssueRig(t, domain.IssuesPublic, true)
339 title, err := domain.ParseMRTitle("fix <b>it</b>")342 title, err := domain.ParseMRTitle("fix <b>it</b>")
340 require.NoError(t, err)343 require.NoError(t, err)
341- issue := testIssue(t, 5, domain.IssueStateClosed, "bug", "see #7 and #8")344+ issue := testIssue(t, 5, domain.IssueStateResolved, "bug", "see #7 and #8")
342 issue.ClosedByMergeRequest = 2345 issue.ClosedByMergeRequest = 2
343 r.issues.EXPECT().Get(mock.Anything, mock.Anything, repoName(t, "proj"), int64(5)).Return(ports.IssueDetail{346 r.issues.EXPECT().Get(mock.Anything, mock.Anything, repoName(t, "proj"), int64(5)).Return(ports.IssueDetail{
344 Issue: issue,347 Issue: issue,
@@ -353,12 +356,12 @@ func TestIssueShowReferences(t *testing.T) {
353 rec := r.do("GET", "/proj/issues/5", false, nil)356 rec := r.do("GET", "/proj/issues/5", false, nil)
354 require.Equal(t, 200, rec.Code, rec.Body.String())357 require.Equal(t, 200, rec.Code, rec.Body.String())
355 body := rec.Body.String()358 body := rec.Body.String()
356- assert.Contains(t, body, "closed by")359+ assert.Contains(t, body, "resolved by")
357 assert.Contains(t, body, `href="/proj/merge-requests/2"`)360 assert.Contains(t, body, `href="/proj/merge-requests/2"`)
358 assert.Contains(t, body, ">!2<")361 assert.Contains(t, body, ">!2<")
359 assert.Contains(t, body, ">!3<")362 assert.Contains(t, body, ">!3<")
360 assert.Contains(t, body, `id="r-refs"`)363 assert.Contains(t, body, `id="r-refs"`)
361- assert.Contains(t, body, "closes")364+ assert.Contains(t, body, "resolves")
362 assert.Contains(t, body, "fix &lt;b&gt;it&lt;/b&gt;")365 assert.Contains(t, body, "fix &lt;b&gt;it&lt;/b&gt;")
363 assert.Contains(t, body, `href="/proj/merge-requests/7"`, "#7 in the body")366 assert.Contains(t, body, `href="/proj/merge-requests/7"`, "#7 in the body")
364 assert.Contains(t, body, `title="merge request 7"`)367 assert.Contains(t, body, `title="merge request 7"`)
@@ -373,5 +376,91 @@ func TestIssueShowWithoutReferences(t *testing.T) {
373 }, nil)376 }, nil)
374 body := r.do("GET", "/proj/issues/5", false, nil).Body.String()377 body := r.do("GET", "/proj/issues/5", false, nil).Body.String()
375 assert.NotContains(t, body, "r-refs")378 assert.NotContains(t, body, "r-refs")
376- assert.NotContains(t, body, "closed by")379+ assert.NotContains(t, body, "resolved by")
380+}
381+
382+func TestIssueResolvedList(t *testing.T) {
383+ t.Parallel()
384+ r := newIssueRig(t, domain.IssuesOwner, false)
385+ for _, token := range []string{"", "next"} {
386+ r.issues.EXPECT().List(mock.Anything, mock.Anything, repoName(t, "proj"), ports.ListIssuesParams{State: domain.IssueStateResolved, PageSize: pageSize, PageToken: token}).Return(ports.IssuePage{Issues: []domain.Issue{testIssue(t, 5, domain.IssueStateResolved, "fixed", "")}, NextPageToken: "next"}, nil)
387+ path := "/proj/issues?state=resolved"
388+ if token != "" {
389+ path += "&page=" + token
390+ }
391+ rec := r.do("GET", path, false, nil)
392+ require.Equal(t, 200, rec.Code)
393+ body := rec.Body.String()
394+ assert.Contains(t, body, `href="/proj/issues?state=resolved" aria-current="page"`)
395+ assert.Contains(t, body, `data-state="resolved"`)
396+ assert.Contains(t, body, `href="/proj/issues?page=next&amp;state=resolved"`)
397+ }
398+}
399+
400+func TestIssueResolvedTimeline(t *testing.T) {
401+ t.Parallel()
402+ r := newIssueRig(t, domain.IssuesOwner, false)
403+ at := time.Date(2026, 1, 2, 12, 0, 0, 123, time.UTC)
404+ issue := testIssue(t, 5, domain.IssueStateResolved, "fixed", "")
405+ issue.ClosedByMergeRequest = 12
406+ text, err := domain.ParseIssueBody("comment between events")
407+ require.NoError(t, err)
408+ title, err := domain.ParseMRTitle("Fix login")
409+ require.NoError(t, err)
410+ r.issues.EXPECT().Get(mock.Anything, mock.Anything, mock.Anything, int64(5)).Return(ports.IssueDetail{
411+ Issue: issue,
412+ Comments: []domain.IssueComment{{ID: 7, Author: "owner", Text: text, CreatedAt: at}},
413+ Events: []ports.IssueEventDetail{
414+ {Event: domain.IssueEvent{ID: 1, Kind: domain.IssueEventReferenced, MergeRequest: 12, Actor: "owner", CreatedAt: at.Add(-time.Second)}, MergeRequestTitle: title},
415+ {Event: domain.IssueEvent{ID: 2, Kind: domain.IssueEventResolved, MergeRequest: 12, Actor: "owner", CreatedAt: at}, MergeRequestTitle: title},
416+ },
417+ }, nil)
418+ for _, owner := range []bool{false, true} {
419+ rec := r.do("GET", "/proj/issues/5", owner, nil)
420+ require.Equal(t, 200, rec.Code)
421+ body := rec.Body.String()
422+ assert.Contains(t, body, `data-state="resolved"`)
423+ assert.Contains(t, body, "resolved by")
424+ assert.Contains(t, body, "!12 Fix login")
425+ assert.Contains(t, body, `datetime="2026-01-02T12:00:00Z"`)
426+ assert.Less(t, strings.Index(body, `id="e1"`), strings.Index(body, `id="c7"`))
427+ assert.Less(t, strings.Index(body, `id="c7"`), strings.Index(body, `id="e2"`), "comment precedes event on exact timestamp tie")
428+ assert.NotContains(t, body, `/5/resolve`)
429+ assert.NotContains(t, body, `/5/close`)
430+ if owner {
431+ assert.Contains(t, body, `action="/proj/issues/5/reopen"`)
432+ } else {
433+ assert.NotContains(t, body, `/5/reopen`)
434+ }
435+ }
436+}
437+
438+func TestIssueHistoryEventKinds(t *testing.T) {
439+ t.Parallel()
440+ s := &Server{cfg: Config{Now: time.Now}}
441+ for _, tc := range []struct {
442+ kind domain.IssueEventKind
443+ mr int64
444+ closes bool
445+ text string
446+ }{
447+ {domain.IssueEventReferenced, 12, false, "referenced this in"},
448+ {domain.IssueEventReferenced, 12, true, "will resolve this in"},
449+ {domain.IssueEventClosed, 0, false, "closed this"},
450+ {domain.IssueEventReopened, 0, false, "reopened this"},
451+ {domain.IssueEventResolved, 0, false, "resolved this"},
452+ {domain.IssueEventResolved, 12, false, "resolved this with"},
453+ } {
454+ items := s.issueTimeline("proj", nil, []ports.IssueEventDetail{{Event: domain.IssueEvent{ID: 1, Kind: tc.kind, MergeRequest: tc.mr, Closes: tc.closes, Actor: "owner", CreatedAt: time.Now()}}}, false)
455+ require.Len(t, items, 1)
456+ body := renderToString(t, issueTimeline(items))
457+ assert.Contains(t, body, "owner "+tc.text)
458+ assert.Contains(t, body, `data-kind="`+string(tc.kind)+`"`)
459+ assert.Contains(t, body, `<ol class="timeline" aria-label="Conversation history">`)
460+ if tc.mr != 0 {
461+ assert.Contains(t, body, `href="/proj/merge-requests/12">!12</a>`)
462+ } else {
463+ assert.NotContains(t, body, `/merge-requests/`)
464+ }
465+ }
377 }466 }
M internal/adapters/web/mr.go +22 -1
@@ -99,6 +99,7 @@ type MRListPage struct {
9999
100100 // CommentView is a comment of a merge request, ready to show.
101101 type CommentView struct {
102+ createdAt time.Time
102103 ID string
103104 Author string
104105 When string
@@ -296,6 +297,8 @@ type MRPage struct {
296297 // loaded later) the loose comments of a listed file go under the file
297298 // instead (DiffFile.Loose).
298299 General, Loose []CommentView
300+ Timeline []TimelineItem
301+ Issues []IssueLinkView
299302 LooseInFiles bool
300303 NComments int
301304 NUnresolved int
@@ -634,6 +637,24 @@ func (s *Server) mrPageView(ctx context.Context, r *http.Request, since, fragmen
634637 on = parseOn(r.URL.Query().Get("on"))
635638 }
636639 s.placeComments(ctx, &p, d.name(), n, res.Comments, head, !since, canWrite, on)
640+ p.Timeline = s.issueTimeline(d.name(), p.General, res.IssueEvents, true)
641+ // Event DTOs carry MR titles, not issue titles. Enrich from current links
642+ // when available; removed references still retain a numbered history link.
643+ issueTitles := make(map[string]string, len(res.Issues))
644+ for _, issue := range res.Issues {
645+ issueTitles[issueHref(d.name(), issue.Number)] = visibleText(issue.Title.String())
646+ }
647+ for _, item := range p.Timeline {
648+ if item.Event != nil && item.Event.MR != nil {
649+ if title := issueTitles[item.Event.MR.Href]; title != "" {
650+ item.Event.MR.Label += " " + title
651+ }
652+ }
653+ }
654+ for _, issue := range res.Issues {
655+ p.Issues = append(p.Issues, IssueLinkView{Number: "#" + strconv.FormatInt(issue.Number, 10), Title: visibleText(issue.Title.String()), State: string(issue.State), Href: issueHref(d.name(), issue.Number), Closes: issue.Closes})
656+ }
657+
637658 lines, invisible := diffLines(p.Files)
638659 p.Invisible = invisible
639660 p.DiffView = newDiffView(r, lines, withFrom(self+"?view=unified", from), withFrom(self+"?view=split", from))
@@ -1010,7 +1031,7 @@ func (s *Server) placeComments(ctx context.Context, p *MRPage, repo string, n in
10101031 if err != nil {
10111032 bodySplit = ""
10121033 }
1013- v := CommentView{BodySplit: bodySplit, ID: cid, Author: s.who(c.Author), Body: body, Resolved: c.Resolved, Deleted: c.Deleted, Edited: !c.EditedAt.IsZero(), Verdict: c.Verdict.String(), Outdated: !c.CommitID.IsZero() && c.CommitID.String() != head}
1034+ v := CommentView{createdAt: c.CreatedAt, BodySplit: bodySplit, ID: cid, Author: s.who(c.Author), Body: body, Resolved: c.Resolved, Deleted: c.Deleted, Edited: !c.EditedAt.IsZero(), Verdict: c.Verdict.String(), Outdated: !c.CommitID.IsZero() && c.CommitID.String() != head}
10141035 v.When, v.WhenAt = whenOf(now, c.CreatedAt)
10151036 if !c.CreatedAt.IsZero() {
10161037 v.Abs = absolute(c.CreatedAt)
@@ -99,6 +99,7 @@ type MRListPage struct {
99 99
100 // CommentView is a comment of a merge request, ready to show.100 // CommentView is a comment of a merge request, ready to show.
101 type CommentView struct {101 type CommentView struct {
102+ createdAt time.Time
102 ID string103 ID string
103 Author string104 Author string
104 When string105 When string
@@ -296,6 +297,8 @@ type MRPage struct {
296 // loaded later) the loose comments of a listed file go under the file297 // loaded later) the loose comments of a listed file go under the file
297 // instead (DiffFile.Loose).298 // instead (DiffFile.Loose).
298 General, Loose []CommentView299 General, Loose []CommentView
300+ Timeline []TimelineItem
301+ Issues []IssueLinkView
299 LooseInFiles bool302 LooseInFiles bool
300 NComments int303 NComments int
301 NUnresolved int304 NUnresolved int
@@ -634,6 +637,24 @@ func (s *Server) mrPageView(ctx context.Context, r *http.Request, since, fragmen
634 on = parseOn(r.URL.Query().Get("on"))637 on = parseOn(r.URL.Query().Get("on"))
635 }638 }
636 s.placeComments(ctx, &p, d.name(), n, res.Comments, head, !since, canWrite, on)639 s.placeComments(ctx, &p, d.name(), n, res.Comments, head, !since, canWrite, on)
640+ p.Timeline = s.issueTimeline(d.name(), p.General, res.IssueEvents, true)
641+ // Event DTOs carry MR titles, not issue titles. Enrich from current links
642+ // when available; removed references still retain a numbered history link.
643+ issueTitles := make(map[string]string, len(res.Issues))
644+ for _, issue := range res.Issues {
645+ issueTitles[issueHref(d.name(), issue.Number)] = visibleText(issue.Title.String())
646+ }
647+ for _, item := range p.Timeline {
648+ if item.Event != nil && item.Event.MR != nil {
649+ if title := issueTitles[item.Event.MR.Href]; title != "" {
650+ item.Event.MR.Label += " " + title
651+ }
652+ }
653+ }
654+ for _, issue := range res.Issues {
655+ p.Issues = append(p.Issues, IssueLinkView{Number: "#" + strconv.FormatInt(issue.Number, 10), Title: visibleText(issue.Title.String()), State: string(issue.State), Href: issueHref(d.name(), issue.Number), Closes: issue.Closes})
656+ }
657+
637 lines, invisible := diffLines(p.Files)658 lines, invisible := diffLines(p.Files)
638 p.Invisible = invisible659 p.Invisible = invisible
639 p.DiffView = newDiffView(r, lines, withFrom(self+"?view=unified", from), withFrom(self+"?view=split", from))660 p.DiffView = newDiffView(r, lines, withFrom(self+"?view=unified", from), withFrom(self+"?view=split", from))
@@ -1010,7 +1031,7 @@ func (s *Server) placeComments(ctx context.Context, p *MRPage, repo string, n in
1010 if err != nil {1031 if err != nil {
1011 bodySplit = ""1032 bodySplit = ""
1012 }1033 }
1013- v := CommentView{BodySplit: bodySplit, ID: cid, Author: s.who(c.Author), Body: body, Resolved: c.Resolved, Deleted: c.Deleted, Edited: !c.EditedAt.IsZero(), Verdict: c.Verdict.String(), Outdated: !c.CommitID.IsZero() && c.CommitID.String() != head}1034+ v := CommentView{createdAt: c.CreatedAt, BodySplit: bodySplit, ID: cid, Author: s.who(c.Author), Body: body, Resolved: c.Resolved, Deleted: c.Deleted, Edited: !c.EditedAt.IsZero(), Verdict: c.Verdict.String(), Outdated: !c.CommitID.IsZero() && c.CommitID.String() != head}
1014 v.When, v.WhenAt = whenOf(now, c.CreatedAt)1035 v.When, v.WhenAt = whenOf(now, c.CreatedAt)
1015 if !c.CreatedAt.IsZero() {1036 if !c.CreatedAt.IsZero() {
1016 v.Abs = absolute(c.CreatedAt)1037 v.Abs = absolute(c.CreatedAt)
M internal/adapters/web/mr.templ +21 -7
@@ -214,9 +214,7 @@ templ MergeRequest(l Layout, p MRPage) {
214214 for _, c := range p.Loose {
215215 @commentView(c, "")
216216 }
217- for _, c := range p.General {
218- @commentView(c, "")
219- }
217+ @issueTimeline(p.Timeline)
220218 if p.NComments == 0 {
221219 <p class="dim">no comments yet.</p>
222220 }
@@ -267,7 +265,8 @@ templ commentView(c CommentView, suffix string) {
267265 }
268266 </p>
269267 if len(c.Parts) > 0 {
270- <p class="c-text">@userText(c.Parts)</p>
268+ <p class="c-text">@userText(c.Parts)
269+</p>
271270 } else if c.Deleted {
272271 if c.Verdict != "" {
273272 <p class="mute">text deleted</p>
@@ -428,6 +427,21 @@ templ mrFooter(p MRPage) {
428427 }
429428
430429 templ mrRail(p MRPage) {
430+ if len(p.Issues) > 0 {
431+ <section aria-labelledby="r-issues">
432+ <h2 id="r-issues">Issues</h2>
433+ <ul>
434+ for _, i := range p.Issues {
435+ <li>
436+ <a class="ref" href={ templ.SafeURL(i.Href) }>{ i.Number } { i.Title }</a>{ " " }<span class="mr-state" data-state={ i.State }>{ i.State }</span>
437+ if i.Closes {
438+ { " · resolves" }
439+ }
440+ </li>
441+ }
442+ </ul>
443+ </section>
444+ }
431445 <section aria-labelledby="r-files" class="r-files">
432446 <h2 id="r-files">
433447 Files <span class="count">{ itoa(len(p.Files)) }</span><kbd aria-hidden="true">l</kbd>
@@ -808,7 +822,7 @@ templ mrActions(p MRPage, fragment bool) {
808822
809823 // MRActionStatus remains visible even when the request detail cannot be read.
810824 templ MRActionStatus(message, href string) {
811- <div id="mr-actions" class="mr-acts" hx-swap-oob="true">
812- <p class="d-err" role="alert">{ message } <a href={ templ.SafeURL(href) }>reload</a></p>
813- </div>
825+ <div id="mr-actions" class="mr-acts" hx-swap-oob="true">
826+ <p class="d-err" role="alert">{ message } <a href={ templ.SafeURL(href) }>reload</a></p>
827+ </div>
814828 }
@@ -214,9 +214,7 @@ templ MergeRequest(l Layout, p MRPage) {
214 for _, c := range p.Loose {214 for _, c := range p.Loose {
215 @commentView(c, "")215 @commentView(c, "")
216 }216 }
217- for _, c := range p.General {217+ @issueTimeline(p.Timeline)
218- @commentView(c, "")
219- }
220 if p.NComments == 0 {218 if p.NComments == 0 {
221 <p class="dim">no comments yet.</p>219 <p class="dim">no comments yet.</p>
222 }220 }
@@ -267,7 +265,8 @@ templ commentView(c CommentView, suffix string) {
267 }265 }
268 </p>266 </p>
269 if len(c.Parts) > 0 {267 if len(c.Parts) > 0 {
270- <p class="c-text">@userText(c.Parts)</p>268+ <p class="c-text">@userText(c.Parts)
269+</p>
271 } else if c.Deleted {270 } else if c.Deleted {
272 if c.Verdict != "" {271 if c.Verdict != "" {
273 <p class="mute">text deleted</p>272 <p class="mute">text deleted</p>
@@ -428,6 +427,21 @@ templ mrFooter(p MRPage) {
428 }427 }
429 428
430 templ mrRail(p MRPage) {429 templ mrRail(p MRPage) {
430+ if len(p.Issues) > 0 {
431+ <section aria-labelledby="r-issues">
432+ <h2 id="r-issues">Issues</h2>
433+ <ul>
434+ for _, i := range p.Issues {
435+ <li>
436+ <a class="ref" href={ templ.SafeURL(i.Href) }>{ i.Number } { i.Title }</a>{ " " }<span class="mr-state" data-state={ i.State }>{ i.State }</span>
437+ if i.Closes {
438+ { " · resolves" }
439+ }
440+ </li>
441+ }
442+ </ul>
443+ </section>
444+ }
431 <section aria-labelledby="r-files" class="r-files">445 <section aria-labelledby="r-files" class="r-files">
432 <h2 id="r-files">446 <h2 id="r-files">
433 Files <span class="count">{ itoa(len(p.Files)) }</span><kbd aria-hidden="true">l</kbd>447 Files <span class="count">{ itoa(len(p.Files)) }</span><kbd aria-hidden="true">l</kbd>
@@ -808,7 +822,7 @@ templ mrActions(p MRPage, fragment bool) {
808 822
809 // MRActionStatus remains visible even when the request detail cannot be read.823 // MRActionStatus remains visible even when the request detail cannot be read.
810 templ MRActionStatus(message, href string) {824 templ MRActionStatus(message, href string) {
811- <div id="mr-actions" class="mr-acts" hx-swap-oob="true">825+ <div id="mr-actions" class="mr-acts" hx-swap-oob="true">
812- <p class="d-err" role="alert">{ message } <a href={ templ.SafeURL(href) }>reload</a></p>826+ <p class="d-err" role="alert">{ message } <a href={ templ.SafeURL(href) }>reload</a></p>
813- </div>827+ </div>
814 }828 }
M internal/adapters/web/mr_templ.go +725 -618
@@ -1088,11 +1088,9 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
10881088 return templ_7745c5c3_Err
10891089 }
10901090 }
1091- for _, c := range p.General {
1092- templ_7745c5c3_Err = commentView(c, "").Render(ctx, templ_7745c5c3_Buffer)
1093- if templ_7745c5c3_Err != nil {
1094- return templ_7745c5c3_Err
1095- }
1091+ templ_7745c5c3_Err = issueTimeline(p.Timeline).Render(ctx, templ_7745c5c3_Buffer)
1092+ if templ_7745c5c3_Err != nil {
1093+ return templ_7745c5c3_Err
10961094 }
10971095 if p.NComments == 0 {
10981096 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<p class=\"dim\">no comments yet.</p>")
@@ -1149,7 +1147,7 @@ func branchLink(name, href string) templ.Component {
11491147 var templ_7745c5c3_Var51 templ.SafeURL
11501148 templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
11511149 if templ_7745c5c3_Err != nil {
1152- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 232, Col: 31}
1150+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 230, Col: 31}
11531151 }
11541152 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51))
11551153 if templ_7745c5c3_Err != nil {
@@ -1162,7 +1160,7 @@ func branchLink(name, href string) templ.Component {
11621160 var templ_7745c5c3_Var52 string
11631161 templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(name)
11641162 if templ_7745c5c3_Err != nil {
1165- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 232, Col: 40}
1163+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 230, Col: 40}
11661164 }
11671165 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))
11681166 if templ_7745c5c3_Err != nil {
@@ -1176,7 +1174,7 @@ func branchLink(name, href string) templ.Component {
11761174 var templ_7745c5c3_Var53 string
11771175 templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.JoinStringErrs(name)
11781176 if templ_7745c5c3_Err != nil {
1179- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 234, Col: 8}
1177+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 232, Col: 8}
11801178 }
11811179 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var53))
11821180 if templ_7745c5c3_Err != nil {
@@ -1257,7 +1255,7 @@ func commentView(c CommentView, suffix string) templ.Component {
12571255 var templ_7745c5c3_Var56 string
12581256 templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.ResolveAttributeValue("c" + c.ID + suffix)
12591257 if templ_7745c5c3_Err != nil {
1260- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 253, Col: 42}
1258+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 251, Col: 42}
12611259 }
12621260 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var56)
12631261 if templ_7745c5c3_Err != nil {
@@ -1270,7 +1268,7 @@ func commentView(c CommentView, suffix string) templ.Component {
12701268 var templ_7745c5c3_Var57 string
12711269 templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolved))
12721270 if templ_7745c5c3_Err != nil {
1273- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 253, Col: 81}
1271+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 251, Col: 81}
12741272 }
12751273 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var57)
12761274 if templ_7745c5c3_Err != nil {
@@ -1293,7 +1291,7 @@ func commentView(c CommentView, suffix string) templ.Component {
12931291 var templ_7745c5c3_Var58 string
12941292 templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
12951293 if templ_7745c5c3_Err != nil {
1296- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 255, Col: 33}
1294+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 253, Col: 33}
12971295 }
12981296 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))
12991297 if templ_7745c5c3_Err != nil {
@@ -1307,7 +1305,7 @@ func commentView(c CommentView, suffix string) templ.Component {
13071305 var templ_7745c5c3_Var59 string
13081306 templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
13091307 if templ_7745c5c3_Err != nil {
1310- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 257, Col: 9}
1308+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 255, Col: 9}
13111309 }
13121310 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))
13131311 if templ_7745c5c3_Err != nil {
@@ -1320,7 +1318,7 @@ func commentView(c CommentView, suffix string) templ.Component {
13201318 var templ_7745c5c3_Var60 string
13211319 templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
13221320 if templ_7745c5c3_Err != nil {
1323- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 257, Col: 49}
1321+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 255, Col: 49}
13241322 }
13251323 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var60)
13261324 if templ_7745c5c3_Err != nil {
@@ -1333,7 +1331,7 @@ func commentView(c CommentView, suffix string) templ.Component {
13331331 var templ_7745c5c3_Var61 string
13341332 templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Abs)
13351333 if templ_7745c5c3_Err != nil {
1336- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 257, Col: 65}
1334+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 255, Col: 65}
13371335 }
13381336 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var61)
13391337 if templ_7745c5c3_Err != nil {
@@ -1346,7 +1344,7 @@ func commentView(c CommentView, suffix string) templ.Component {
13461344 var templ_7745c5c3_Var62 string
13471345 templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
13481346 if templ_7745c5c3_Err != nil {
1349- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 257, Col: 76}
1347+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 255, Col: 76}
13501348 }
13511349 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
13521350 if templ_7745c5c3_Err != nil {
@@ -1361,7 +1359,7 @@ func commentView(c CommentView, suffix string) templ.Component {
13611359 var templ_7745c5c3_Var63 string
13621360 templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
13631361 if templ_7745c5c3_Err != nil {
1364- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 260, Col: 9}
1362+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 9}
13651363 }
13661364 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
13671365 if templ_7745c5c3_Err != nil {
@@ -1376,7 +1374,7 @@ func commentView(c CommentView, suffix string) templ.Component {
13761374 var templ_7745c5c3_Var64 string
13771375 templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
13781376 if templ_7745c5c3_Err != nil {
1379- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 263, Col: 9}
1377+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 261, Col: 9}
13801378 }
13811379 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
13821380 if templ_7745c5c3_Err != nil {
@@ -1391,7 +1389,7 @@ func commentView(c CommentView, suffix string) templ.Component {
13911389 var templ_7745c5c3_Var65 string
13921390 templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
13931391 if templ_7745c5c3_Err != nil {
1394- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 266, Col: 9}
1392+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 264, Col: 9}
13951393 }
13961394 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
13971395 if templ_7745c5c3_Err != nil {
@@ -1404,7 +1402,7 @@ func commentView(c CommentView, suffix string) templ.Component {
14041402 var templ_7745c5c3_Var66 string
14051403 templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinStringErrs(c.Where)
14061404 if templ_7745c5c3_Err != nil {
1407- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 266, Col: 47}
1405+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 264, Col: 47}
14081406 }
14091407 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
14101408 if templ_7745c5c3_Err != nil {
@@ -1479,7 +1477,7 @@ func commentView(c CommentView, suffix string) templ.Component {
14791477 var templ_7745c5c3_Var67 string
14801478 templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(c.Verdict)
14811479 if templ_7745c5c3_Err != nil {
1482- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 290, Col: 36}
1480+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 289, Col: 36}
14831481 }
14841482 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
14851483 if templ_7745c5c3_Err != nil {
@@ -1498,7 +1496,7 @@ func commentView(c CommentView, suffix string) templ.Component {
14981496 var templ_7745c5c3_Var68 string
14991497 templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(c.Range)
15001498 if templ_7745c5c3_Err != nil {
1501- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 293, Col: 31}
1499+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 292, Col: 31}
15021500 }
15031501 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
15041502 if templ_7745c5c3_Err != nil {
@@ -1517,7 +1515,7 @@ func commentView(c CommentView, suffix string) templ.Component {
15171515 var templ_7745c5c3_Var69 string
15181516 templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Quote)
15191517 if templ_7745c5c3_Err != nil {
1520- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 296, Col: 65}
1518+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 295, Col: 65}
15211519 }
15221520 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var69)
15231521 if templ_7745c5c3_Err != nil {
@@ -1536,7 +1534,7 @@ func commentView(c CommentView, suffix string) templ.Component {
15361534 var templ_7745c5c3_Var70 templ.SafeURL
15371535 templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Edit.Action))
15381536 if templ_7745c5c3_Err != nil {
1539- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 299, Col: 92}
1537+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 298, Col: 92}
15401538 }
15411539 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
15421540 if templ_7745c5c3_Err != nil {
@@ -1549,7 +1547,7 @@ func commentView(c CommentView, suffix string) templ.Component {
15491547 var templ_7745c5c3_Var71 string
15501548 templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Edit.From))
15511549 if templ_7745c5c3_Err != nil {
1552- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 299, Col: 153}
1550+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 298, Col: 153}
15531551 }
15541552 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var71)
15551553 if templ_7745c5c3_Err != nil {
@@ -1562,7 +1560,7 @@ func commentView(c CommentView, suffix string) templ.Component {
15621560 var templ_7745c5c3_Var72 string
15631561 templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(c.Edit.Text)
15641562 if templ_7745c5c3_Err != nil {
1565- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 299, Col: 232}
1563+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 298, Col: 232}
15661564 }
15671565 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72))
15681566 if templ_7745c5c3_Err != nil {
@@ -1581,7 +1579,7 @@ func commentView(c CommentView, suffix string) templ.Component {
15811579 var templ_7745c5c3_Var73 templ.SafeURL
15821580 templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Delete.Action))
15831581 if templ_7745c5c3_Err != nil {
1584- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 302, Col: 96}
1582+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 301, Col: 96}
15851583 }
15861584 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))
15871585 if templ_7745c5c3_Err != nil {
@@ -1594,7 +1592,7 @@ func commentView(c CommentView, suffix string) templ.Component {
15941592 var templ_7745c5c3_Var74 string
15951593 templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Delete.From))
15961594 if templ_7745c5c3_Err != nil {
1597- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 302, Col: 159}
1595+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 301, Col: 159}
15981596 }
15991597 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var74)
16001598 if templ_7745c5c3_Err != nil {
@@ -1633,7 +1631,7 @@ func commentView(c CommentView, suffix string) templ.Component {
16331631 var templ_7745c5c3_Var75 templ.SafeURL
16341632 templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Resolve.Action))
16351633 if templ_7745c5c3_Err != nil {
1636- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 313, Col: 77}
1634+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 312, Col: 77}
16371635 }
16381636 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var75))
16391637 if templ_7745c5c3_Err != nil {
@@ -1646,7 +1644,7 @@ func commentView(c CommentView, suffix string) templ.Component {
16461644 var templ_7745c5c3_Var76 string
16471645 templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolve.Value))
16481646 if templ_7745c5c3_Err != nil {
1649- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 314, Col: 74}
1647+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 313, Col: 74}
16501648 }
16511649 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var76)
16521650 if templ_7745c5c3_Err != nil {
@@ -1664,7 +1662,7 @@ func commentView(c CommentView, suffix string) templ.Component {
16641662 var templ_7745c5c3_Var77 string
16651663 templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Resolve.From))
16661664 if templ_7745c5c3_Err != nil {
1667- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 316, Col: 66}
1665+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 315, Col: 66}
16681666 }
16691667 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)
16701668 if templ_7745c5c3_Err != nil {
@@ -1682,7 +1680,7 @@ func commentView(c CommentView, suffix string) templ.Component {
16821680 var templ_7745c5c3_Var78 string
16831681 templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(c.Resolve.Label)
16841682 if templ_7745c5c3_Err != nil {
1685- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 318, Col: 55}
1683+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 317, Col: 55}
16861684 }
16871685 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))
16881686 if templ_7745c5c3_Err != nil {
@@ -1737,7 +1735,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
17371735 var templ_7745c5c3_Var80 templ.SafeURL
17381736 templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Action))
17391737 if templ_7745c5c3_Err != nil {
1740- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 333, Col: 67}
1738+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 332, Col: 67}
17411739 }
17421740 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var80))
17431741 if templ_7745c5c3_Err != nil {
@@ -1750,7 +1748,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
17501748 var templ_7745c5c3_Var81 string
17511749 templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
17521750 if templ_7745c5c3_Err != nil {
1753- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 334, Col: 28}
1751+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 333, Col: 28}
17541752 }
17551753 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var81)
17561754 if templ_7745c5c3_Err != nil {
@@ -1763,7 +1761,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
17631761 var templ_7745c5c3_Var82 string
17641762 templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.JoinStringErrs(f.Title)
17651763 if templ_7745c5c3_Err != nil {
1766- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 334, Col: 40}
1764+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 333, Col: 40}
17671765 }
17681766 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var82))
17691767 if templ_7745c5c3_Err != nil {
@@ -1776,7 +1774,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
17761774 var templ_7745c5c3_Var83 string
17771775 templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
17781776 if templ_7745c5c3_Err != nil {
1779- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 336, Col: 21}
1777+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 335, Col: 21}
17801778 }
17811779 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var83)
17821780 if templ_7745c5c3_Err != nil {
@@ -1815,7 +1813,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
18151813 var templ_7745c5c3_Var84 string
18161814 templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)
18171815 if templ_7745c5c3_Err != nil {
1818- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 351, Col: 50}
1816+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 350, Col: 50}
18191817 }
18201818 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var84)
18211819 if templ_7745c5c3_Err != nil {
@@ -1828,7 +1826,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
18281826 var templ_7745c5c3_Var85 string
18291827 templ_7745c5c3_Var85, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Line)
18301828 if templ_7745c5c3_Err != nil {
1831- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 352, Col: 50}
1829+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 351, Col: 50}
18321830 }
18331831 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var85)
18341832 if templ_7745c5c3_Err != nil {
@@ -1841,7 +1839,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
18411839 var templ_7745c5c3_Var86 string
18421840 templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Side)
18431841 if templ_7745c5c3_Err != nil {
1844- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 353, Col: 50}
1842+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 352, Col: 50}
18451843 }
18461844 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var86)
18471845 if templ_7745c5c3_Err != nil {
@@ -1854,7 +1852,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
18541852 var templ_7745c5c3_Var87 string
18551853 templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.StartLine)
18561854 if templ_7745c5c3_Err != nil {
1857- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 354, Col: 86}
1855+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 353, Col: 86}
18581856 }
18591857 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)
18601858 if templ_7745c5c3_Err != nil {
@@ -1873,7 +1871,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
18731871 var templ_7745c5c3_Var88 string
18741872 templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ReplyTo)
18751873 if templ_7745c5c3_Err != nil {
1876- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 357, Col: 57}
1874+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 356, Col: 57}
18771875 }
18781876 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var88)
18791877 if templ_7745c5c3_Err != nil {
@@ -1898,7 +1896,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
18981896 var templ_7745c5c3_Var89 string
18991897 templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(f.From))
19001898 if templ_7745c5c3_Err != nil {
1901- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 363, Col: 56}
1899+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 362, Col: 56}
19021900 }
19031901 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var89)
19041902 if templ_7745c5c3_Err != nil {
@@ -1921,7 +1919,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
19211919 var templ_7745c5c3_Var90 templ.SafeURL
19221920 templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Cancel))
19231921 if templ_7745c5c3_Err != nil {
1924- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 368, Col: 49}
1922+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 367, Col: 49}
19251923 }
19261924 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var90))
19271925 if templ_7745c5c3_Err != nil {
@@ -1968,7 +1966,7 @@ func mrFooter(p MRPage) templ.Component {
19681966 var templ_7745c5c3_Var92 string
19691967 templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)
19701968 if templ_7745c5c3_Err != nil {
1971- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 377, Col: 136}
1969+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 376, Col: 136}
19721970 }
19731971 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var92))
19741972 if templ_7745c5c3_Err != nil {
@@ -1981,7 +1979,7 @@ func mrFooter(p MRPage) templ.Component {
19811979 var templ_7745c5c3_Var93 string
19821980 templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.JoinStringErrs("Checks ")
19831981 if templ_7745c5c3_Err != nil {
1984- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 379, Col: 15}
1982+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 378, Col: 15}
19851983 }
19861984 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var93))
19871985 if templ_7745c5c3_Err != nil {
@@ -1995,7 +1993,7 @@ func mrFooter(p MRPage) templ.Component {
19951993 var templ_7745c5c3_Var94 string
19961994 templ_7745c5c3_Var94, templ_7745c5c3_Err = templ.JoinStringErrs(p.ChecksSum.Title)
19971995 if templ_7745c5c3_Err != nil {
1998- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 382, Col: 25}
1996+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 381, Col: 25}
19991997 }
20001998 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var94))
20011999 if templ_7745c5c3_Err != nil {
@@ -2029,7 +2027,7 @@ func mrFooter(p MRPage) templ.Component {
20292027 var templ_7745c5c3_Var95 templ.SafeURL
20302028 templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))
20312029 if templ_7745c5c3_Err != nil {
2032- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 395, Col: 42}
2030+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 394, Col: 42}
20332031 }
20342032 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var95))
20352033 if templ_7745c5c3_Err != nil {
@@ -2042,7 +2040,7 @@ func mrFooter(p MRPage) templ.Component {
20422040 var templ_7745c5c3_Var96 string
20432041 templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
20442042 if templ_7745c5c3_Err != nil {
2045- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 395, Col: 54}
2043+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 394, Col: 54}
20462044 }
20472045 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var96))
20482046 if templ_7745c5c3_Err != nil {
@@ -2055,7 +2053,7 @@ func mrFooter(p MRPage) templ.Component {
20552053 var templ_7745c5c3_Var97 string
20562054 templ_7745c5c3_Var97, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
20572055 if templ_7745c5c3_Err != nil {
2058- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 396, Col: 22}
2056+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 395, Col: 22}
20592057 }
20602058 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var97))
20612059 if templ_7745c5c3_Err != nil {
@@ -2068,7 +2066,7 @@ func mrFooter(p MRPage) templ.Component {
20682066 var templ_7745c5c3_Var98 string
20692067 templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
20702068 if templ_7745c5c3_Err != nil {
2071- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 397, Col: 21}
2069+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 396, Col: 21}
20722070 }
20732071 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))
20742072 if templ_7745c5c3_Err != nil {
@@ -2086,7 +2084,7 @@ func mrFooter(p MRPage) templ.Component {
20862084 var templ_7745c5c3_Var99 string
20872085 templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
20882086 if templ_7745c5c3_Err != nil {
2089- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 34}
2087+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 399, Col: 34}
20902088 }
20912089 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var99)
20922090 if templ_7745c5c3_Err != nil {
@@ -2099,7 +2097,7 @@ func mrFooter(p MRPage) templ.Component {
20992097 var templ_7745c5c3_Var100 string
21002098 templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
21012099 if templ_7745c5c3_Err != nil {
2102- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 45}
2100+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 399, Col: 45}
21032101 }
21042102 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))
21052103 if templ_7745c5c3_Err != nil {
@@ -2153,7 +2151,7 @@ func mrFooter(p MRPage) templ.Component {
21532151 var templ_7745c5c3_Var101 string
21542152 templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitsNote)
21552153 if templ_7745c5c3_Err != nil {
2156- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 421, Col: 35}
2154+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 420, Col: 35}
21572155 }
21582156 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))
21592157 if templ_7745c5c3_Err != nil {
@@ -2201,20 +2199,129 @@ func mrRail(p MRPage) templ.Component {
22012199 templ_7745c5c3_Var102 = templ.NopComponent
22022200 }
22032201 ctx = templ.ClearChildren(ctx)
2204- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 207, "<section aria-labelledby=\"r-files\" class=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
2202+ if len(p.Issues) > 0 {
2203+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 207, "<section aria-labelledby=\"r-issues\"><h2 id=\"r-issues\">Issues</h2><ul>")
2204+ if templ_7745c5c3_Err != nil {
2205+ return templ_7745c5c3_Err
2206+ }
2207+ for _, i := range p.Issues {
2208+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 208, "<li><a class=\"ref\" href=\"")
2209+ if templ_7745c5c3_Err != nil {
2210+ return templ_7745c5c3_Err
2211+ }
2212+ var templ_7745c5c3_Var103 templ.SafeURL
2213+ templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(i.Href))
2214+ if templ_7745c5c3_Err != nil {
2215+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 436, Col: 49}
2216+ }
2217+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
2218+ if templ_7745c5c3_Err != nil {
2219+ return templ_7745c5c3_Err
2220+ }
2221+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 209, "\">")
2222+ if templ_7745c5c3_Err != nil {
2223+ return templ_7745c5c3_Err
2224+ }
2225+ var templ_7745c5c3_Var104 string
2226+ templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(i.Number)
2227+ if templ_7745c5c3_Err != nil {
2228+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 436, Col: 62}
2229+ }
2230+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
2231+ if templ_7745c5c3_Err != nil {
2232+ return templ_7745c5c3_Err
2233+ }
2234+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 210, " ")
2235+ if templ_7745c5c3_Err != nil {
2236+ return templ_7745c5c3_Err
2237+ }
2238+ var templ_7745c5c3_Var105 string
2239+ templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(i.Title)
2240+ if templ_7745c5c3_Err != nil {
2241+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 436, Col: 74}
2242+ }
2243+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105))
2244+ if templ_7745c5c3_Err != nil {
2245+ return templ_7745c5c3_Err
2246+ }
2247+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 211, "</a>")
2248+ if templ_7745c5c3_Err != nil {
2249+ return templ_7745c5c3_Err
2250+ }
2251+ var templ_7745c5c3_Var106 string
2252+ templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
2253+ if templ_7745c5c3_Err != nil {
2254+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 436, Col: 85}
2255+ }
2256+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var106))
2257+ if templ_7745c5c3_Err != nil {
2258+ return templ_7745c5c3_Err
2259+ }
2260+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 212, "<span class=\"mr-state\" data-state=\"")
2261+ if templ_7745c5c3_Err != nil {
2262+ return templ_7745c5c3_Err
2263+ }
2264+ var templ_7745c5c3_Var107 string
2265+ templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.ResolveAttributeValue(i.State)
2266+ if templ_7745c5c3_Err != nil {
2267+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 436, Col: 130}
2268+ }
2269+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var107)
2270+ if templ_7745c5c3_Err != nil {
2271+ return templ_7745c5c3_Err
2272+ }
2273+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 213, "\">")
2274+ if templ_7745c5c3_Err != nil {
2275+ return templ_7745c5c3_Err
2276+ }
2277+ var templ_7745c5c3_Var108 string
2278+ templ_7745c5c3_Var108, templ_7745c5c3_Err = templ.JoinStringErrs(i.State)
2279+ if templ_7745c5c3_Err != nil {
2280+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 436, Col: 142}
2281+ }
2282+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var108))
2283+ if templ_7745c5c3_Err != nil {
2284+ return templ_7745c5c3_Err
2285+ }
2286+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 214, "</span> ")
2287+ if templ_7745c5c3_Err != nil {
2288+ return templ_7745c5c3_Err
2289+ }
2290+ if i.Closes {
2291+ var templ_7745c5c3_Var109 string
2292+ templ_7745c5c3_Var109, templ_7745c5c3_Err = templ.JoinStringErrs(" · resolves")
2293+ if templ_7745c5c3_Err != nil {
2294+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 438, Col: 23}
2295+ }
2296+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var109))
2297+ if templ_7745c5c3_Err != nil {
2298+ return templ_7745c5c3_Err
2299+ }
2300+ }
2301+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 215, "</li>")
2302+ if templ_7745c5c3_Err != nil {
2303+ return templ_7745c5c3_Err
2304+ }
2305+ }
2306+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 216, "</ul></section>")
2307+ if templ_7745c5c3_Err != nil {
2308+ return templ_7745c5c3_Err
2309+ }
2310+ }
2311+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 217, "<section aria-labelledby=\"r-files\" class=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
22052312 if templ_7745c5c3_Err != nil {
22062313 return templ_7745c5c3_Err
22072314 }
2208- var templ_7745c5c3_Var103 string
2209- templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
2315+ var templ_7745c5c3_Var110 string
2316+ templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
22102317 if templ_7745c5c3_Err != nil {
2211- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 433, Col: 49}
2318+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 447, Col: 49}
22122319 }
2213- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
2320+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110))
22142321 if templ_7745c5c3_Err != nil {
22152322 return templ_7745c5c3_Err
22162323 }
2217- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 208, "</span><kbd aria-hidden=\"true\">l</kbd> <button type=\"button\" class=\"btn icon fold\" data-js aria-expanded=\"true\" title=\"fold the list of files\" hx-on:click=\"ermiteMR.foldFiles()\"><span class=\"ico i-chevron\" aria-hidden=\"true\"></span><span class=\"sr\">fold the list of files</span></button></h2>")
2324+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 218, "</span><kbd aria-hidden=\"true\">l</kbd> <button type=\"button\" class=\"btn icon fold\" data-js aria-expanded=\"true\" title=\"fold the list of files\" hx-on:click=\"ermiteMR.foldFiles()\"><span class=\"ico i-chevron\" aria-hidden=\"true\"></span><span class=\"sr\">fold the list of files</span></button></h2>")
22182325 if templ_7745c5c3_Err != nil {
22192326 return templ_7745c5c3_Err
22202327 }
@@ -2222,71 +2329,71 @@ func mrRail(p MRPage) templ.Component {
22222329 if templ_7745c5c3_Err != nil {
22232330 return templ_7745c5c3_Err
22242331 }
2225- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 209, "</section>")
2332+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 219, "</section>")
22262333 if templ_7745c5c3_Err != nil {
22272334 return templ_7745c5c3_Err
22282335 }
22292336 if len(p.Verdicts) > 0 {
2230- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 210, "<section><h2>Verdicts</h2><ul>")
2337+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 220, "<section><h2>Verdicts</h2><ul>")
22312338 if templ_7745c5c3_Err != nil {
22322339 return templ_7745c5c3_Err
22332340 }
22342341 for _, v := range p.Verdicts {
2235- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 211, "<li><a href=\"")
2342+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 221, "<li><a href=\"")
22362343 if templ_7745c5c3_Err != nil {
22372344 return templ_7745c5c3_Err
22382345 }
2239- var templ_7745c5c3_Var104 templ.SafeURL
2240- templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))
2346+ var templ_7745c5c3_Var111 templ.SafeURL
2347+ templ_7745c5c3_Var111, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))
22412348 if templ_7745c5c3_Err != nil {
2242- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 446, Col: 37}
2349+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 460, Col: 37}
22432350 }
2244- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
2351+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var111))
22452352 if templ_7745c5c3_Err != nil {
22462353 return templ_7745c5c3_Err
22472354 }
2248- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 212, "\">")
2355+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 222, "\">")
22492356 if templ_7745c5c3_Err != nil {
22502357 return templ_7745c5c3_Err
22512358 }
2252- var templ_7745c5c3_Var105 string
2253- templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)
2359+ var templ_7745c5c3_Var112 string
2360+ templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)
22542361 if templ_7745c5c3_Err != nil {
2255- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 446, Col: 50}
2362+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 460, Col: 50}
22562363 }
2257- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105))
2364+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))
22582365 if templ_7745c5c3_Err != nil {
22592366 return templ_7745c5c3_Err
22602367 }
2261- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 213, ": ")
2368+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 223, ": ")
22622369 if templ_7745c5c3_Err != nil {
22632370 return templ_7745c5c3_Err
22642371 }
2265- var templ_7745c5c3_Var106 string
2266- templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
2372+ var templ_7745c5c3_Var113 string
2373+ templ_7745c5c3_Var113, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
22672374 if templ_7745c5c3_Err != nil {
2268- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 446, Col: 63}
2375+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 460, Col: 63}
22692376 }
2270- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var106))
2377+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var113))
22712378 if templ_7745c5c3_Err != nil {
22722379 return templ_7745c5c3_Err
22732380 }
2274- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 214, "</a> ")
2381+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 224, "</a> ")
22752382 if templ_7745c5c3_Err != nil {
22762383 return templ_7745c5c3_Err
22772384 }
22782385 if v.Stale {
2279- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 215, "<span class=\"mute\">(stale)</span>")
2386+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 225, "<span class=\"mute\">(stale)</span>")
22802387 if templ_7745c5c3_Err != nil {
22812388 return templ_7745c5c3_Err
22822389 }
22832390 }
2284- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 216, "</li>")
2391+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 226, "</li>")
22852392 if templ_7745c5c3_Err != nil {
22862393 return templ_7745c5c3_Err
22872394 }
22882395 }
2289- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 217, "</ul></section>")
2396+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 227, "</ul></section>")
22902397 if templ_7745c5c3_Err != nil {
22912398 return templ_7745c5c3_Err
22922399 }
@@ -2315,51 +2422,51 @@ func mrBar(p MRPage) templ.Component {
23152422 }()
23162423 }
23172424 ctx = templ.InitializeContext(ctx)
2318- templ_7745c5c3_Var107 := templ.GetChildren(ctx)
2319- if templ_7745c5c3_Var107 == nil {
2320- templ_7745c5c3_Var107 = templ.NopComponent
2425+ templ_7745c5c3_Var114 := templ.GetChildren(ctx)
2426+ if templ_7745c5c3_Var114 == nil {
2427+ templ_7745c5c3_Var114 = templ.NopComponent
23212428 }
23222429 ctx = templ.ClearChildren(ctx)
2323- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 218, "<div class=\"diff-tools mr-bar\" role=\"group\" aria-label=\"Diff view and merge\"><span class=\"dim\">")
2430+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 228, "<div class=\"diff-tools mr-bar\" role=\"group\" aria-label=\"Diff view and merge\"><span class=\"dim\">")
23242431 if templ_7745c5c3_Err != nil {
23252432 return templ_7745c5c3_Err
23262433 }
2327- var templ_7745c5c3_Var108 string
2328- templ_7745c5c3_Var108, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
2434+ var templ_7745c5c3_Var115 string
2435+ templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
23292436 if templ_7745c5c3_Err != nil {
2330- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 463, Col: 55}
2437+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 477, Col: 55}
23312438 }
2332- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var108))
2439+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))
23332440 if templ_7745c5c3_Err != nil {
23342441 return templ_7745c5c3_Err
23352442 }
2336- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 219, " · <span class=\"plus\">+")
2443+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 229, " · <span class=\"plus\">+")
23372444 if templ_7745c5c3_Err != nil {
23382445 return templ_7745c5c3_Err
23392446 }
2340- var templ_7745c5c3_Var109 string
2341- templ_7745c5c3_Var109, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
2447+ var templ_7745c5c3_Var116 string
2448+ templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
23422449 if templ_7745c5c3_Err != nil {
2343- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 463, Col: 95}
2450+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 477, Col: 95}
23442451 }
2345- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var109))
2452+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))
23462453 if templ_7745c5c3_Err != nil {
23472454 return templ_7745c5c3_Err
23482455 }
2349- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 220, "</span> <span class=\"minus\">-")
2456+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 230, "</span> <span class=\"minus\">-")
23502457 if templ_7745c5c3_Err != nil {
23512458 return templ_7745c5c3_Err
23522459 }
2353- var templ_7745c5c3_Var110 string
2354- templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
2460+ var templ_7745c5c3_Var117 string
2461+ templ_7745c5c3_Var117, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
23552462 if templ_7745c5c3_Err != nil {
2356- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 463, Col: 140}
2463+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 477, Col: 140}
23572464 }
2358- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110))
2465+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var117))
23592466 if templ_7745c5c3_Err != nil {
23602467 return templ_7745c5c3_Err
23612468 }
2362- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 221, "</span></span>")
2469+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 231, "</span></span>")
23632470 if templ_7745c5c3_Err != nil {
23642471 return templ_7745c5c3_Err
23652472 }
@@ -2371,7 +2478,7 @@ func mrBar(p MRPage) templ.Component {
23712478 if templ_7745c5c3_Err != nil {
23722479 return templ_7745c5c3_Err
23732480 }
2374- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 222, "</div>")
2481+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 232, "</div>")
23752482 if templ_7745c5c3_Err != nil {
23762483 return templ_7745c5c3_Err
23772484 }
@@ -2403,80 +2510,80 @@ func mergeMenu(p MRPage) templ.Component {
24032510 }()
24042511 }
24052512 ctx = templ.InitializeContext(ctx)
2406- templ_7745c5c3_Var111 := templ.GetChildren(ctx)
2407- if templ_7745c5c3_Var111 == nil {
2408- templ_7745c5c3_Var111 = templ.NopComponent
2513+ templ_7745c5c3_Var118 := templ.GetChildren(ctx)
2514+ if templ_7745c5c3_Var118 == nil {
2515+ templ_7745c5c3_Var118 = templ.NopComponent
24092516 }
24102517 ctx = templ.ClearChildren(ctx)
2411- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 223, "<details class=\"menu mmenu\" id=\"merge-menu\" data-state=\"open\"")
2518+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 233, "<details class=\"menu mmenu\" id=\"merge-menu\" data-state=\"open\"")
24122519 if templ_7745c5c3_Err != nil {
24132520 return templ_7745c5c3_Err
24142521 }
24152522 if p.Box.Error != "" {
2416- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 224, " open")
2523+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 234, " open")
24172524 if templ_7745c5c3_Err != nil {
24182525 return templ_7745c5c3_Err
24192526 }
24202527 }
2421- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 225, "><summary class=\"btn primary\" aria-keyshortcuts=\"Shift+M\">")
2528+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 235, "><summary class=\"btn primary\" aria-keyshortcuts=\"Shift+M\">")
24222529 if templ_7745c5c3_Err != nil {
24232530 return templ_7745c5c3_Err
24242531 }
24252532 if p.Box.ReadyAction != "" {
2426- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 226, "Draft ")
2533+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 236, "Draft ")
24272534 if templ_7745c5c3_Err != nil {
24282535 return templ_7745c5c3_Err
24292536 }
24302537 } else {
2431- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 227, "Merge ")
2538+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 237, "Merge ")
24322539 if templ_7745c5c3_Err != nil {
24332540 return templ_7745c5c3_Err
24342541 }
24352542 }
2436- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 228, "<kbd aria-hidden=\"true\">M</kbd></summary><div class=\"menu-pop\" role=\"group\" aria-label=\"Merge\">")
2543+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 238, "<kbd aria-hidden=\"true\">M</kbd></summary><div class=\"menu-pop\" role=\"group\" aria-label=\"Merge\">")
24372544 if templ_7745c5c3_Err != nil {
24382545 return templ_7745c5c3_Err
24392546 }
24402547 if p.Box.HeadGone {
2441- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 229, "<p class=\"dim\">the source branch was deleted</p>")
2548+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 239, "<p class=\"dim\">the source branch was deleted</p>")
24422549 if templ_7745c5c3_Err != nil {
24432550 return templ_7745c5c3_Err
24442551 }
24452552 }
24462553 if p.Box.Error != "" {
2447- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 230, "<p class=\"d-err\" role=\"alert\">")
2554+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 240, "<p class=\"d-err\" role=\"alert\">")
24482555 if templ_7745c5c3_Err != nil {
24492556 return templ_7745c5c3_Err
24502557 }
2451- var templ_7745c5c3_Var112 string
2452- templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Error)
2558+ var templ_7745c5c3_Var119 string
2559+ templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Error)
24532560 if templ_7745c5c3_Err != nil {
2454- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 492, Col: 47}
2561+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 506, Col: 47}
24552562 }
2456- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))
2563+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var119))
24572564 if templ_7745c5c3_Err != nil {
24582565 return templ_7745c5c3_Err
24592566 }
2460- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 231, "</p>")
2567+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 241, "</p>")
24612568 if templ_7745c5c3_Err != nil {
24622569 return templ_7745c5c3_Err
24632570 }
24642571 }
24652572 if p.Box.ReadyAction != "" {
2466- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 232, "<p class=\"d-draft\">this is a draft: it cannot be merged until it is ready for review.</p><form class=\"d-btns\" method=\"post\" action=\"")
2573+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 242, "<p class=\"d-draft\">this is a draft: it cannot be merged until it is ready for review.</p><form class=\"d-btns\" method=\"post\" action=\"")
24672574 if templ_7745c5c3_Err != nil {
24682575 return templ_7745c5c3_Err
24692576 }
2470- var templ_7745c5c3_Var113 templ.SafeURL
2471- templ_7745c5c3_Var113, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))
2577+ var templ_7745c5c3_Var120 templ.SafeURL
2578+ templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))
24722579 if templ_7745c5c3_Err != nil {
2473- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 496, Col: 80}
2580+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 510, Col: 80}
24742581 }
2475- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var113))
2582+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var120))
24762583 if templ_7745c5c3_Err != nil {
24772584 return templ_7745c5c3_Err
24782585 }
2479- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 233, "\"><button type=\"submit\" class=\"btn primary\" data-default title=\"remove the draft prefix from the title\">Ready for review</button></form>")
2586+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 243, "\"><button type=\"submit\" class=\"btn primary\" data-default title=\"remove the draft prefix from the title\">Ready for review</button></form>")
24802587 if templ_7745c5c3_Err != nil {
24812588 return templ_7745c5c3_Err
24822589 }
@@ -2485,250 +2592,250 @@ func mergeMenu(p MRPage) templ.Component {
24852592 if templ_7745c5c3_Err != nil {
24862593 return templ_7745c5c3_Err
24872594 }
2488- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 234, " ")
2595+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 244, " ")
24892596 if templ_7745c5c3_Err != nil {
24902597 return templ_7745c5c3_Err
24912598 }
24922599 if p.Box.AutoMerge != nil {
2493- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 235, "<form class=\"d-acts\" method=\"post\" action=\"")
2600+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 245, "<form class=\"d-acts\" method=\"post\" action=\"")
24942601 if templ_7745c5c3_Err != nil {
24952602 return templ_7745c5c3_Err
24962603 }
2497- var templ_7745c5c3_Var114 templ.SafeURL
2498- templ_7745c5c3_Var114, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CancelAutoAction))
2604+ var templ_7745c5c3_Var121 templ.SafeURL
2605+ templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CancelAutoAction))
24992606 if templ_7745c5c3_Err != nil {
2500- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 502, Col: 86}
2607+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 516, Col: 86}
25012608 }
2502- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var114))
2609+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121))
25032610 if templ_7745c5c3_Err != nil {
25042611 return templ_7745c5c3_Err
25052612 }
2506- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 236, "\"><p class=\"dim\" role=\"status\">Auto-merge: ")
2613+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 246, "\"><p class=\"dim\" role=\"status\">Auto-merge: ")
25072614 if templ_7745c5c3_Err != nil {
25082615 return templ_7745c5c3_Err
25092616 }
2510- var templ_7745c5c3_Var115 string
2511- templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.Mode)
2617+ var templ_7745c5c3_Var122 string
2618+ templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.Mode)
25122619 if templ_7745c5c3_Err != nil {
2513- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 504, Col: 41}
2620+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 518, Col: 41}
25142621 }
2515- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))
2622+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var122))
25162623 if templ_7745c5c3_Err != nil {
25172624 return templ_7745c5c3_Err
25182625 }
2519- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 237, " when ready, enabled by ")
2626+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 247, " when ready, enabled by ")
25202627 if templ_7745c5c3_Err != nil {
25212628 return templ_7745c5c3_Err
25222629 }
2523- var templ_7745c5c3_Var116 string
2524- templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.EnabledBy)
2630+ var templ_7745c5c3_Var123 string
2631+ templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.EnabledBy)
25252632 if templ_7745c5c3_Err != nil {
2526- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 504, Col: 94}
2633+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 518, Col: 94}
25272634 }
2528- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))
2635+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var123))
25292636 if templ_7745c5c3_Err != nil {
25302637 return templ_7745c5c3_Err
25312638 }
2532- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 238, " ")
2639+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 248, " ")
25332640 if templ_7745c5c3_Err != nil {
25342641 return templ_7745c5c3_Err
25352642 }
25362643 if p.Box.AutoMerge.When != "" {
2537- var templ_7745c5c3_Var117 string
2538- templ_7745c5c3_Var117, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
2644+ var templ_7745c5c3_Var124 string
2645+ templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
25392646 if templ_7745c5c3_Err != nil {
2540- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 506, Col: 13}
2647+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 520, Col: 13}
25412648 }
2542- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var117))
2649+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var124))
25432650 if templ_7745c5c3_Err != nil {
25442651 return templ_7745c5c3_Err
25452652 }
2546- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 239, "<time datetime=\"")
2653+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 249, "<time datetime=\"")
25472654 if templ_7745c5c3_Err != nil {
25482655 return templ_7745c5c3_Err
25492656 }
2550- var templ_7745c5c3_Var118 string
2551- templ_7745c5c3_Var118, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.AutoMerge.WhenAt)
2657+ var templ_7745c5c3_Var125 string
2658+ templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.AutoMerge.WhenAt)
25522659 if templ_7745c5c3_Err != nil {
2553- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 506, Col: 54}
2660+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 520, Col: 54}
25542661 }
2555- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var118)
2662+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var125)
25562663 if templ_7745c5c3_Err != nil {
25572664 return templ_7745c5c3_Err
25582665 }
2559- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 240, "\">")
2666+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 250, "\">")
25602667 if templ_7745c5c3_Err != nil {
25612668 return templ_7745c5c3_Err
25622669 }
2563- var templ_7745c5c3_Var119 string
2564- templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.When)
2670+ var templ_7745c5c3_Var126 string
2671+ templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.When)
25652672 if templ_7745c5c3_Err != nil {
2566- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 506, Col: 79}
2673+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 520, Col: 79}
25672674 }
2568- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var119))
2675+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var126))
25692676 if templ_7745c5c3_Err != nil {
25702677 return templ_7745c5c3_Err
25712678 }
2572- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 241, "</time> ")
2679+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 251, "</time> ")
25732680 if templ_7745c5c3_Err != nil {
25742681 return templ_7745c5c3_Err
25752682 }
25762683 }
2577- var templ_7745c5c3_Var120 string
2578- templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
2684+ var templ_7745c5c3_Var127 string
2685+ templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
25792686 if templ_7745c5c3_Err != nil {
2580- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 508, Col: 12}
2687+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 522, Col: 12}
25812688 }
2582- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var120))
2689+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var127))
25832690 if templ_7745c5c3_Err != nil {
25842691 return templ_7745c5c3_Err
25852692 }
2586- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 242, "(head ")
2693+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 252, "(head ")
25872694 if templ_7745c5c3_Err != nil {
25882695 return templ_7745c5c3_Err
25892696 }
2590- var templ_7745c5c3_Var121 string
2591- templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.HeadShort)
2697+ var templ_7745c5c3_Var128 string
2698+ templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.HeadShort)
25922699 if templ_7745c5c3_Err != nil {
2593- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 508, Col: 47}
2700+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 522, Col: 47}
25942701 }
2595- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121))
2702+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var128))
25962703 if templ_7745c5c3_Err != nil {
25972704 return templ_7745c5c3_Err
25982705 }
2599- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 243, ")</p><div class=\"d-btns\"><button type=\"submit\" class=\"btn\">Cancel auto-merge</button></div></form>")
2706+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 253, ")</p><div class=\"d-btns\"><button type=\"submit\" class=\"btn\">Cancel auto-merge</button></div></form>")
26002707 if templ_7745c5c3_Err != nil {
26012708 return templ_7745c5c3_Err
26022709 }
26032710 }
2604- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 244, " <form class=\"d-acts\" method=\"post\" action=\"")
2711+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 254, " <form class=\"d-acts\" method=\"post\" action=\"")
26052712 if templ_7745c5c3_Err != nil {
26062713 return templ_7745c5c3_Err
26072714 }
2608- var templ_7745c5c3_Var122 templ.SafeURL
2609- templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))
2715+ var templ_7745c5c3_Var129 templ.SafeURL
2716+ templ_7745c5c3_Var129, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))
26102717 if templ_7745c5c3_Err != nil {
2611- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 518, Col: 46}
2718+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 532, Col: 46}
26122719 }
2613- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var122))
2720+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var129))
26142721 if templ_7745c5c3_Err != nil {
26152722 return templ_7745c5c3_Err
26162723 }
2617- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 245, "\" hx-post=\"")
2724+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 255, "\" hx-post=\"")
26182725 if templ_7745c5c3_Err != nil {
26192726 return templ_7745c5c3_Err
26202727 }
2621- var templ_7745c5c3_Var123 string
2622- templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeAction)
2728+ var templ_7745c5c3_Var130 string
2729+ templ_7745c5c3_Var130, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeAction)
26232730 if templ_7745c5c3_Err != nil {
2624- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 519, Col: 32}
2731+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 533, Col: 32}
26252732 }
2626- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var123)
2733+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var130)
26272734 if templ_7745c5c3_Err != nil {
26282735 return templ_7745c5c3_Err
26292736 }
2630- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 246, "\" hx-swap=\"none\" hx-sync=\"this:drop\" hx-disable=\"find button[type=submit]\"><input type=\"hidden\" name=\"head_id\" value=\"")
2737+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 256, "\" hx-swap=\"none\" hx-sync=\"this:drop\" hx-disable=\"find button[type=submit]\"><input type=\"hidden\" name=\"head_id\" value=\"")
26312738 if templ_7745c5c3_Err != nil {
26322739 return templ_7745c5c3_Err
26332740 }
2634- var templ_7745c5c3_Var124 string
2635- templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
2741+ var templ_7745c5c3_Var131 string
2742+ templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
26362743 if templ_7745c5c3_Err != nil {
2637- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 524, Col: 59}
2744+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 538, Col: 59}
26382745 }
2639- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var124)
2746+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var131)
26402747 if templ_7745c5c3_Err != nil {
26412748 return templ_7745c5c3_Err
26422749 }
2643- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 247, "\"><fieldset class=\"d-modes\"><legend class=\"sr\">merge mode</legend> ")
2750+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 257, "\"><fieldset class=\"d-modes\"><legend class=\"sr\">merge mode</legend> ")
26442751 if templ_7745c5c3_Err != nil {
26452752 return templ_7745c5c3_Err
26462753 }
26472754 for i, m := range p.Box.Modes {
2648- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 248, "<label><input type=\"radio\" name=\"mode\" value=\"")
2755+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 258, "<label><input type=\"radio\" name=\"mode\" value=\"")
26492756 if templ_7745c5c3_Err != nil {
26502757 return templ_7745c5c3_Err
26512758 }
2652- var templ_7745c5c3_Var125 string
2653- templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
2759+ var templ_7745c5c3_Var132 string
2760+ templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
26542761 if templ_7745c5c3_Err != nil {
2655- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 532, Col: 24}
2762+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 546, Col: 24}
26562763 }
2657- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var125)
2764+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var132)
26582765 if templ_7745c5c3_Err != nil {
26592766 return templ_7745c5c3_Err
26602767 }
2661- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 249, "\"")
2768+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 259, "\"")
26622769 if templ_7745c5c3_Err != nil {
26632770 return templ_7745c5c3_Err
26642771 }
26652772 if i == p.Box.Checked() {
2666- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 250, " checked")
2773+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 260, " checked")
26672774 if templ_7745c5c3_Err != nil {
26682775 return templ_7745c5c3_Err
26692776 }
26702777 }
26712778 if m.Disabled {
2672- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 251, " disabled")
2779+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 261, " disabled")
26732780 if templ_7745c5c3_Err != nil {
26742781 return templ_7745c5c3_Err
26752782 }
26762783 }
2677- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 252, " title=\"")
2784+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 262, " title=\"")
26782785 if templ_7745c5c3_Err != nil {
26792786 return templ_7745c5c3_Err
26802787 }
2681- var templ_7745c5c3_Var126 string
2682- templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Reason)
2788+ var templ_7745c5c3_Var133 string
2789+ templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Reason)
26832790 if templ_7745c5c3_Err != nil {
2684- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 535, Col: 25}
2791+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 549, Col: 25}
26852792 }
2686- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var126)
2793+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var133)
26872794 if templ_7745c5c3_Err != nil {
26882795 return templ_7745c5c3_Err
26892796 }
2690- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 253, "\" :disabled=\"this.value === 'fast-forward' ? q('[data-mergeability]').data.ffOk !== true : q('[data-mergeability]').data.mergeOk !== true\" :title=\"this.value === 'fast-forward' ? q('[data-mergeability]').data.ffReason : q('[data-mergeability]').data.mergeReason\"> ")
2797+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 263, "\" :disabled=\"this.value === 'fast-forward' ? q('[data-mergeability]').data.ffOk !== true : q('[data-mergeability]').data.mergeOk !== true\" :title=\"this.value === 'fast-forward' ? q('[data-mergeability]').data.ffReason : q('[data-mergeability]').data.mergeReason\"> ")
26912798 if templ_7745c5c3_Err != nil {
26922799 return templ_7745c5c3_Err
26932800 }
2694- var templ_7745c5c3_Var127 string
2695- templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
2801+ var templ_7745c5c3_Var134 string
2802+ templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
26962803 if templ_7745c5c3_Err != nil {
2697- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 539, Col: 17}
2804+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 553, Col: 17}
26982805 }
2699- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var127))
2806+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var134))
27002807 if templ_7745c5c3_Err != nil {
27012808 return templ_7745c5c3_Err
27022809 }
2703- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 254, " ")
2810+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 264, " ")
27042811 if templ_7745c5c3_Err != nil {
27052812 return templ_7745c5c3_Err
27062813 }
27072814 if i < 9 {
2708- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 255, "<kbd aria-hidden=\"true\">")
2815+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 265, "<kbd aria-hidden=\"true\">")
27092816 if templ_7745c5c3_Err != nil {
27102817 return templ_7745c5c3_Err
27112818 }
2712- var templ_7745c5c3_Var128 string
2713- templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))
2819+ var templ_7745c5c3_Var135 string
2820+ templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))
27142821 if templ_7745c5c3_Err != nil {
2715- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 541, Col: 46}
2822+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 555, Col: 46}
27162823 }
2717- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var128))
2824+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var135))
27182825 if templ_7745c5c3_Err != nil {
27192826 return templ_7745c5c3_Err
27202827 }
2721- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 256, "</kbd>")
2828+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 266, "</kbd>")
27222829 if templ_7745c5c3_Err != nil {
27232830 return templ_7745c5c3_Err
27242831 }
27252832 }
2726- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 257, "</label>")
2833+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 267, "</label>")
27272834 if templ_7745c5c3_Err != nil {
27282835 return templ_7745c5c3_Err
27292836 }
27302837 }
2731- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 258, "</fieldset>")
2838+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 268, "</fieldset>")
27322839 if templ_7745c5c3_Err != nil {
27332840 return templ_7745c5c3_Err
27342841 }
@@ -2737,154 +2844,154 @@ func mergeMenu(p MRPage) templ.Component {
27372844 return templ_7745c5c3_Err
27382845 }
27392846 if p.Box.CanDeleteBranch {
2740- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 259, "<label class=\"d-check\"><input type=\"checkbox\" name=\"delete_branch\" value=\"1\"> delete ")
2847+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 269, "<label class=\"d-check\"><input type=\"checkbox\" name=\"delete_branch\" value=\"1\"> delete ")
27412848 if templ_7745c5c3_Err != nil {
27422849 return templ_7745c5c3_Err
27432850 }
2744- var templ_7745c5c3_Var129 string
2745- templ_7745c5c3_Var129, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
2851+ var templ_7745c5c3_Var136 string
2852+ templ_7745c5c3_Var136, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
27462853 if templ_7745c5c3_Err != nil {
2747- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 548, Col: 102}
2854+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 562, Col: 102}
27482855 }
2749- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var129))
2856+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var136))
27502857 if templ_7745c5c3_Err != nil {
27512858 return templ_7745c5c3_Err
27522859 }
2753- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 260, " after the merge <kbd aria-hidden=\"true\">D</kbd></label>")
2860+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, " after the merge <kbd aria-hidden=\"true\">D</kbd></label>")
27542861 if templ_7745c5c3_Err != nil {
27552862 return templ_7745c5c3_Err
27562863 }
27572864 }
2758- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 261, "<div class=\"d-btns\"><button type=\"submit\" class=\"btn primary\" data-default")
2865+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, "<div class=\"d-btns\"><button type=\"submit\" class=\"btn primary\" data-default")
27592866 if templ_7745c5c3_Err != nil {
27602867 return templ_7745c5c3_Err
27612868 }
27622869 if !p.Box.CanMerge() {
2763- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 262, " disabled")
2870+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, " disabled")
27642871 if templ_7745c5c3_Err != nil {
27652872 return templ_7745c5c3_Err
27662873 }
27672874 }
2768- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 263, " title=\"")
2875+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, " title=\"")
27692876 if templ_7745c5c3_Err != nil {
27702877 return templ_7745c5c3_Err
27712878 }
2772- var templ_7745c5c3_Var130 string
2773- templ_7745c5c3_Var130, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeTitle())
2879+ var templ_7745c5c3_Var137 string
2880+ templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeTitle())
27742881 if templ_7745c5c3_Err != nil {
2775- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 556, Col: 33}
2882+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 570, Col: 33}
27762883 }
2777- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var130)
2884+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var137)
27782885 if templ_7745c5c3_Err != nil {
27792886 return templ_7745c5c3_Err
27802887 }
2781- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 264, "\" :disabled=\"this.form.classList.contains('htmx-request') || !this.form.querySelector('input[name=mode]:checked:not(:disabled)')\" :title=\"(this.form.querySelector('input[name=mode]:checked') || {}).title || ''\">Merge into ")
2888+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "\" :disabled=\"this.form.classList.contains('htmx-request') || !this.form.querySelector('input[name=mode]:checked:not(:disabled)')\" :title=\"(this.form.querySelector('input[name=mode]:checked') || {}).title || ''\">Merge into ")
27822889 if templ_7745c5c3_Err != nil {
27832890 return templ_7745c5c3_Err
27842891 }
2785- var templ_7745c5c3_Var131 string
2786- templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
2892+ var templ_7745c5c3_Var138 string
2893+ templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
27872894 if templ_7745c5c3_Err != nil {
2788- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 559, Col: 28}
2895+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 573, Col: 28}
27892896 }
2790- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var131))
2897+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var138))
27912898 if templ_7745c5c3_Err != nil {
27922899 return templ_7745c5c3_Err
27932900 }
2794- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 265, "</button> <span class=\"htmx-indicator\" role=\"status\">Merging…</span></div></form>")
2901+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, "</button> <span class=\"htmx-indicator\" role=\"status\">Merging…</span></div></form>")
27952902 if templ_7745c5c3_Err != nil {
27962903 return templ_7745c5c3_Err
27972904 }
27982905 if p.Box.CanAutoMerge {
2799- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 266, "<form class=\"d-acts\" method=\"post\" action=\"")
2906+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, "<form class=\"d-acts\" method=\"post\" action=\"")
28002907 if templ_7745c5c3_Err != nil {
28012908 return templ_7745c5c3_Err
28022909 }
2803- var templ_7745c5c3_Var132 templ.SafeURL
2804- templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.AutoAction))
2910+ var templ_7745c5c3_Var139 templ.SafeURL
2911+ templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.AutoAction))
28052912 if templ_7745c5c3_Err != nil {
2806- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 564, Col: 80}
2913+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 578, Col: 80}
28072914 }
2808- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var132))
2915+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var139))
28092916 if templ_7745c5c3_Err != nil {
28102917 return templ_7745c5c3_Err
28112918 }
2812- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 267, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
2919+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
28132920 if templ_7745c5c3_Err != nil {
28142921 return templ_7745c5c3_Err
28152922 }
2816- var templ_7745c5c3_Var133 string
2817- templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
2923+ var templ_7745c5c3_Var140 string
2924+ templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
28182925 if templ_7745c5c3_Err != nil {
2819- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 60}
2926+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 579, Col: 60}
28202927 }
2821- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var133)
2928+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var140)
28222929 if templ_7745c5c3_Err != nil {
28232930 return templ_7745c5c3_Err
28242931 }
2825- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 268, "\"><fieldset class=\"d-modes\"><legend>Auto-merge mode</legend> ")
2932+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "\"><fieldset class=\"d-modes\"><legend>Auto-merge mode</legend> ")
28262933 if templ_7745c5c3_Err != nil {
28272934 return templ_7745c5c3_Err
28282935 }
28292936 for i, m := range p.Box.Modes {
2830- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 269, "<label><input type=\"radio\" name=\"mode\" value=\"")
2937+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "<label><input type=\"radio\" name=\"mode\" value=\"")
28312938 if templ_7745c5c3_Err != nil {
28322939 return templ_7745c5c3_Err
28332940 }
2834- var templ_7745c5c3_Var134 string
2835- templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
2941+ var templ_7745c5c3_Var141 string
2942+ templ_7745c5c3_Var141, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
28362943 if templ_7745c5c3_Err != nil {
2837- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 569, Col: 62}
2944+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 583, Col: 62}
28382945 }
2839- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var134)
2946+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var141)
28402947 if templ_7745c5c3_Err != nil {
28412948 return templ_7745c5c3_Err
28422949 }
2843- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, "\"")
2950+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, "\"")
28442951 if templ_7745c5c3_Err != nil {
28452952 return templ_7745c5c3_Err
28462953 }
28472954 if i == 0 {
2848- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, " checked")
2955+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, " checked")
28492956 if templ_7745c5c3_Err != nil {
28502957 return templ_7745c5c3_Err
28512958 }
28522959 }
2853- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "> ")
2960+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "> ")
28542961 if templ_7745c5c3_Err != nil {
28552962 return templ_7745c5c3_Err
28562963 }
2857- var templ_7745c5c3_Var135 string
2858- templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
2964+ var templ_7745c5c3_Var142 string
2965+ templ_7745c5c3_Var142, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
28592966 if templ_7745c5c3_Err != nil {
2860- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 569, Col: 96}
2967+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 583, Col: 96}
28612968 }
2862- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var135))
2969+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var142))
28632970 if templ_7745c5c3_Err != nil {
28642971 return templ_7745c5c3_Err
28652972 }
2866- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, "</label>")
2973+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "</label>")
28672974 if templ_7745c5c3_Err != nil {
28682975 return templ_7745c5c3_Err
28692976 }
28702977 }
2871- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "</fieldset><div class=\"d-btns\"><button type=\"submit\" class=\"btn\"")
2978+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "</fieldset><div class=\"d-btns\"><button type=\"submit\" class=\"btn\"")
28722979 if templ_7745c5c3_Err != nil {
28732980 return templ_7745c5c3_Err
28742981 }
28752982 if len(p.Box.Modes) == 0 {
2876- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, " disabled")
2983+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, " disabled")
28772984 if templ_7745c5c3_Err != nil {
28782985 return templ_7745c5c3_Err
28792986 }
28802987 }
2881- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, " title=\"merge once the checks pass\">Merge when ready</button></div></form>")
2988+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, " title=\"merge once the checks pass\">Merge when ready</button></div></form>")
28822989 if templ_7745c5c3_Err != nil {
28832990 return templ_7745c5c3_Err
28842991 }
28852992 }
28862993 }
2887- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "</div></details>")
2994+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "</div></details>")
28882995 if templ_7745c5c3_Err != nil {
28892996 return templ_7745c5c3_Err
28902997 }
@@ -2910,182 +3017,182 @@ func MRMergeability(v MergeabilityView) templ.Component {
29103017 }()
29113018 }
29123019 ctx = templ.InitializeContext(ctx)
2913- templ_7745c5c3_Var136 := templ.GetChildren(ctx)
2914- if templ_7745c5c3_Var136 == nil {
2915- templ_7745c5c3_Var136 = templ.NopComponent
3020+ templ_7745c5c3_Var143 := templ.GetChildren(ctx)
3021+ if templ_7745c5c3_Var143 == nil {
3022+ templ_7745c5c3_Var143 = templ.NopComponent
29163023 }
29173024 ctx = templ.ClearChildren(ctx)
2918- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "<span data-mergeability data-state=\"")
3025+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "<span data-mergeability data-state=\"")
29193026 if templ_7745c5c3_Err != nil {
29203027 return templ_7745c5c3_Err
29213028 }
2922- var templ_7745c5c3_Var137 string
2923- templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
3029+ var templ_7745c5c3_Var144 string
3030+ templ_7745c5c3_Var144, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
29243031 if templ_7745c5c3_Err != nil {
2925- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 587, Col: 22}
3032+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 601, Col: 22}
29263033 }
2927- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var137)
3034+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var144)
29283035 if templ_7745c5c3_Err != nil {
29293036 return templ_7745c5c3_Err
29303037 }
2931- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "\" data-ff-ok=\"")
3038+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "\" data-ff-ok=\"")
29323039 if templ_7745c5c3_Err != nil {
29333040 return templ_7745c5c3_Err
29343041 }
2935- var templ_7745c5c3_Var138 string
2936- templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))
3042+ var templ_7745c5c3_Var145 string
3043+ templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))
29373044 if templ_7745c5c3_Err != nil {
2938- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 588, Col: 41}
3045+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 602, Col: 41}
29393046 }
2940- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var138)
3047+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var145)
29413048 if templ_7745c5c3_Err != nil {
29423049 return templ_7745c5c3_Err
29433050 }
2944- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, "\" data-merge-ok=\"")
3051+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, "\" data-merge-ok=\"")
29453052 if templ_7745c5c3_Err != nil {
29463053 return templ_7745c5c3_Err
29473054 }
2948- var templ_7745c5c3_Var139 string
2949- templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))
3055+ var templ_7745c5c3_Var146 string
3056+ templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))
29503057 if templ_7745c5c3_Err != nil {
2951- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 589, Col: 47}
3058+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 603, Col: 47}
29523059 }
2953- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var139)
3060+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var146)
29543061 if templ_7745c5c3_Err != nil {
29553062 return templ_7745c5c3_Err
29563063 }
2957- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, "\" data-ff-reason=\"")
3064+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "\" data-ff-reason=\"")
29583065 if templ_7745c5c3_Err != nil {
29593066 return templ_7745c5c3_Err
29603067 }
2961- var templ_7745c5c3_Var140 string
2962- templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)
3068+ var templ_7745c5c3_Var147 string
3069+ templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)
29633070 if templ_7745c5c3_Err != nil {
2964- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 29}
3071+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 604, Col: 29}
29653072 }
2966- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var140)
3073+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var147)
29673074 if templ_7745c5c3_Err != nil {
29683075 return templ_7745c5c3_Err
29693076 }
2970- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "\" data-merge-reason=\"")
3077+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "\" data-merge-reason=\"")
29713078 if templ_7745c5c3_Err != nil {
29723079 return templ_7745c5c3_Err
29733080 }
2974- var templ_7745c5c3_Var141 string
2975- templ_7745c5c3_Var141, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)
3081+ var templ_7745c5c3_Var148 string
3082+ templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)
29763083 if templ_7745c5c3_Err != nil {
2977- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 591, Col: 35}
3084+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 605, Col: 35}
29783085 }
2979- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var141)
3086+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var148)
29803087 if templ_7745c5c3_Err != nil {
29813088 return templ_7745c5c3_Err
29823089 }
2983- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "\"><span class=\"badge\" data-state=\"")
3090+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "\"><span class=\"badge\" data-state=\"")
29843091 if templ_7745c5c3_Err != nil {
29853092 return templ_7745c5c3_Err
29863093 }
2987- var templ_7745c5c3_Var142 string
2988- templ_7745c5c3_Var142, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
3094+ var templ_7745c5c3_Var149 string
3095+ templ_7745c5c3_Var149, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
29893096 if templ_7745c5c3_Err != nil {
2990- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 593, Col: 42}
3097+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 607, Col: 42}
29913098 }
2992- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var142)
3099+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var149)
29933100 if templ_7745c5c3_Err != nil {
29943101 return templ_7745c5c3_Err
29953102 }
2996- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "\">")
3103+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "\">")
29973104 if templ_7745c5c3_Err != nil {
29983105 return templ_7745c5c3_Err
29993106 }
3000- var templ_7745c5c3_Var143 string
3001- templ_7745c5c3_Var143, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
3107+ var templ_7745c5c3_Var150 string
3108+ templ_7745c5c3_Var150, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
30023109 if templ_7745c5c3_Err != nil {
3003- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 593, Col: 54}
3110+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 607, Col: 54}
30043111 }
3005- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var143))
3112+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var150))
30063113 if templ_7745c5c3_Err != nil {
30073114 return templ_7745c5c3_Err
30083115 }
3009- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "</span> ")
3116+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "</span> ")
30103117 if templ_7745c5c3_Err != nil {
30113118 return templ_7745c5c3_Err
30123119 }
30133120 if v.Detail != "" {
3014- var templ_7745c5c3_Var144 string
3015- templ_7745c5c3_Var144, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
3121+ var templ_7745c5c3_Var151 string
3122+ templ_7745c5c3_Var151, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
30163123 if templ_7745c5c3_Err != nil {
3017- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 595, Col: 8}
3124+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 609, Col: 8}
30183125 }
3019- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var144))
3126+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var151))
30203127 if templ_7745c5c3_Err != nil {
30213128 return templ_7745c5c3_Err
30223129 }
3023- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "<span class=\"dim\">")
3130+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "<span class=\"dim\">")
30243131 if templ_7745c5c3_Err != nil {
30253132 return templ_7745c5c3_Err
30263133 }
3027- var templ_7745c5c3_Var145 string
3028- templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)
3134+ var templ_7745c5c3_Var152 string
3135+ templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)
30293136 if templ_7745c5c3_Err != nil {
3030- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 595, Col: 38}
3137+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 609, Col: 38}
30313138 }
3032- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var145))
3139+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))
30333140 if templ_7745c5c3_Err != nil {
30343141 return templ_7745c5c3_Err
30353142 }
3036- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "</span>")
3143+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "</span>")
30373144 if templ_7745c5c3_Err != nil {
30383145 return templ_7745c5c3_Err
30393146 }
30403147 }
3041- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "</span> ")
3148+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "</span> ")
30423149 if templ_7745c5c3_Err != nil {
30433150 return templ_7745c5c3_Err
30443151 }
30453152 if len(v.Paths) > 0 {
3046- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "<ul class=\"mg-paths\" aria-label=\"conflicting files\">")
3153+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "<ul class=\"mg-paths\" aria-label=\"conflicting files\">")
30473154 if templ_7745c5c3_Err != nil {
30483155 return templ_7745c5c3_Err
30493156 }
30503157 for _, path := range v.Paths {
3051- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, "<li><code>")
3158+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "<li><code>")
30523159 if templ_7745c5c3_Err != nil {
30533160 return templ_7745c5c3_Err
30543161 }
3055- var templ_7745c5c3_Var146 string
3056- templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.JoinStringErrs(path)
3162+ var templ_7745c5c3_Var153 string
3163+ templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinStringErrs(path)
30573164 if templ_7745c5c3_Err != nil {
3058- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 601, Col: 20}
3165+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 615, Col: 20}
30593166 }
3060- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var146))
3167+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))
30613168 if templ_7745c5c3_Err != nil {
30623169 return templ_7745c5c3_Err
30633170 }
3064- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "</code></li>")
3171+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "</code></li>")
30653172 if templ_7745c5c3_Err != nil {
30663173 return templ_7745c5c3_Err
30673174 }
30683175 }
3069- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "</ul>")
3176+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "</ul>")
30703177 if templ_7745c5c3_Err != nil {
30713178 return templ_7745c5c3_Err
30723179 }
30733180 }
30743181 if v.PathsNote != "" {
3075- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "<p class=\"dim\">")
3182+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "<p class=\"dim\">")
30763183 if templ_7745c5c3_Err != nil {
30773184 return templ_7745c5c3_Err
30783185 }
3079- var templ_7745c5c3_Var147 string
3080- templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)
3186+ var templ_7745c5c3_Var154 string
3187+ templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)
30813188 if templ_7745c5c3_Err != nil {
3082- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 606, Col: 30}
3189+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 620, Col: 30}
30833190 }
3084- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var147))
3191+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154))
30853192 if templ_7745c5c3_Err != nil {
30863193 return templ_7745c5c3_Err
30873194 }
3088- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "</p>")
3195+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 304, "</p>")
30893196 if templ_7745c5c3_Err != nil {
30903197 return templ_7745c5c3_Err
30913198 }
@@ -3112,12 +3219,12 @@ func mrMergeabilitySlot(v MergeabilityView) templ.Component {
31123219 }()
31133220 }
31143221 ctx = templ.InitializeContext(ctx)
3115- templ_7745c5c3_Var148 := templ.GetChildren(ctx)
3116- if templ_7745c5c3_Var148 == nil {
3117- templ_7745c5c3_Var148 = templ.NopComponent
3222+ templ_7745c5c3_Var155 := templ.GetChildren(ctx)
3223+ if templ_7745c5c3_Var155 == nil {
3224+ templ_7745c5c3_Var155 = templ.NopComponent
31183225 }
31193226 ctx = templ.ClearChildren(ctx)
3120- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "<div id=\"mr-mergeability\" class=\"live-slot\" role=\"status\" data-slot>")
3227+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 305, "<div id=\"mr-mergeability\" class=\"live-slot\" role=\"status\" data-slot>")
31213228 if templ_7745c5c3_Err != nil {
31223229 return templ_7745c5c3_Err
31233230 }
@@ -3125,7 +3232,7 @@ func mrMergeabilitySlot(v MergeabilityView) templ.Component {
31253232 if templ_7745c5c3_Err != nil {
31263233 return templ_7745c5c3_Err
31273234 }
3128- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "</div>")
3235+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 306, "</div>")
31293236 if templ_7745c5c3_Err != nil {
31303237 return templ_7745c5c3_Err
31313238 }
@@ -3150,9 +3257,9 @@ func MRMergeabilityFragment(v MergeabilityView) templ.Component {
31503257 }()
31513258 }
31523259 ctx = templ.InitializeContext(ctx)
3153- templ_7745c5c3_Var149 := templ.GetChildren(ctx)
3154- if templ_7745c5c3_Var149 == nil {
3155- templ_7745c5c3_Var149 = templ.NopComponent
3260+ templ_7745c5c3_Var156 := templ.GetChildren(ctx)
3261+ if templ_7745c5c3_Var156 == nil {
3262+ templ_7745c5c3_Var156 = templ.NopComponent
31563263 }
31573264 ctx = templ.ClearChildren(ctx)
31583265 templ_7745c5c3_Err = mrMergeabilitySlot(v).Render(ctx, templ_7745c5c3_Buffer)
@@ -3181,128 +3288,128 @@ func moreMenu(p MRPage) templ.Component {
31813288 }()
31823289 }
31833290 ctx = templ.InitializeContext(ctx)
3184- templ_7745c5c3_Var150 := templ.GetChildren(ctx)
3185- if templ_7745c5c3_Var150 == nil {
3186- templ_7745c5c3_Var150 = templ.NopComponent
3291+ templ_7745c5c3_Var157 := templ.GetChildren(ctx)
3292+ if templ_7745c5c3_Var157 == nil {
3293+ templ_7745c5c3_Var157 = templ.NopComponent
31873294 }
31883295 ctx = templ.ClearChildren(ctx)
3189- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "<details class=\"menu omenu\"><summary class=\"btn icon\" aria-label=\"More actions\" title=\"more actions\">⋯</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"More actions\"><section class=\"merge-settings\"><h2>Merge settings</h2><dl class=\"kv\"><dt>modes</dt><dd>")
3296+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 307, "<details class=\"menu omenu\"><summary class=\"btn icon\" aria-label=\"More actions\" title=\"more actions\">⋯</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"More actions\"><section class=\"merge-settings\"><h2>Merge settings</h2><dl class=\"kv\"><dt>modes</dt><dd>")
31903297 if templ_7745c5c3_Err != nil {
31913298 return templ_7745c5c3_Err
31923299 }
3193- var templ_7745c5c3_Var151 string
3194- templ_7745c5c3_Var151, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))
3300+ var templ_7745c5c3_Var158 string
3301+ templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))
31953302 if templ_7745c5c3_Err != nil {
3196- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 633, Col: 38}
3303+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 647, Col: 38}
31973304 }
3198- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var151))
3305+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))
31993306 if templ_7745c5c3_Err != nil {
32003307 return templ_7745c5c3_Err
32013308 }
3202- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "</dd><dt>checks</dt><dd>")
3309+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 308, "</dd><dt>checks</dt><dd>")
32033310 if templ_7745c5c3_Err != nil {
32043311 return templ_7745c5c3_Err
32053312 }
32063313 if p.ChecksBlock {
3207- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "failing or unfinished checks block the merge")
3314+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 309, "failing or unfinished checks block the merge")
32083315 if templ_7745c5c3_Err != nil {
32093316 return templ_7745c5c3_Err
32103317 }
32113318 } else {
3212- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "do not block the merge")
3319+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 310, "do not block the merge")
32133320 if templ_7745c5c3_Err != nil {
32143321 return templ_7745c5c3_Err
32153322 }
32163323 }
3217- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "</dd></dl></section>")
3324+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 311, "</dd></dl></section>")
32183325 if templ_7745c5c3_Err != nil {
32193326 return templ_7745c5c3_Err
32203327 }
32213328 if p.Box != nil {
32223329 if p.Box.Signed {
3223- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "<p class=\"d-note\" id=\"mr-signing\">squash and merge commits are signed with ermite's own key (generated on first start). ")
3330+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 312, "<p class=\"d-note\" id=\"mr-signing\">squash and merge commits are signed with ermite's own key (generated on first start). ")
32243331 if templ_7745c5c3_Err != nil {
32253332 return templ_7745c5c3_Err
32263333 }
32273334 if p.Box.Fingerprint != "" {
3228- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "fingerprint <code>")
3335+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 313, "fingerprint <code>")
32293336 if templ_7745c5c3_Err != nil {
32303337 return templ_7745c5c3_Err
32313338 }
3232- var templ_7745c5c3_Var152 string
3233- templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)
3339+ var templ_7745c5c3_Var159 string
3340+ templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)
32343341 if templ_7745c5c3_Err != nil {
3235- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 649, Col: 44}
3342+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 663, Col: 44}
32363343 }
3237- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))
3344+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var159))
32383345 if templ_7745c5c3_Err != nil {
32393346 return templ_7745c5c3_Err
32403347 }
3241- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 304, "</code> ")
3348+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 314, "</code> ")
32423349 if templ_7745c5c3_Err != nil {
32433350 return templ_7745c5c3_Err
32443351 }
32453352 }
3246- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 305, "<code>ermite signing-key show</code> prints it.</p>")
3353+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 315, "<code>ermite signing-key show</code> prints it.</p>")
32473354 if templ_7745c5c3_Err != nil {
32483355 return templ_7745c5c3_Err
32493356 }
32503357 }
3251- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 306, " ")
3358+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 316, " ")
32523359 if templ_7745c5c3_Err != nil {
32533360 return templ_7745c5c3_Err
32543361 }
32553362 if p.Box.CanMarkRead {
3256- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 307, "<form method=\"post\" action=\"")
3363+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 317, "<form method=\"post\" action=\"")
32573364 if templ_7745c5c3_Err != nil {
32583365 return templ_7745c5c3_Err
32593366 }
3260- var templ_7745c5c3_Var153 templ.SafeURL
3261- templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))
3367+ var templ_7745c5c3_Var160 templ.SafeURL
3368+ templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))
32623369 if templ_7745c5c3_Err != nil {
3263- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 65}
3370+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 669, Col: 65}
32643371 }
3265- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))
3372+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))
32663373 if templ_7745c5c3_Err != nil {
32673374 return templ_7745c5c3_Err
32683375 }
3269- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 308, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
3376+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 318, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
32703377 if templ_7745c5c3_Err != nil {
32713378 return templ_7745c5c3_Err
32723379 }
3273- var templ_7745c5c3_Var154 string
3274- templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
3380+ var templ_7745c5c3_Var161 string
3381+ templ_7745c5c3_Var161, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
32753382 if templ_7745c5c3_Err != nil {
3276- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 656, Col: 60}
3383+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 670, Col: 60}
32773384 }
3278- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var154)
3385+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var161)
32793386 if templ_7745c5c3_Err != nil {
32803387 return templ_7745c5c3_Err
32813388 }
3282- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 309, "\"> <button type=\"submit\" title=\"the next visit can show only what changed after this head\" class=\"btn\" aria-keyshortcuts=\"Shift+R\" data-read>Mark read <kbd aria-hidden=\"true\">R</kbd></button></form>")
3389+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 319, "\"> <button type=\"submit\" title=\"the next visit can show only what changed after this head\" class=\"btn\" aria-keyshortcuts=\"Shift+R\" data-read>Mark read <kbd aria-hidden=\"true\">R</kbd></button></form>")
32833390 if templ_7745c5c3_Err != nil {
32843391 return templ_7745c5c3_Err
32853392 }
32863393 }
3287- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 310, " <form method=\"post\" action=\"")
3394+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 320, " <form method=\"post\" action=\"")
32883395 if templ_7745c5c3_Err != nil {
32893396 return templ_7745c5c3_Err
32903397 }
3291- var templ_7745c5c3_Var155 templ.SafeURL
3292- templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))
3398+ var templ_7745c5c3_Var162 templ.SafeURL
3399+ templ_7745c5c3_Var162, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))
32933400 if templ_7745c5c3_Err != nil {
3294- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 660, Col: 65}
3401+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 674, Col: 65}
32953402 }
3296- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var155))
3403+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var162))
32973404 if templ_7745c5c3_Err != nil {
32983405 return templ_7745c5c3_Err
32993406 }
3300- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 311, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")
3407+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 321, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")
33013408 if templ_7745c5c3_Err != nil {
33023409 return templ_7745c5c3_Err
33033410 }
33043411 if !p.Box.HeadGone && p.Box.ReadyAction == "" {
3305- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 312, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")
3412+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 322, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")
33063413 if templ_7745c5c3_Err != nil {
33073414 return templ_7745c5c3_Err
33083415 }
@@ -3310,13 +3417,13 @@ func moreMenu(p MRPage) templ.Component {
33103417 if templ_7745c5c3_Err != nil {
33113418 return templ_7745c5c3_Err
33123419 }
3313- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 313, "</details>")
3420+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 323, "</details>")
33143421 if templ_7745c5c3_Err != nil {
33153422 return templ_7745c5c3_Err
33163423 }
33173424 }
33183425 }
3319- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 314, "</div></details>")
3426+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 324, "</div></details>")
33203427 if templ_7745c5c3_Err != nil {
33213428 return templ_7745c5c3_Err
33223429 }
@@ -3340,12 +3447,12 @@ func Compare(l Layout, p ComparePage) templ.Component {
33403447 }()
33413448 }
33423449 ctx = templ.InitializeContext(ctx)
3343- templ_7745c5c3_Var156 := templ.GetChildren(ctx)
3344- if templ_7745c5c3_Var156 == nil {
3345- templ_7745c5c3_Var156 = templ.NopComponent
3450+ templ_7745c5c3_Var163 := templ.GetChildren(ctx)
3451+ if templ_7745c5c3_Var163 == nil {
3452+ templ_7745c5c3_Var163 = templ.NopComponent
33463453 }
33473454 ctx = templ.ClearChildren(ctx)
3348- templ_7745c5c3_Var157 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
3455+ templ_7745c5c3_Var164 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
33493456 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
33503457 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
33513458 if !templ_7745c5c3_IsBuffer {
@@ -3357,263 +3464,263 @@ func Compare(l Layout, p ComparePage) templ.Component {
33573464 }()
33583465 }
33593466 ctx = templ.InitializeContext(ctx)
3360- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 315, "<header class=\"show mr-h\"><h1>")
3467+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 325, "<header class=\"show mr-h\"><h1>")
33613468 if templ_7745c5c3_Err != nil {
33623469 return templ_7745c5c3_Err
33633470 }
3364- var templ_7745c5c3_Var158 string
3365- templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3471+ var templ_7745c5c3_Var165 string
3472+ templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
33663473 if templ_7745c5c3_Err != nil {
3367- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 677, Col: 17}
3474+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 17}
33683475 }
3369- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))
3476+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var165))
33703477 if templ_7745c5c3_Err != nil {
33713478 return templ_7745c5c3_Err
33723479 }
3373- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 316, " → ")
3480+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 326, " → ")
33743481 if templ_7745c5c3_Err != nil {
33753482 return templ_7745c5c3_Err
33763483 }
3377- var templ_7745c5c3_Var159 string
3378- templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3484+ var templ_7745c5c3_Var166 string
3485+ templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
33793486 if templ_7745c5c3_Err != nil {
3380- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 677, Col: 34}
3487+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 34}
33813488 }
3382- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var159))
3489+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))
33833490 if templ_7745c5c3_Err != nil {
33843491 return templ_7745c5c3_Err
33853492 }
3386- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 317, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")
3493+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 327, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")
33873494 if templ_7745c5c3_Err != nil {
33883495 return templ_7745c5c3_Err
33893496 }
3390- var templ_7745c5c3_Var160 templ.SafeURL
3391- templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))
3497+ var templ_7745c5c3_Var167 templ.SafeURL
3498+ templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))
33923499 if templ_7745c5c3_Err != nil {
3393- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 45}
3500+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 694, Col: 45}
33943501 }
3395- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))
3502+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))
33963503 if templ_7745c5c3_Err != nil {
33973504 return templ_7745c5c3_Err
33983505 }
3399- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 318, "\">")
3506+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 328, "\">")
34003507 if templ_7745c5c3_Err != nil {
34013508 return templ_7745c5c3_Err
34023509 }
3403- var templ_7745c5c3_Var161 string
3404- templ_7745c5c3_Var161, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3510+ var templ_7745c5c3_Var168 string
3511+ templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
34053512 if templ_7745c5c3_Err != nil {
3406- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 58}
3513+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 694, Col: 58}
34073514 }
3408- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var161))
3515+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var168))
34093516 if templ_7745c5c3_Err != nil {
34103517 return templ_7745c5c3_Err
34113518 }
3412- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 319, "</a></dd><dt>target</dt><dd><a href=\"")
3519+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 329, "</a></dd><dt>target</dt><dd><a href=\"")
34133520 if templ_7745c5c3_Err != nil {
34143521 return templ_7745c5c3_Err
34153522 }
3416- var templ_7745c5c3_Var162 templ.SafeURL
3417- templ_7745c5c3_Var162, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))
3523+ var templ_7745c5c3_Var169 templ.SafeURL
3524+ templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))
34183525 if templ_7745c5c3_Err != nil {
3419- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 682, Col: 45}
3526+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 696, Col: 45}
34203527 }
3421- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var162))
3528+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var169))
34223529 if templ_7745c5c3_Err != nil {
34233530 return templ_7745c5c3_Err
34243531 }
3425- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 320, "\">")
3532+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 330, "\">")
34263533 if templ_7745c5c3_Err != nil {
34273534 return templ_7745c5c3_Err
34283535 }
3429- var templ_7745c5c3_Var163 string
3430- templ_7745c5c3_Var163, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3536+ var templ_7745c5c3_Var170 string
3537+ templ_7745c5c3_Var170, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
34313538 if templ_7745c5c3_Err != nil {
3432- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 682, Col: 58}
3539+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 696, Col: 58}
34333540 }
3434- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var163))
3541+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var170))
34353542 if templ_7745c5c3_Err != nil {
34363543 return templ_7745c5c3_Err
34373544 }
3438- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 321, "</a></dd><dt>ahead</dt><dd>")
3545+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 331, "</a></dd><dt>ahead</dt><dd>")
34393546 if templ_7745c5c3_Err != nil {
34403547 return templ_7745c5c3_Err
34413548 }
3442- var templ_7745c5c3_Var164 string
3443- templ_7745c5c3_Var164, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)
3549+ var templ_7745c5c3_Var171 string
3550+ templ_7745c5c3_Var171, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)
34443551 if templ_7745c5c3_Err != nil {
3445- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 684, Col: 21}
3552+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 698, Col: 21}
34463553 }
3447- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var164))
3554+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var171))
34483555 if templ_7745c5c3_Err != nil {
34493556 return templ_7745c5c3_Err
34503557 }
3451- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 322, "</dd></dl></header>")
3558+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 332, "</dd></dl></header>")
34523559 if templ_7745c5c3_Err != nil {
34533560 return templ_7745c5c3_Err
34543561 }
34553562 if p.Note != "" {
3456- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 323, "<p class=\"notice\">")
3563+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 333, "<p class=\"notice\">")
34573564 if templ_7745c5c3_Err != nil {
34583565 return templ_7745c5c3_Err
34593566 }
3460- var templ_7745c5c3_Var165 string
3461- templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
3567+ var templ_7745c5c3_Var172 string
3568+ templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
34623569 if templ_7745c5c3_Err != nil {
3463- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 688, Col: 29}
3570+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 702, Col: 29}
34643571 }
3465- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var165))
3572+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var172))
34663573 if templ_7745c5c3_Err != nil {
34673574 return templ_7745c5c3_Err
34683575 }
3469- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 324, "</p>")
3576+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 334, "</p>")
34703577 if templ_7745c5c3_Err != nil {
34713578 return templ_7745c5c3_Err
34723579 }
34733580 }
3474- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 325, " ")
3581+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 335, " ")
34753582 if templ_7745c5c3_Err != nil {
34763583 return templ_7745c5c3_Err
34773584 }
34783585 if p.Existing != nil {
3479- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 326, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")
3586+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 336, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")
34803587 if templ_7745c5c3_Err != nil {
34813588 return templ_7745c5c3_Err
34823589 }
3483- var templ_7745c5c3_Var166 templ.SafeURL
3484- templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))
3590+ var templ_7745c5c3_Var173 templ.SafeURL
3591+ templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))
34853592 if templ_7745c5c3_Err != nil {
3486- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 114}
3593+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 705, Col: 114}
34873594 }
3488- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))
3595+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var173))
34893596 if templ_7745c5c3_Err != nil {
34903597 return templ_7745c5c3_Err
34913598 }
3492- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 327, "\">")
3599+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 337, "\">")
34933600 if templ_7745c5c3_Err != nil {
34943601 return templ_7745c5c3_Err
34953602 }
3496- var templ_7745c5c3_Var167 string
3497- templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)
3603+ var templ_7745c5c3_Var174 string
3604+ templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)
34983605 if templ_7745c5c3_Err != nil {
3499- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 135}
3606+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 705, Col: 135}
35003607 }
3501- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))
3608+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174))
35023609 if templ_7745c5c3_Err != nil {
35033610 return templ_7745c5c3_Err
35043611 }
3505- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 328, "</a></p>")
3612+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 338, "</a></p>")
35063613 if templ_7745c5c3_Err != nil {
35073614 return templ_7745c5c3_Err
35083615 }
35093616 }
3510- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 329, " ")
3617+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 339, " ")
35113618 if templ_7745c5c3_Err != nil {
35123619 return templ_7745c5c3_Err
35133620 }
35143621 if p.Create != nil {
3515- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 330, "<form class=\"cform create\" method=\"post\" action=\"")
3622+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 340, "<form class=\"cform create\" method=\"post\" action=\"")
35163623 if templ_7745c5c3_Err != nil {
35173624 return templ_7745c5c3_Err
35183625 }
3519- var templ_7745c5c3_Var168 templ.SafeURL
3520- templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))
3626+ var templ_7745c5c3_Var175 templ.SafeURL
3627+ templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))
35213628 if templ_7745c5c3_Err != nil {
3522- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 694, Col: 83}
3629+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 83}
35233630 }
3524- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var168))
3631+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var175))
35253632 if templ_7745c5c3_Err != nil {
35263633 return templ_7745c5c3_Err
35273634 }
3528- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 331, "\"><input type=\"hidden\" name=\"source\" value=\"")
3635+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 341, "\"><input type=\"hidden\" name=\"source\" value=\"")
35293636 if templ_7745c5c3_Err != nil {
35303637 return templ_7745c5c3_Err
35313638 }
3532- var templ_7745c5c3_Var169 string
3533- templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)
3639+ var templ_7745c5c3_Var176 string
3640+ templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)
35343641 if templ_7745c5c3_Err != nil {
3535- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 695, Col: 62}
3642+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 709, Col: 62}
35363643 }
3537- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var169)
3644+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var176)
35383645 if templ_7745c5c3_Err != nil {
35393646 return templ_7745c5c3_Err
35403647 }
3541- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 332, "\"> <input type=\"hidden\" name=\"target\" value=\"")
3648+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 342, "\"> <input type=\"hidden\" name=\"target\" value=\"")
35423649 if templ_7745c5c3_Err != nil {
35433650 return templ_7745c5c3_Err
35443651 }
3545- var templ_7745c5c3_Var170 string
3546- templ_7745c5c3_Var170, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)
3652+ var templ_7745c5c3_Var177 string
3653+ templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)
35473654 if templ_7745c5c3_Err != nil {
3548- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 696, Col: 62}
3655+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 710, Col: 62}
35493656 }
3550- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var170)
3657+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var177)
35513658 if templ_7745c5c3_Err != nil {
35523659 return templ_7745c5c3_Err
35533660 }
3554- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 333, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")
3661+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 343, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")
35553662 if templ_7745c5c3_Err != nil {
35563663 return templ_7745c5c3_Err
35573664 }
3558- var templ_7745c5c3_Var171 string
3559- templ_7745c5c3_Var171, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)
3665+ var templ_7745c5c3_Var178 string
3666+ templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)
35603667 if templ_7745c5c3_Err != nil {
3561- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 698, Col: 97}
3668+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 712, Col: 97}
35623669 }
3563- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var171)
3670+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var178)
35643671 if templ_7745c5c3_Err != nil {
35653672 return templ_7745c5c3_Err
35663673 }
3567- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 334, "\" autocomplete=\"off\"> <label for=\"mr-desc\">description</label> <textarea id=\"mr-desc\" name=\"description\" rows=\"4\" maxlength=\"8000\" placeholder=\"Markdown, optional\"></textarea><div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Create merge request</button></div></form>")
3674+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 344, "\" autocomplete=\"off\"> <label for=\"mr-desc\">description</label> <textarea id=\"mr-desc\" name=\"description\" rows=\"4\" maxlength=\"8000\" placeholder=\"Markdown, optional\"></textarea><div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Create merge request</button></div></form>")
35683675 if templ_7745c5c3_Err != nil {
35693676 return templ_7745c5c3_Err
35703677 }
35713678 }
3572- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 335, " ")
3679+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 345, " ")
35733680 if templ_7745c5c3_Err != nil {
35743681 return templ_7745c5c3_Err
35753682 }
35763683 if p.HasDiff {
3577- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 336, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")
3684+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 346, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")
35783685 if templ_7745c5c3_Err != nil {
35793686 return templ_7745c5c3_Err
35803687 }
3581- var templ_7745c5c3_Var172 string
3582- templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
3688+ var templ_7745c5c3_Var179 string
3689+ templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
35833690 if templ_7745c5c3_Err != nil {
3584- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 57}
3691+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 722, Col: 57}
35853692 }
3586- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var172))
3693+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))
35873694 if templ_7745c5c3_Err != nil {
35883695 return templ_7745c5c3_Err
35893696 }
3590- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 337, " · <span class=\"plus\">+")
3697+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 347, " · <span class=\"plus\">+")
35913698 if templ_7745c5c3_Err != nil {
35923699 return templ_7745c5c3_Err
35933700 }
3594- var templ_7745c5c3_Var173 string
3595- templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
3701+ var templ_7745c5c3_Var180 string
3702+ templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
35963703 if templ_7745c5c3_Err != nil {
3597- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 97}
3704+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 722, Col: 97}
35983705 }
3599- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var173))
3706+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var180))
36003707 if templ_7745c5c3_Err != nil {
36013708 return templ_7745c5c3_Err
36023709 }
3603- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 338, "</span> <span class=\"minus\">-")
3710+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 348, "</span> <span class=\"minus\">-")
36043711 if templ_7745c5c3_Err != nil {
36053712 return templ_7745c5c3_Err
36063713 }
3607- var templ_7745c5c3_Var174 string
3608- templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
3714+ var templ_7745c5c3_Var181 string
3715+ templ_7745c5c3_Var181, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
36093716 if templ_7745c5c3_Err != nil {
3610- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 142}
3717+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 722, Col: 142}
36113718 }
3612- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174))
3719+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var181))
36133720 if templ_7745c5c3_Err != nil {
36143721 return templ_7745c5c3_Err
36153722 }
3616- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 339, "</span></span> <span class=\"grow\"></span>")
3723+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 349, "</span></span> <span class=\"grow\"></span>")
36173724 if templ_7745c5c3_Err != nil {
36183725 return templ_7745c5c3_Err
36193726 }
@@ -3621,64 +3728,64 @@ func Compare(l Layout, p ComparePage) templ.Component {
36213728 if templ_7745c5c3_Err != nil {
36223729 return templ_7745c5c3_Err
36233730 }
3624- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 340, "</div>")
3731+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 350, "</div>")
36253732 if templ_7745c5c3_Err != nil {
36263733 return templ_7745c5c3_Err
36273734 }
36283735 if p.Invisible {
3629- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 341, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")
3736+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 351, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")
36303737 if templ_7745c5c3_Err != nil {
36313738 return templ_7745c5c3_Err
36323739 }
36333740 }
3634- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 342, " <div id=\"diffs\"")
3741+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 352, " <div id=\"diffs\"")
36353742 if templ_7745c5c3_Err != nil {
36363743 return templ_7745c5c3_Err
36373744 }
36383745 if p.Both {
3639- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 343, " data-diff=\"")
3746+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 353, " data-diff=\"")
36403747 if templ_7745c5c3_Err != nil {
36413748 return templ_7745c5c3_Err
36423749 }
3643- var templ_7745c5c3_Var175 string
3644- templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3750+ var templ_7745c5c3_Var182 string
3751+ templ_7745c5c3_Var182, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
36453752 if templ_7745c5c3_Err != nil {
3646- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 721, Col: 23}
3753+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 735, Col: 23}
36473754 }
3648- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var175)
3755+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var182)
36493756 if templ_7745c5c3_Err != nil {
36503757 return templ_7745c5c3_Err
36513758 }
3652- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 344, "\"")
3759+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 354, "\"")
36533760 if templ_7745c5c3_Err != nil {
36543761 return templ_7745c5c3_Err
36553762 }
36563763 } else {
3657- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 345, " data-view=\"")
3764+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 355, " data-view=\"")
36583765 if templ_7745c5c3_Err != nil {
36593766 return templ_7745c5c3_Err
36603767 }
3661- var templ_7745c5c3_Var176 string
3662- templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3768+ var templ_7745c5c3_Var183 string
3769+ templ_7745c5c3_Var183, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
36633770 if templ_7745c5c3_Err != nil {
3664- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 23}
3771+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 737, Col: 23}
36653772 }
3666- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var176)
3773+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var183)
36673774 if templ_7745c5c3_Err != nil {
36683775 return templ_7745c5c3_Err
36693776 }
3670- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 346, "\"")
3777+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 356, "\"")
36713778 if templ_7745c5c3_Err != nil {
36723779 return templ_7745c5c3_Err
36733780 }
36743781 }
36753782 if p.Both && !p.Pinned {
3676- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 347, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
3783+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 357, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
36773784 if templ_7745c5c3_Err != nil {
36783785 return templ_7745c5c3_Err
36793786 }
36803787 }
3681- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 348, ">")
3788+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 358, ">")
36823789 if templ_7745c5c3_Err != nil {
36833790 return templ_7745c5c3_Err
36843791 }
@@ -3688,14 +3795,14 @@ func Compare(l Layout, p ComparePage) templ.Component {
36883795 return templ_7745c5c3_Err
36893796 }
36903797 }
3691- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 349, "</div>")
3798+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 359, "</div>")
36923799 if templ_7745c5c3_Err != nil {
36933800 return templ_7745c5c3_Err
36943801 }
36953802 }
36963803 return nil
36973804 })
3698- templ_7745c5c3_Err = Shell(l, compareRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var157), templ_7745c5c3_Buffer)
3805+ templ_7745c5c3_Err = Shell(l, compareRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var164), templ_7745c5c3_Buffer)
36993806 if templ_7745c5c3_Err != nil {
37003807 return templ_7745c5c3_Err
37013808 }
@@ -3719,173 +3826,173 @@ func compareRail(p ComparePage) templ.Component {
37193826 }()
37203827 }
37213828 ctx = templ.InitializeContext(ctx)
3722- templ_7745c5c3_Var177 := templ.GetChildren(ctx)
3723- if templ_7745c5c3_Var177 == nil {
3724- templ_7745c5c3_Var177 = templ.NopComponent
3829+ templ_7745c5c3_Var184 := templ.GetChildren(ctx)
3830+ if templ_7745c5c3_Var184 == nil {
3831+ templ_7745c5c3_Var184 = templ.NopComponent
37253832 }
37263833 ctx = templ.ClearChildren(ctx)
3727- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 350, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")
3834+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 360, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")
37283835 if templ_7745c5c3_Err != nil {
37293836 return templ_7745c5c3_Err
37303837 }
3731- var templ_7745c5c3_Var178 string
3732- templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))
3838+ var templ_7745c5c3_Var185 string
3839+ templ_7745c5c3_Var185, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))
37333840 if templ_7745c5c3_Err != nil {
3734- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 739, Col: 67}
3841+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 753, Col: 67}
37353842 }
3736- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var178))
3843+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var185))
37373844 if templ_7745c5c3_Err != nil {
37383845 return templ_7745c5c3_Err
37393846 }
3740- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 351, "</span></h2><ul class=\"pcommits\">")
3847+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 361, "</span></h2><ul class=\"pcommits\">")
37413848 if templ_7745c5c3_Err != nil {
37423849 return templ_7745c5c3_Err
37433850 }
37443851 for _, c := range p.Ahead {
3745- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 352, "<li><a href=\"")
3852+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 362, "<li><a href=\"")
37463853 if templ_7745c5c3_Err != nil {
37473854 return templ_7745c5c3_Err
37483855 }
3749- var templ_7745c5c3_Var179 templ.SafeURL
3750- templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
3856+ var templ_7745c5c3_Var186 templ.SafeURL
3857+ templ_7745c5c3_Var186, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
37513858 if templ_7745c5c3_Err != nil {
3752- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 37}
3859+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 757, Col: 37}
37533860 }
3754- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))
3861+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var186))
37553862 if templ_7745c5c3_Err != nil {
37563863 return templ_7745c5c3_Err
37573864 }
3758- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 353, "\">")
3865+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 363, "\">")
37593866 if templ_7745c5c3_Err != nil {
37603867 return templ_7745c5c3_Err
37613868 }
3762- var templ_7745c5c3_Var180 string
3763- templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
3869+ var templ_7745c5c3_Var187 string
3870+ templ_7745c5c3_Var187, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
37643871 if templ_7745c5c3_Err != nil {
3765- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 49}
3872+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 757, Col: 49}
37663873 }
3767- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var180))
3874+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var187))
37683875 if templ_7745c5c3_Err != nil {
37693876 return templ_7745c5c3_Err
37703877 }
3771- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 354, "</a> <span class=\"s\">")
3878+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 364, "</a> <span class=\"s\">")
37723879 if templ_7745c5c3_Err != nil {
37733880 return templ_7745c5c3_Err
37743881 }
3775- var templ_7745c5c3_Var181 string
3776- templ_7745c5c3_Var181, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
3882+ var templ_7745c5c3_Var188 string
3883+ templ_7745c5c3_Var188, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
37773884 if templ_7745c5c3_Err != nil {
3778- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 744, Col: 32}
3885+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 758, Col: 32}
37793886 }
3780- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var181))
3887+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var188))
37813888 if templ_7745c5c3_Err != nil {
37823889 return templ_7745c5c3_Err
37833890 }
3784- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 355, "</span> <span class=\"mute\">")
3891+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 365, "</span> <span class=\"mute\">")
37853892 if templ_7745c5c3_Err != nil {
37863893 return templ_7745c5c3_Err
37873894 }
3788- var templ_7745c5c3_Var182 string
3789- templ_7745c5c3_Var182, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
3895+ var templ_7745c5c3_Var189 string
3896+ templ_7745c5c3_Var189, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
37903897 if templ_7745c5c3_Err != nil {
3791- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 746, Col: 16}
3898+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 760, Col: 16}
37923899 }
3793- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var182))
3900+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var189))
37943901 if templ_7745c5c3_Err != nil {
37953902 return templ_7745c5c3_Err
37963903 }
3797- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 356, " ")
3904+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 366, " ")
37983905 if templ_7745c5c3_Err != nil {
37993906 return templ_7745c5c3_Err
38003907 }
38013908 if c.WhenAt != "" {
3802- var templ_7745c5c3_Var183 string
3803- templ_7745c5c3_Var183, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
3909+ var templ_7745c5c3_Var190 string
3910+ templ_7745c5c3_Var190, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
38043911 if templ_7745c5c3_Err != nil {
3805- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 15}
3912+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 762, Col: 15}
38063913 }
3807- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var183))
3914+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var190))
38083915 if templ_7745c5c3_Err != nil {
38093916 return templ_7745c5c3_Err
38103917 }
3811- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 357, "<time datetime=\"")
3918+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 367, "<time datetime=\"")
38123919 if templ_7745c5c3_Err != nil {
38133920 return templ_7745c5c3_Err
38143921 }
3815- var templ_7745c5c3_Var184 string
3816- templ_7745c5c3_Var184, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
3922+ var templ_7745c5c3_Var191 string
3923+ templ_7745c5c3_Var191, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
38173924 if templ_7745c5c3_Err != nil {
3818- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 42}
3925+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 762, Col: 42}
38193926 }
3820- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var184)
3927+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var191)
38213928 if templ_7745c5c3_Err != nil {
38223929 return templ_7745c5c3_Err
38233930 }
3824- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 358, "\">")
3931+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 368, "\">")
38253932 if templ_7745c5c3_Err != nil {
38263933 return templ_7745c5c3_Err
38273934 }
3828- var templ_7745c5c3_Var185 string
3829- templ_7745c5c3_Var185, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
3935+ var templ_7745c5c3_Var192 string
3936+ templ_7745c5c3_Var192, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
38303937 if templ_7745c5c3_Err != nil {
3831- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 53}
3938+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 762, Col: 53}
38323939 }
3833- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var185))
3940+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var192))
38343941 if templ_7745c5c3_Err != nil {
38353942 return templ_7745c5c3_Err
38363943 }
3837- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 359, "</time>")
3944+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 369, "</time>")
38383945 if templ_7745c5c3_Err != nil {
38393946 return templ_7745c5c3_Err
38403947 }
38413948 }
3842- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 360, "</span></li>")
3949+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 370, "</span></li>")
38433950 if templ_7745c5c3_Err != nil {
38443951 return templ_7745c5c3_Err
38453952 }
38463953 }
3847- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 361, "</ul>")
3954+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 371, "</ul>")
38483955 if templ_7745c5c3_Err != nil {
38493956 return templ_7745c5c3_Err
38503957 }
38513958 if len(p.Ahead) == 0 {
3852- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 362, "<p class=\"dim\">no commit ahead of ")
3959+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 372, "<p class=\"dim\">no commit ahead of ")
38533960 if templ_7745c5c3_Err != nil {
38543961 return templ_7745c5c3_Err
38553962 }
3856- var templ_7745c5c3_Var186 string
3857- templ_7745c5c3_Var186, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3963+ var templ_7745c5c3_Var193 string
3964+ templ_7745c5c3_Var193, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
38583965 if templ_7745c5c3_Err != nil {
3859- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 755, Col: 47}
3966+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 769, Col: 47}
38603967 }
3861- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var186))
3968+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var193))
38623969 if templ_7745c5c3_Err != nil {
38633970 return templ_7745c5c3_Err
38643971 }
3865- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 363, ".</p>")
3972+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 373, ".</p>")
38663973 if templ_7745c5c3_Err != nil {
38673974 return templ_7745c5c3_Err
38683975 }
38693976 }
3870- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 364, "</section>")
3977+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 374, "</section>")
38713978 if templ_7745c5c3_Err != nil {
38723979 return templ_7745c5c3_Err
38733980 }
38743981 if p.HasDiff {
3875- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 365, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
3982+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 375, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
38763983 if templ_7745c5c3_Err != nil {
38773984 return templ_7745c5c3_Err
38783985 }
3879- var templ_7745c5c3_Var187 string
3880- templ_7745c5c3_Var187, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
3986+ var templ_7745c5c3_Var194 string
3987+ templ_7745c5c3_Var194, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
38813988 if templ_7745c5c3_Err != nil {
3882- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 760, Col: 66}
3989+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 774, Col: 66}
38833990 }
3884- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var187))
3991+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var194))
38853992 if templ_7745c5c3_Err != nil {
38863993 return templ_7745c5c3_Err
38873994 }
3888- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 366, "</span></h2>")
3995+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 376, "</span></h2>")
38893996 if templ_7745c5c3_Err != nil {
38903997 return templ_7745c5c3_Err
38913998 }
@@ -3893,12 +4000,12 @@ func compareRail(p ComparePage) templ.Component {
38934000 if templ_7745c5c3_Err != nil {
38944001 return templ_7745c5c3_Err
38954002 }
3896- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 367, "</section>")
4003+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 377, "</section>")
38974004 if templ_7745c5c3_Err != nil {
38984005 return templ_7745c5c3_Err
38994006 }
39004007 }
3901- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 368, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")
4008+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 378, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")
39024009 if templ_7745c5c3_Err != nil {
39034010 return templ_7745c5c3_Err
39044011 }
@@ -3906,7 +4013,7 @@ func compareRail(p ComparePage) templ.Component {
39064013 if templ_7745c5c3_Err != nil {
39074014 return templ_7745c5c3_Err
39084015 }
3909- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 369, "</section>")
4016+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 379, "</section>")
39104017 if templ_7745c5c3_Err != nil {
39114018 return templ_7745c5c3_Err
39124019 }
@@ -3932,35 +4039,35 @@ func MRMergeChecks(c ChecksSummary) templ.Component {
39324039 }()
39334040 }
39344041 ctx = templ.InitializeContext(ctx)
3935- templ_7745c5c3_Var188 := templ.GetChildren(ctx)
3936- if templ_7745c5c3_Var188 == nil {
3937- templ_7745c5c3_Var188 = templ.NopComponent
4042+ templ_7745c5c3_Var195 := templ.GetChildren(ctx)
4043+ if templ_7745c5c3_Var195 == nil {
4044+ templ_7745c5c3_Var195 = templ.NopComponent
39384045 }
39394046 ctx = templ.ClearChildren(ctx)
3940- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 370, "<div id=\"mr-merge-checks\" data-keep-checks>")
4047+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 380, "<div id=\"mr-merge-checks\" data-keep-checks>")
39414048 if templ_7745c5c3_Err != nil {
39424049 return templ_7745c5c3_Err
39434050 }
39444051 if c.Kind == "bad" || c.Kind == "running" {
3945- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 371, "<p class=\"d-note\">")
4052+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 381, "<p class=\"d-note\">")
39464053 if templ_7745c5c3_Err != nil {
39474054 return templ_7745c5c3_Err
39484055 }
3949- var templ_7745c5c3_Var189 string
3950- templ_7745c5c3_Var189, templ_7745c5c3_Err = templ.JoinStringErrs(c.State + ": a failing or unfinished check blocks the merge.")
4056+ var templ_7745c5c3_Var196 string
4057+ templ_7745c5c3_Var196, templ_7745c5c3_Err = templ.JoinStringErrs(c.State + ": a failing or unfinished check blocks the merge.")
39514058 if templ_7745c5c3_Err != nil {
3952- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 775, Col: 84}
4059+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 789, Col: 84}
39534060 }
3954- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var189))
4061+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var196))
39554062 if templ_7745c5c3_Err != nil {
39564063 return templ_7745c5c3_Err
39574064 }
3958- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 372, "</p><label class=\"d-check\"><input type=\"checkbox\" name=\"ignore_checks\"> Ignore checks</label>")
4065+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 382, "</p><label class=\"d-check\"><input type=\"checkbox\" name=\"ignore_checks\"> Ignore checks</label>")
39594066 if templ_7745c5c3_Err != nil {
39604067 return templ_7745c5c3_Err
39614068 }
39624069 }
3963- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 373, "</div>")
4070+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 383, "</div>")
39644071 if templ_7745c5c3_Err != nil {
39654072 return templ_7745c5c3_Err
39664073 }
@@ -3985,9 +4092,9 @@ func MRStateFragment(p MRPage) templ.Component {
39854092 }()
39864093 }
39874094 ctx = templ.InitializeContext(ctx)
3988- templ_7745c5c3_Var190 := templ.GetChildren(ctx)
3989- if templ_7745c5c3_Var190 == nil {
3990- templ_7745c5c3_Var190 = templ.NopComponent
4095+ templ_7745c5c3_Var197 := templ.GetChildren(ctx)
4096+ if templ_7745c5c3_Var197 == nil {
4097+ templ_7745c5c3_Var197 = templ.NopComponent
39914098 }
39924099 ctx = templ.ClearChildren(ctx)
39934100 templ_7745c5c3_Err = mrState(p).Render(ctx, templ_7745c5c3_Buffer)
@@ -4018,92 +4125,92 @@ func mrState(p MRPage) templ.Component {
40184125 }()
40194126 }
40204127 ctx = templ.InitializeContext(ctx)
4021- templ_7745c5c3_Var191 := templ.GetChildren(ctx)
4022- if templ_7745c5c3_Var191 == nil {
4023- templ_7745c5c3_Var191 = templ.NopComponent
4128+ templ_7745c5c3_Var198 := templ.GetChildren(ctx)
4129+ if templ_7745c5c3_Var198 == nil {
4130+ templ_7745c5c3_Var198 = templ.NopComponent
40244131 }
40254132 ctx = templ.ClearChildren(ctx)
4026- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 374, "<dd id=\"mr-state\" hx-swap-oob=\"true\" class=\"mr-state\" data-state=\"")
4133+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 384, "<dd id=\"mr-state\" hx-swap-oob=\"true\" class=\"mr-state\" data-state=\"")
40274134 if templ_7745c5c3_Err != nil {
40284135 return templ_7745c5c3_Err
40294136 }
4030- var templ_7745c5c3_Var192 string
4031- templ_7745c5c3_Var192, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.State)
4137+ var templ_7745c5c3_Var199 string
4138+ templ_7745c5c3_Var199, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.State)
40324139 if templ_7745c5c3_Err != nil {
4033- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 788, Col: 75}
4140+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 802, Col: 75}
40344141 }
4035- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var192)
4142+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var199)
40364143 if templ_7745c5c3_Err != nil {
40374144 return templ_7745c5c3_Err
40384145 }
4039- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 375, "\">")
4146+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 385, "\">")
40404147 if templ_7745c5c3_Err != nil {
40414148 return templ_7745c5c3_Err
40424149 }
4043- var templ_7745c5c3_Var193 string
4044- templ_7745c5c3_Var193, templ_7745c5c3_Err = templ.JoinStringErrs(p.State)
4150+ var templ_7745c5c3_Var200 string
4151+ templ_7745c5c3_Var200, templ_7745c5c3_Err = templ.JoinStringErrs(p.State)
40454152 if templ_7745c5c3_Err != nil {
4046- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 789, Col: 11}
4153+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 803, Col: 11}
40474154 }
4048- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var193))
4155+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var200))
40494156 if templ_7745c5c3_Err != nil {
40504157 return templ_7745c5c3_Err
40514158 }
4052- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 376, " ")
4159+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 386, " ")
40534160 if templ_7745c5c3_Err != nil {
40544161 return templ_7745c5c3_Err
40554162 }
40564163 if p.MergedShort != "" {
4057- var templ_7745c5c3_Var194 string
4058- templ_7745c5c3_Var194, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
4164+ var templ_7745c5c3_Var201 string
4165+ templ_7745c5c3_Var201, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
40594166 if templ_7745c5c3_Err != nil {
4060- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 791, Col: 11}
4167+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 805, Col: 11}
40614168 }
4062- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var194))
4169+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var201))
40634170 if templ_7745c5c3_Err != nil {
40644171 return templ_7745c5c3_Err
40654172 }
4066- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 377, "<a href=\"")
4173+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 387, "<a href=\"")
40674174 if templ_7745c5c3_Err != nil {
40684175 return templ_7745c5c3_Err
40694176 }
4070- var templ_7745c5c3_Var195 templ.SafeURL
4071- templ_7745c5c3_Var195, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.MergedHref))
4177+ var templ_7745c5c3_Var202 templ.SafeURL
4178+ templ_7745c5c3_Var202, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.MergedHref))
40724179 if templ_7745c5c3_Err != nil {
4073- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 791, Col: 50}
4180+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 805, Col: 50}
40744181 }
4075- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var195))
4182+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var202))
40764183 if templ_7745c5c3_Err != nil {
40774184 return templ_7745c5c3_Err
40784185 }
4079- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 378, "\">")
4186+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 388, "\">")
40804187 if templ_7745c5c3_Err != nil {
40814188 return templ_7745c5c3_Err
40824189 }
4083- var templ_7745c5c3_Var196 string
4084- templ_7745c5c3_Var196, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergedShort)
4190+ var templ_7745c5c3_Var203 string
4191+ templ_7745c5c3_Var203, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergedShort)
40854192 if templ_7745c5c3_Err != nil {
4086- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 791, Col: 68}
4193+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 805, Col: 68}
40874194 }
4088- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var196))
4195+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var203))
40894196 if templ_7745c5c3_Err != nil {
40904197 return templ_7745c5c3_Err
40914198 }
4092- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 379, "</a>")
4199+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 389, "</a>")
40934200 if templ_7745c5c3_Err != nil {
40944201 return templ_7745c5c3_Err
40954202 }
4096- var templ_7745c5c3_Var197 string
4097- templ_7745c5c3_Var197, templ_7745c5c3_Err = templ.JoinStringErrs(" · " + p.MergeMode)
4203+ var templ_7745c5c3_Var204 string
4204+ templ_7745c5c3_Var204, templ_7745c5c3_Err = templ.JoinStringErrs(" · " + p.MergeMode)
40984205 if templ_7745c5c3_Err != nil {
4099- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 791, Col: 96}
4206+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 805, Col: 96}
41004207 }
4101- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var197))
4208+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var204))
41024209 if templ_7745c5c3_Err != nil {
41034210 return templ_7745c5c3_Err
41044211 }
41054212 }
4106- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 380, "</dd>")
4213+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 390, "</dd>")
41074214 if templ_7745c5c3_Err != nil {
41084215 return templ_7745c5c3_Err
41094216 }
@@ -4127,12 +4234,12 @@ func mrActions(p MRPage, fragment bool) templ.Component {
41274234 }()
41284235 }
41294236 ctx = templ.InitializeContext(ctx)
4130- templ_7745c5c3_Var198 := templ.GetChildren(ctx)
4131- if templ_7745c5c3_Var198 == nil {
4132- templ_7745c5c3_Var198 = templ.NopComponent
4237+ templ_7745c5c3_Var205 := templ.GetChildren(ctx)
4238+ if templ_7745c5c3_Var205 == nil {
4239+ templ_7745c5c3_Var205 = templ.NopComponent
41334240 }
41344241 ctx = templ.ClearChildren(ctx)
4135- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 381, "<div id=\"mr-actions\" hx-swap-oob=\"true\" class=\"mr-acts\">")
4242+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 391, "<div id=\"mr-actions\" hx-swap-oob=\"true\" class=\"mr-acts\">")
41364243 if templ_7745c5c3_Err != nil {
41374244 return templ_7745c5c3_Err
41384245 }
@@ -4151,25 +4258,25 @@ func mrActions(p MRPage, fragment bool) templ.Component {
41514258 return templ_7745c5c3_Err
41524259 }
41534260 if fragment && p.MergeError != "" {
4154- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 382, "<p class=\"d-err\" role=\"alert\">")
4261+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 392, "<p class=\"d-err\" role=\"alert\">")
41554262 if templ_7745c5c3_Err != nil {
41564263 return templ_7745c5c3_Err
41574264 }
4158- var templ_7745c5c3_Var199 string
4159- templ_7745c5c3_Var199, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergeError)
4265+ var templ_7745c5c3_Var206 string
4266+ templ_7745c5c3_Var206, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergeError)
41604267 if templ_7745c5c3_Err != nil {
4161- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 804, Col: 47}
4268+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 818, Col: 47}
41624269 }
4163- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var199))
4270+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var206))
41644271 if templ_7745c5c3_Err != nil {
41654272 return templ_7745c5c3_Err
41664273 }
4167- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 383, "</p>")
4274+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 393, "</p>")
41684275 if templ_7745c5c3_Err != nil {
41694276 return templ_7745c5c3_Err
41704277 }
41714278 }
4172- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 384, "</div>")
4279+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 394, "</div>")
41734280 if templ_7745c5c3_Err != nil {
41744281 return templ_7745c5c3_Err
41754282 }
@@ -4194,38 +4301,38 @@ func MRActionStatus(message, href string) templ.Component {
41944301 }()
41954302 }
41964303 ctx = templ.InitializeContext(ctx)
4197- templ_7745c5c3_Var200 := templ.GetChildren(ctx)
4198- if templ_7745c5c3_Var200 == nil {
4199- templ_7745c5c3_Var200 = templ.NopComponent
4304+ templ_7745c5c3_Var207 := templ.GetChildren(ctx)
4305+ if templ_7745c5c3_Var207 == nil {
4306+ templ_7745c5c3_Var207 = templ.NopComponent
42004307 }
42014308 ctx = templ.ClearChildren(ctx)
4202- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 385, "<div id=\"mr-actions\" class=\"mr-acts\" hx-swap-oob=\"true\"><p class=\"d-err\" role=\"alert\">")
4309+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 395, "<div id=\"mr-actions\" class=\"mr-acts\" hx-swap-oob=\"true\"><p class=\"d-err\" role=\"alert\">")
42034310 if templ_7745c5c3_Err != nil {
42044311 return templ_7745c5c3_Err
42054312 }
4206- var templ_7745c5c3_Var201 string
4207- templ_7745c5c3_Var201, templ_7745c5c3_Err = templ.JoinStringErrs(message)
4313+ var templ_7745c5c3_Var208 string
4314+ templ_7745c5c3_Var208, templ_7745c5c3_Err = templ.JoinStringErrs(message)
42084315 if templ_7745c5c3_Err != nil {
4209- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 812, Col: 40}
4316+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 826, Col: 41}
42104317 }
4211- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var201))
4318+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var208))
42124319 if templ_7745c5c3_Err != nil {
42134320 return templ_7745c5c3_Err
42144321 }
4215- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 386, " <a href=\"")
4322+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 396, " <a href=\"")
42164323 if templ_7745c5c3_Err != nil {
42174324 return templ_7745c5c3_Err
42184325 }
4219- var templ_7745c5c3_Var202 templ.SafeURL
4220- templ_7745c5c3_Var202, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
4326+ var templ_7745c5c3_Var209 templ.SafeURL
4327+ templ_7745c5c3_Var209, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
42214328 if templ_7745c5c3_Err != nil {
4222- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 812, Col: 72}
4329+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 826, Col: 73}
42234330 }
4224- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var202))
4331+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var209))
42254332 if templ_7745c5c3_Err != nil {
42264333 return templ_7745c5c3_Err
42274334 }
4228- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 387, "\">reload</a></p></div>")
4335+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 397, "\">reload</a></p></div>")
42294336 if templ_7745c5c3_Err != nil {
42304337 return templ_7745c5c3_Err
42314338 }
@@ -1088,11 +1088,9 @@ func MergeRequest(l Layout, p MRPage) templ.Component {
1088 return templ_7745c5c3_Err1088 return templ_7745c5c3_Err
1089 }1089 }
1090 }1090 }
1091- for _, c := range p.General {1091+ templ_7745c5c3_Err = issueTimeline(p.Timeline).Render(ctx, templ_7745c5c3_Buffer)
1092- templ_7745c5c3_Err = commentView(c, "").Render(ctx, templ_7745c5c3_Buffer)1092+ if templ_7745c5c3_Err != nil {
1093- if templ_7745c5c3_Err != nil {1093+ return templ_7745c5c3_Err
1094- return templ_7745c5c3_Err
1095- }
1096 }1094 }
1097 if p.NComments == 0 {1095 if p.NComments == 0 {
1098 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<p class=\"dim\">no comments yet.</p>")1096 templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<p class=\"dim\">no comments yet.</p>")
@@ -1149,7 +1147,7 @@ func branchLink(name, href string) templ.Component {
1149 var templ_7745c5c3_Var51 templ.SafeURL1147 var templ_7745c5c3_Var51 templ.SafeURL
1150 templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))1148 templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
1151 if templ_7745c5c3_Err != nil {1149 if templ_7745c5c3_Err != nil {
1152- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 232, Col: 31}1150+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 230, Col: 31}
1153 }1151 }
1154 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51))1152 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51))
1155 if templ_7745c5c3_Err != nil {1153 if templ_7745c5c3_Err != nil {
@@ -1162,7 +1160,7 @@ func branchLink(name, href string) templ.Component {
1162 var templ_7745c5c3_Var52 string1160 var templ_7745c5c3_Var52 string
1163 templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(name)1161 templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(name)
1164 if templ_7745c5c3_Err != nil {1162 if templ_7745c5c3_Err != nil {
1165- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 232, Col: 40}1163+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 230, Col: 40}
1166 }1164 }
1167 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))1165 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))
1168 if templ_7745c5c3_Err != nil {1166 if templ_7745c5c3_Err != nil {
@@ -1176,7 +1174,7 @@ func branchLink(name, href string) templ.Component {
1176 var templ_7745c5c3_Var53 string1174 var templ_7745c5c3_Var53 string
1177 templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.JoinStringErrs(name)1175 templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.JoinStringErrs(name)
1178 if templ_7745c5c3_Err != nil {1176 if templ_7745c5c3_Err != nil {
1179- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 234, Col: 8}1177+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 232, Col: 8}
1180 }1178 }
1181 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var53))1179 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var53))
1182 if templ_7745c5c3_Err != nil {1180 if templ_7745c5c3_Err != nil {
@@ -1257,7 +1255,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1257 var templ_7745c5c3_Var56 string1255 var templ_7745c5c3_Var56 string
1258 templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.ResolveAttributeValue("c" + c.ID + suffix)1256 templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.ResolveAttributeValue("c" + c.ID + suffix)
1259 if templ_7745c5c3_Err != nil {1257 if templ_7745c5c3_Err != nil {
1260- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 253, Col: 42}1258+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 251, Col: 42}
1261 }1259 }
1262 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var56)1260 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var56)
1263 if templ_7745c5c3_Err != nil {1261 if templ_7745c5c3_Err != nil {
@@ -1270,7 +1268,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1270 var templ_7745c5c3_Var57 string1268 var templ_7745c5c3_Var57 string
1271 templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolved))1269 templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolved))
1272 if templ_7745c5c3_Err != nil {1270 if templ_7745c5c3_Err != nil {
1273- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 253, Col: 81}1271+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 251, Col: 81}
1274 }1272 }
1275 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var57)1273 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var57)
1276 if templ_7745c5c3_Err != nil {1274 if templ_7745c5c3_Err != nil {
@@ -1293,7 +1291,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1293 var templ_7745c5c3_Var58 string1291 var templ_7745c5c3_Var58 string
1294 templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)1292 templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
1295 if templ_7745c5c3_Err != nil {1293 if templ_7745c5c3_Err != nil {
1296- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 255, Col: 33}1294+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 253, Col: 33}
1297 }1295 }
1298 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))1296 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))
1299 if templ_7745c5c3_Err != nil {1297 if templ_7745c5c3_Err != nil {
@@ -1307,7 +1305,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1307 var templ_7745c5c3_Var59 string1305 var templ_7745c5c3_Var59 string
1308 templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1306 templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1309 if templ_7745c5c3_Err != nil {1307 if templ_7745c5c3_Err != nil {
1310- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 257, Col: 9}1308+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 255, Col: 9}
1311 }1309 }
1312 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))1310 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))
1313 if templ_7745c5c3_Err != nil {1311 if templ_7745c5c3_Err != nil {
@@ -1320,7 +1318,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1320 var templ_7745c5c3_Var60 string1318 var templ_7745c5c3_Var60 string
1321 templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)1319 templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
1322 if templ_7745c5c3_Err != nil {1320 if templ_7745c5c3_Err != nil {
1323- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 257, Col: 49}1321+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 255, Col: 49}
1324 }1322 }
1325 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var60)1323 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var60)
1326 if templ_7745c5c3_Err != nil {1324 if templ_7745c5c3_Err != nil {
@@ -1333,7 +1331,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1333 var templ_7745c5c3_Var61 string1331 var templ_7745c5c3_Var61 string
1334 templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Abs)1332 templ_7745c5c3_Var61, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Abs)
1335 if templ_7745c5c3_Err != nil {1333 if templ_7745c5c3_Err != nil {
1336- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 257, Col: 65}1334+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 255, Col: 65}
1337 }1335 }
1338 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var61)1336 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var61)
1339 if templ_7745c5c3_Err != nil {1337 if templ_7745c5c3_Err != nil {
@@ -1346,7 +1344,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1346 var templ_7745c5c3_Var62 string1344 var templ_7745c5c3_Var62 string
1347 templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)1345 templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
1348 if templ_7745c5c3_Err != nil {1346 if templ_7745c5c3_Err != nil {
1349- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 257, Col: 76}1347+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 255, Col: 76}
1350 }1348 }
1351 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))1349 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
1352 if templ_7745c5c3_Err != nil {1350 if templ_7745c5c3_Err != nil {
@@ -1361,7 +1359,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1361 var templ_7745c5c3_Var63 string1359 var templ_7745c5c3_Var63 string
1362 templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1360 templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1363 if templ_7745c5c3_Err != nil {1361 if templ_7745c5c3_Err != nil {
1364- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 260, Col: 9}1362+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 258, Col: 9}
1365 }1363 }
1366 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))1364 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
1367 if templ_7745c5c3_Err != nil {1365 if templ_7745c5c3_Err != nil {
@@ -1376,7 +1374,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1376 var templ_7745c5c3_Var64 string1374 var templ_7745c5c3_Var64 string
1377 templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1375 templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1378 if templ_7745c5c3_Err != nil {1376 if templ_7745c5c3_Err != nil {
1379- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 263, Col: 9}1377+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 261, Col: 9}
1380 }1378 }
1381 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))1379 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
1382 if templ_7745c5c3_Err != nil {1380 if templ_7745c5c3_Err != nil {
@@ -1391,7 +1389,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1391 var templ_7745c5c3_Var65 string1389 var templ_7745c5c3_Var65 string
1392 templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(" ")1390 templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
1393 if templ_7745c5c3_Err != nil {1391 if templ_7745c5c3_Err != nil {
1394- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 266, Col: 9}1392+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 264, Col: 9}
1395 }1393 }
1396 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))1394 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
1397 if templ_7745c5c3_Err != nil {1395 if templ_7745c5c3_Err != nil {
@@ -1404,7 +1402,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1404 var templ_7745c5c3_Var66 string1402 var templ_7745c5c3_Var66 string
1405 templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinStringErrs(c.Where)1403 templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinStringErrs(c.Where)
1406 if templ_7745c5c3_Err != nil {1404 if templ_7745c5c3_Err != nil {
1407- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 266, Col: 47}1405+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 264, Col: 47}
1408 }1406 }
1409 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))1407 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
1410 if templ_7745c5c3_Err != nil {1408 if templ_7745c5c3_Err != nil {
@@ -1479,7 +1477,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1479 var templ_7745c5c3_Var67 string1477 var templ_7745c5c3_Var67 string
1480 templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(c.Verdict)1478 templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(c.Verdict)
1481 if templ_7745c5c3_Err != nil {1479 if templ_7745c5c3_Err != nil {
1482- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 290, Col: 36}1480+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 289, Col: 36}
1483 }1481 }
1484 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))1482 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
1485 if templ_7745c5c3_Err != nil {1483 if templ_7745c5c3_Err != nil {
@@ -1498,7 +1496,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1498 var templ_7745c5c3_Var68 string1496 var templ_7745c5c3_Var68 string
1499 templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(c.Range)1497 templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(c.Range)
1500 if templ_7745c5c3_Err != nil {1498 if templ_7745c5c3_Err != nil {
1501- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 293, Col: 31}1499+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 292, Col: 31}
1502 }1500 }
1503 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))1501 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
1504 if templ_7745c5c3_Err != nil {1502 if templ_7745c5c3_Err != nil {
@@ -1517,7 +1515,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1517 var templ_7745c5c3_Var69 string1515 var templ_7745c5c3_Var69 string
1518 templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Quote)1516 templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.Quote)
1519 if templ_7745c5c3_Err != nil {1517 if templ_7745c5c3_Err != nil {
1520- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 296, Col: 65}1518+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 295, Col: 65}
1521 }1519 }
1522 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var69)1520 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var69)
1523 if templ_7745c5c3_Err != nil {1521 if templ_7745c5c3_Err != nil {
@@ -1536,7 +1534,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1536 var templ_7745c5c3_Var70 templ.SafeURL1534 var templ_7745c5c3_Var70 templ.SafeURL
1537 templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Edit.Action))1535 templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Edit.Action))
1538 if templ_7745c5c3_Err != nil {1536 if templ_7745c5c3_Err != nil {
1539- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 299, Col: 92}1537+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 298, Col: 92}
1540 }1538 }
1541 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))1539 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
1542 if templ_7745c5c3_Err != nil {1540 if templ_7745c5c3_Err != nil {
@@ -1549,7 +1547,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1549 var templ_7745c5c3_Var71 string1547 var templ_7745c5c3_Var71 string
1550 templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Edit.From))1548 templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Edit.From))
1551 if templ_7745c5c3_Err != nil {1549 if templ_7745c5c3_Err != nil {
1552- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 299, Col: 153}1550+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 298, Col: 153}
1553 }1551 }
1554 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var71)1552 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var71)
1555 if templ_7745c5c3_Err != nil {1553 if templ_7745c5c3_Err != nil {
@@ -1562,7 +1560,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1562 var templ_7745c5c3_Var72 string1560 var templ_7745c5c3_Var72 string
1563 templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(c.Edit.Text)1561 templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(c.Edit.Text)
1564 if templ_7745c5c3_Err != nil {1562 if templ_7745c5c3_Err != nil {
1565- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 299, Col: 232}1563+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 298, Col: 232}
1566 }1564 }
1567 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72))1565 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72))
1568 if templ_7745c5c3_Err != nil {1566 if templ_7745c5c3_Err != nil {
@@ -1581,7 +1579,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1581 var templ_7745c5c3_Var73 templ.SafeURL1579 var templ_7745c5c3_Var73 templ.SafeURL
1582 templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Delete.Action))1580 templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Delete.Action))
1583 if templ_7745c5c3_Err != nil {1581 if templ_7745c5c3_Err != nil {
1584- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 302, Col: 96}1582+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 301, Col: 96}
1585 }1583 }
1586 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))1584 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))
1587 if templ_7745c5c3_Err != nil {1585 if templ_7745c5c3_Err != nil {
@@ -1594,7 +1592,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1594 var templ_7745c5c3_Var74 string1592 var templ_7745c5c3_Var74 string
1595 templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Delete.From))1593 templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Delete.From))
1596 if templ_7745c5c3_Err != nil {1594 if templ_7745c5c3_Err != nil {
1597- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 302, Col: 159}1595+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 301, Col: 159}
1598 }1596 }
1599 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var74)1597 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var74)
1600 if templ_7745c5c3_Err != nil {1598 if templ_7745c5c3_Err != nil {
@@ -1633,7 +1631,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1633 var templ_7745c5c3_Var75 templ.SafeURL1631 var templ_7745c5c3_Var75 templ.SafeURL
1634 templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Resolve.Action))1632 templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Resolve.Action))
1635 if templ_7745c5c3_Err != nil {1633 if templ_7745c5c3_Err != nil {
1636- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 313, Col: 77}1634+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 312, Col: 77}
1637 }1635 }
1638 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var75))1636 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var75))
1639 if templ_7745c5c3_Err != nil {1637 if templ_7745c5c3_Err != nil {
@@ -1646,7 +1644,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1646 var templ_7745c5c3_Var76 string1644 var templ_7745c5c3_Var76 string
1647 templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolve.Value))1645 templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.ResolveAttributeValue(boolText(c.Resolve.Value))
1648 if templ_7745c5c3_Err != nil {1646 if templ_7745c5c3_Err != nil {
1649- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 314, Col: 74}1647+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 313, Col: 74}
1650 }1648 }
1651 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var76)1649 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var76)
1652 if templ_7745c5c3_Err != nil {1650 if templ_7745c5c3_Err != nil {
@@ -1664,7 +1662,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1664 var templ_7745c5c3_Var77 string1662 var templ_7745c5c3_Var77 string
1665 templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Resolve.From))1663 templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(c.Resolve.From))
1666 if templ_7745c5c3_Err != nil {1664 if templ_7745c5c3_Err != nil {
1667- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 316, Col: 66}1665+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 315, Col: 66}
1668 }1666 }
1669 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)1667 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)
1670 if templ_7745c5c3_Err != nil {1668 if templ_7745c5c3_Err != nil {
@@ -1682,7 +1680,7 @@ func commentView(c CommentView, suffix string) templ.Component {
1682 var templ_7745c5c3_Var78 string1680 var templ_7745c5c3_Var78 string
1683 templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(c.Resolve.Label)1681 templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(c.Resolve.Label)
1684 if templ_7745c5c3_Err != nil {1682 if templ_7745c5c3_Err != nil {
1685- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 318, Col: 55}1683+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 317, Col: 55}
1686 }1684 }
1687 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))1685 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))
1688 if templ_7745c5c3_Err != nil {1686 if templ_7745c5c3_Err != nil {
@@ -1737,7 +1735,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1737 var templ_7745c5c3_Var80 templ.SafeURL1735 var templ_7745c5c3_Var80 templ.SafeURL
1738 templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Action))1736 templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Action))
1739 if templ_7745c5c3_Err != nil {1737 if templ_7745c5c3_Err != nil {
1740- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 333, Col: 67}1738+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 332, Col: 67}
1741 }1739 }
1742 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var80))1740 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var80))
1743 if templ_7745c5c3_Err != nil {1741 if templ_7745c5c3_Err != nil {
@@ -1750,7 +1748,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1750 var templ_7745c5c3_Var81 string1748 var templ_7745c5c3_Var81 string
1751 templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)1749 templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
1752 if templ_7745c5c3_Err != nil {1750 if templ_7745c5c3_Err != nil {
1753- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 334, Col: 28}1751+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 333, Col: 28}
1754 }1752 }
1755 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var81)1753 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var81)
1756 if templ_7745c5c3_Err != nil {1754 if templ_7745c5c3_Err != nil {
@@ -1763,7 +1761,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1763 var templ_7745c5c3_Var82 string1761 var templ_7745c5c3_Var82 string
1764 templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.JoinStringErrs(f.Title)1762 templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.JoinStringErrs(f.Title)
1765 if templ_7745c5c3_Err != nil {1763 if templ_7745c5c3_Err != nil {
1766- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 334, Col: 40}1764+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 333, Col: 40}
1767 }1765 }
1768 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var82))1766 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var82))
1769 if templ_7745c5c3_Err != nil {1767 if templ_7745c5c3_Err != nil {
@@ -1776,7 +1774,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1776 var templ_7745c5c3_Var83 string1774 var templ_7745c5c3_Var83 string
1777 templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)1775 templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ID + suffix)
1778 if templ_7745c5c3_Err != nil {1776 if templ_7745c5c3_Err != nil {
1779- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 336, Col: 21}1777+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 335, Col: 21}
1780 }1778 }
1781 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var83)1779 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var83)
1782 if templ_7745c5c3_Err != nil {1780 if templ_7745c5c3_Err != nil {
@@ -1815,7 +1813,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1815 var templ_7745c5c3_Var84 string1813 var templ_7745c5c3_Var84 string
1816 templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)1814 templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Path)
1817 if templ_7745c5c3_Err != nil {1815 if templ_7745c5c3_Err != nil {
1818- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 351, Col: 50}1816+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 350, Col: 50}
1819 }1817 }
1820 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var84)1818 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var84)
1821 if templ_7745c5c3_Err != nil {1819 if templ_7745c5c3_Err != nil {
@@ -1828,7 +1826,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1828 var templ_7745c5c3_Var85 string1826 var templ_7745c5c3_Var85 string
1829 templ_7745c5c3_Var85, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Line)1827 templ_7745c5c3_Var85, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Line)
1830 if templ_7745c5c3_Err != nil {1828 if templ_7745c5c3_Err != nil {
1831- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 352, Col: 50}1829+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 351, Col: 50}
1832 }1830 }
1833 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var85)1831 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var85)
1834 if templ_7745c5c3_Err != nil {1832 if templ_7745c5c3_Err != nil {
@@ -1841,7 +1839,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1841 var templ_7745c5c3_Var86 string1839 var templ_7745c5c3_Var86 string
1842 templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Side)1840 templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.Side)
1843 if templ_7745c5c3_Err != nil {1841 if templ_7745c5c3_Err != nil {
1844- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 353, Col: 50}1842+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 352, Col: 50}
1845 }1843 }
1846 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var86)1844 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var86)
1847 if templ_7745c5c3_Err != nil {1845 if templ_7745c5c3_Err != nil {
@@ -1854,7 +1852,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1854 var templ_7745c5c3_Var87 string1852 var templ_7745c5c3_Var87 string
1855 templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.StartLine)1853 templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.StartLine)
1856 if templ_7745c5c3_Err != nil {1854 if templ_7745c5c3_Err != nil {
1857- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 354, Col: 86}1855+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 353, Col: 86}
1858 }1856 }
1859 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)1857 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)
1860 if templ_7745c5c3_Err != nil {1858 if templ_7745c5c3_Err != nil {
@@ -1873,7 +1871,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1873 var templ_7745c5c3_Var88 string1871 var templ_7745c5c3_Var88 string
1874 templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ReplyTo)1872 templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.ResolveAttributeValue(f.ReplyTo)
1875 if templ_7745c5c3_Err != nil {1873 if templ_7745c5c3_Err != nil {
1876- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 357, Col: 57}1874+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 356, Col: 57}
1877 }1875 }
1878 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var88)1876 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var88)
1879 if templ_7745c5c3_Err != nil {1877 if templ_7745c5c3_Err != nil {
@@ -1898,7 +1896,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1898 var templ_7745c5c3_Var89 string1896 var templ_7745c5c3_Var89 string
1899 templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(f.From))1897 templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.ResolveAttributeValue(itoa(f.From))
1900 if templ_7745c5c3_Err != nil {1898 if templ_7745c5c3_Err != nil {
1901- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 363, Col: 56}1899+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 362, Col: 56}
1902 }1900 }
1903 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var89)1901 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var89)
1904 if templ_7745c5c3_Err != nil {1902 if templ_7745c5c3_Err != nil {
@@ -1921,7 +1919,7 @@ func commentForm(f CommentForm, suffix string) templ.Component {
1921 var templ_7745c5c3_Var90 templ.SafeURL1919 var templ_7745c5c3_Var90 templ.SafeURL
1922 templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Cancel))1920 templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(f.Cancel))
1923 if templ_7745c5c3_Err != nil {1921 if templ_7745c5c3_Err != nil {
1924- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 368, Col: 49}1922+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 367, Col: 49}
1925 }1923 }
1926 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var90))1924 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var90))
1927 if templ_7745c5c3_Err != nil {1925 if templ_7745c5c3_Err != nil {
@@ -1968,7 +1966,7 @@ func mrFooter(p MRPage) templ.Component {
1968 var templ_7745c5c3_Var92 string1966 var templ_7745c5c3_Var92 string
1969 templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)1967 templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitCount)
1970 if templ_7745c5c3_Err != nil {1968 if templ_7745c5c3_Err != nil {
1971- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 377, Col: 136}1969+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 376, Col: 136}
1972 }1970 }
1973 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var92))1971 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var92))
1974 if templ_7745c5c3_Err != nil {1972 if templ_7745c5c3_Err != nil {
@@ -1981,7 +1979,7 @@ func mrFooter(p MRPage) templ.Component {
1981 var templ_7745c5c3_Var93 string1979 var templ_7745c5c3_Var93 string
1982 templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.JoinStringErrs("Checks ")1980 templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.JoinStringErrs("Checks ")
1983 if templ_7745c5c3_Err != nil {1981 if templ_7745c5c3_Err != nil {
1984- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 379, Col: 15}1982+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 378, Col: 15}
1985 }1983 }
1986 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var93))1984 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var93))
1987 if templ_7745c5c3_Err != nil {1985 if templ_7745c5c3_Err != nil {
@@ -1995,7 +1993,7 @@ func mrFooter(p MRPage) templ.Component {
1995 var templ_7745c5c3_Var94 string1993 var templ_7745c5c3_Var94 string
1996 templ_7745c5c3_Var94, templ_7745c5c3_Err = templ.JoinStringErrs(p.ChecksSum.Title)1994 templ_7745c5c3_Var94, templ_7745c5c3_Err = templ.JoinStringErrs(p.ChecksSum.Title)
1997 if templ_7745c5c3_Err != nil {1995 if templ_7745c5c3_Err != nil {
1998- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 382, Col: 25}1996+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 381, Col: 25}
1999 }1997 }
2000 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var94))1998 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var94))
2001 if templ_7745c5c3_Err != nil {1999 if templ_7745c5c3_Err != nil {
@@ -2029,7 +2027,7 @@ func mrFooter(p MRPage) templ.Component {
2029 var templ_7745c5c3_Var95 templ.SafeURL2027 var templ_7745c5c3_Var95 templ.SafeURL
2030 templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))2028 templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.Href))
2031 if templ_7745c5c3_Err != nil {2029 if templ_7745c5c3_Err != nil {
2032- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 395, Col: 42}2030+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 394, Col: 42}
2033 }2031 }
2034 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var95))2032 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var95))
2035 if templ_7745c5c3_Err != nil {2033 if templ_7745c5c3_Err != nil {
@@ -2042,7 +2040,7 @@ func mrFooter(p MRPage) templ.Component {
2042 var templ_7745c5c3_Var96 string2040 var templ_7745c5c3_Var96 string
2043 templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)2041 templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
2044 if templ_7745c5c3_Err != nil {2042 if templ_7745c5c3_Err != nil {
2045- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 395, Col: 54}2043+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 394, Col: 54}
2046 }2044 }
2047 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var96))2045 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var96))
2048 if templ_7745c5c3_Err != nil {2046 if templ_7745c5c3_Err != nil {
@@ -2055,7 +2053,7 @@ func mrFooter(p MRPage) templ.Component {
2055 var templ_7745c5c3_Var97 string2053 var templ_7745c5c3_Var97 string
2056 templ_7745c5c3_Var97, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)2054 templ_7745c5c3_Var97, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
2057 if templ_7745c5c3_Err != nil {2055 if templ_7745c5c3_Err != nil {
2058- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 396, Col: 22}2056+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 395, Col: 22}
2059 }2057 }
2060 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var97))2058 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var97))
2061 if templ_7745c5c3_Err != nil {2059 if templ_7745c5c3_Err != nil {
@@ -2068,7 +2066,7 @@ func mrFooter(p MRPage) templ.Component {
2068 var templ_7745c5c3_Var98 string2066 var templ_7745c5c3_Var98 string
2069 templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)2067 templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
2070 if templ_7745c5c3_Err != nil {2068 if templ_7745c5c3_Err != nil {
2071- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 397, Col: 21}2069+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 396, Col: 21}
2072 }2070 }
2073 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))2071 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))
2074 if templ_7745c5c3_Err != nil {2072 if templ_7745c5c3_Err != nil {
@@ -2086,7 +2084,7 @@ func mrFooter(p MRPage) templ.Component {
2086 var templ_7745c5c3_Var99 string2084 var templ_7745c5c3_Var99 string
2087 templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)2085 templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
2088 if templ_7745c5c3_Err != nil {2086 if templ_7745c5c3_Err != nil {
2089- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 34}2087+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 399, Col: 34}
2090 }2088 }
2091 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var99)2089 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var99)
2092 if templ_7745c5c3_Err != nil {2090 if templ_7745c5c3_Err != nil {
@@ -2099,7 +2097,7 @@ func mrFooter(p MRPage) templ.Component {
2099 var templ_7745c5c3_Var100 string2097 var templ_7745c5c3_Var100 string
2100 templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)2098 templ_7745c5c3_Var100, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
2101 if templ_7745c5c3_Err != nil {2099 if templ_7745c5c3_Err != nil {
2102- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 400, Col: 45}2100+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 399, Col: 45}
2103 }2101 }
2104 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))2102 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var100))
2105 if templ_7745c5c3_Err != nil {2103 if templ_7745c5c3_Err != nil {
@@ -2153,7 +2151,7 @@ func mrFooter(p MRPage) templ.Component {
2153 var templ_7745c5c3_Var101 string2151 var templ_7745c5c3_Var101 string
2154 templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitsNote)2152 templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.JoinStringErrs(p.CommitsNote)
2155 if templ_7745c5c3_Err != nil {2153 if templ_7745c5c3_Err != nil {
2156- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 421, Col: 35}2154+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 420, Col: 35}
2157 }2155 }
2158 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))2156 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var101))
2159 if templ_7745c5c3_Err != nil {2157 if templ_7745c5c3_Err != nil {
@@ -2201,20 +2199,129 @@ func mrRail(p MRPage) templ.Component {
2201 templ_7745c5c3_Var102 = templ.NopComponent2199 templ_7745c5c3_Var102 = templ.NopComponent
2202 }2200 }
2203 ctx = templ.ClearChildren(ctx)2201 ctx = templ.ClearChildren(ctx)
2204- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 207, "<section aria-labelledby=\"r-files\" class=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")2202+ if len(p.Issues) > 0 {
2203+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 207, "<section aria-labelledby=\"r-issues\"><h2 id=\"r-issues\">Issues</h2><ul>")
2204+ if templ_7745c5c3_Err != nil {
2205+ return templ_7745c5c3_Err
2206+ }
2207+ for _, i := range p.Issues {
2208+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 208, "<li><a class=\"ref\" href=\"")
2209+ if templ_7745c5c3_Err != nil {
2210+ return templ_7745c5c3_Err
2211+ }
2212+ var templ_7745c5c3_Var103 templ.SafeURL
2213+ templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(i.Href))
2214+ if templ_7745c5c3_Err != nil {
2215+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 436, Col: 49}
2216+ }
2217+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))
2218+ if templ_7745c5c3_Err != nil {
2219+ return templ_7745c5c3_Err
2220+ }
2221+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 209, "\">")
2222+ if templ_7745c5c3_Err != nil {
2223+ return templ_7745c5c3_Err
2224+ }
2225+ var templ_7745c5c3_Var104 string
2226+ templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinStringErrs(i.Number)
2227+ if templ_7745c5c3_Err != nil {
2228+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 436, Col: 62}
2229+ }
2230+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))
2231+ if templ_7745c5c3_Err != nil {
2232+ return templ_7745c5c3_Err
2233+ }
2234+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 210, " ")
2235+ if templ_7745c5c3_Err != nil {
2236+ return templ_7745c5c3_Err
2237+ }
2238+ var templ_7745c5c3_Var105 string
2239+ templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(i.Title)
2240+ if templ_7745c5c3_Err != nil {
2241+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 436, Col: 74}
2242+ }
2243+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105))
2244+ if templ_7745c5c3_Err != nil {
2245+ return templ_7745c5c3_Err
2246+ }
2247+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 211, "</a>")
2248+ if templ_7745c5c3_Err != nil {
2249+ return templ_7745c5c3_Err
2250+ }
2251+ var templ_7745c5c3_Var106 string
2252+ templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
2253+ if templ_7745c5c3_Err != nil {
2254+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 436, Col: 85}
2255+ }
2256+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var106))
2257+ if templ_7745c5c3_Err != nil {
2258+ return templ_7745c5c3_Err
2259+ }
2260+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 212, "<span class=\"mr-state\" data-state=\"")
2261+ if templ_7745c5c3_Err != nil {
2262+ return templ_7745c5c3_Err
2263+ }
2264+ var templ_7745c5c3_Var107 string
2265+ templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.ResolveAttributeValue(i.State)
2266+ if templ_7745c5c3_Err != nil {
2267+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 436, Col: 130}
2268+ }
2269+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var107)
2270+ if templ_7745c5c3_Err != nil {
2271+ return templ_7745c5c3_Err
2272+ }
2273+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 213, "\">")
2274+ if templ_7745c5c3_Err != nil {
2275+ return templ_7745c5c3_Err
2276+ }
2277+ var templ_7745c5c3_Var108 string
2278+ templ_7745c5c3_Var108, templ_7745c5c3_Err = templ.JoinStringErrs(i.State)
2279+ if templ_7745c5c3_Err != nil {
2280+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 436, Col: 142}
2281+ }
2282+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var108))
2283+ if templ_7745c5c3_Err != nil {
2284+ return templ_7745c5c3_Err
2285+ }
2286+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 214, "</span> ")
2287+ if templ_7745c5c3_Err != nil {
2288+ return templ_7745c5c3_Err
2289+ }
2290+ if i.Closes {
2291+ var templ_7745c5c3_Var109 string
2292+ templ_7745c5c3_Var109, templ_7745c5c3_Err = templ.JoinStringErrs(" · resolves")
2293+ if templ_7745c5c3_Err != nil {
2294+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 438, Col: 23}
2295+ }
2296+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var109))
2297+ if templ_7745c5c3_Err != nil {
2298+ return templ_7745c5c3_Err
2299+ }
2300+ }
2301+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 215, "</li>")
2302+ if templ_7745c5c3_Err != nil {
2303+ return templ_7745c5c3_Err
2304+ }
2305+ }
2306+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 216, "</ul></section>")
2307+ if templ_7745c5c3_Err != nil {
2308+ return templ_7745c5c3_Err
2309+ }
2310+ }
2311+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 217, "<section aria-labelledby=\"r-files\" class=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
2205 if templ_7745c5c3_Err != nil {2312 if templ_7745c5c3_Err != nil {
2206 return templ_7745c5c3_Err2313 return templ_7745c5c3_Err
2207 }2314 }
2208- var templ_7745c5c3_Var103 string2315+ var templ_7745c5c3_Var110 string
2209- templ_7745c5c3_Var103, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))2316+ templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
2210 if templ_7745c5c3_Err != nil {2317 if templ_7745c5c3_Err != nil {
2211- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 433, Col: 49}2318+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 447, Col: 49}
2212 }2319 }
2213- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var103))2320+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110))
2214 if templ_7745c5c3_Err != nil {2321 if templ_7745c5c3_Err != nil {
2215 return templ_7745c5c3_Err2322 return templ_7745c5c3_Err
2216 }2323 }
2217- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 208, "</span><kbd aria-hidden=\"true\">l</kbd> <button type=\"button\" class=\"btn icon fold\" data-js aria-expanded=\"true\" title=\"fold the list of files\" hx-on:click=\"ermiteMR.foldFiles()\"><span class=\"ico i-chevron\" aria-hidden=\"true\"></span><span class=\"sr\">fold the list of files</span></button></h2>")2324+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 218, "</span><kbd aria-hidden=\"true\">l</kbd> <button type=\"button\" class=\"btn icon fold\" data-js aria-expanded=\"true\" title=\"fold the list of files\" hx-on:click=\"ermiteMR.foldFiles()\"><span class=\"ico i-chevron\" aria-hidden=\"true\"></span><span class=\"sr\">fold the list of files</span></button></h2>")
2218 if templ_7745c5c3_Err != nil {2325 if templ_7745c5c3_Err != nil {
2219 return templ_7745c5c3_Err2326 return templ_7745c5c3_Err
2220 }2327 }
@@ -2222,71 +2329,71 @@ func mrRail(p MRPage) templ.Component {
2222 if templ_7745c5c3_Err != nil {2329 if templ_7745c5c3_Err != nil {
2223 return templ_7745c5c3_Err2330 return templ_7745c5c3_Err
2224 }2331 }
2225- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 209, "</section>")2332+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 219, "</section>")
2226 if templ_7745c5c3_Err != nil {2333 if templ_7745c5c3_Err != nil {
2227 return templ_7745c5c3_Err2334 return templ_7745c5c3_Err
2228 }2335 }
2229 if len(p.Verdicts) > 0 {2336 if len(p.Verdicts) > 0 {
2230- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 210, "<section><h2>Verdicts</h2><ul>")2337+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 220, "<section><h2>Verdicts</h2><ul>")
2231 if templ_7745c5c3_Err != nil {2338 if templ_7745c5c3_Err != nil {
2232 return templ_7745c5c3_Err2339 return templ_7745c5c3_Err
2233 }2340 }
2234 for _, v := range p.Verdicts {2341 for _, v := range p.Verdicts {
2235- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 211, "<li><a href=\"")2342+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 221, "<li><a href=\"")
2236 if templ_7745c5c3_Err != nil {2343 if templ_7745c5c3_Err != nil {
2237 return templ_7745c5c3_Err2344 return templ_7745c5c3_Err
2238 }2345 }
2239- var templ_7745c5c3_Var104 templ.SafeURL2346+ var templ_7745c5c3_Var111 templ.SafeURL
2240- templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))2347+ templ_7745c5c3_Var111, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(v.Href))
2241 if templ_7745c5c3_Err != nil {2348 if templ_7745c5c3_Err != nil {
2242- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 446, Col: 37}2349+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 460, Col: 37}
2243 }2350 }
2244- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var104))2351+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var111))
2245 if templ_7745c5c3_Err != nil {2352 if templ_7745c5c3_Err != nil {
2246 return templ_7745c5c3_Err2353 return templ_7745c5c3_Err
2247 }2354 }
2248- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 212, "\">")2355+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 222, "\">")
2249 if templ_7745c5c3_Err != nil {2356 if templ_7745c5c3_Err != nil {
2250 return templ_7745c5c3_Err2357 return templ_7745c5c3_Err
2251 }2358 }
2252- var templ_7745c5c3_Var105 string2359+ var templ_7745c5c3_Var112 string
2253- templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)2360+ templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(v.Author)
2254 if templ_7745c5c3_Err != nil {2361 if templ_7745c5c3_Err != nil {
2255- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 446, Col: 50}2362+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 460, Col: 50}
2256 }2363 }
2257- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105))2364+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))
2258 if templ_7745c5c3_Err != nil {2365 if templ_7745c5c3_Err != nil {
2259 return templ_7745c5c3_Err2366 return templ_7745c5c3_Err
2260 }2367 }
2261- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 213, ": ")2368+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 223, ": ")
2262 if templ_7745c5c3_Err != nil {2369 if templ_7745c5c3_Err != nil {
2263 return templ_7745c5c3_Err2370 return templ_7745c5c3_Err
2264 }2371 }
2265- var templ_7745c5c3_Var106 string2372+ var templ_7745c5c3_Var113 string
2266- templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)2373+ templ_7745c5c3_Var113, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
2267 if templ_7745c5c3_Err != nil {2374 if templ_7745c5c3_Err != nil {
2268- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 446, Col: 63}2375+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 460, Col: 63}
2269 }2376 }
2270- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var106))2377+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var113))
2271 if templ_7745c5c3_Err != nil {2378 if templ_7745c5c3_Err != nil {
2272 return templ_7745c5c3_Err2379 return templ_7745c5c3_Err
2273 }2380 }
2274- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 214, "</a> ")2381+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 224, "</a> ")
2275 if templ_7745c5c3_Err != nil {2382 if templ_7745c5c3_Err != nil {
2276 return templ_7745c5c3_Err2383 return templ_7745c5c3_Err
2277 }2384 }
2278 if v.Stale {2385 if v.Stale {
2279- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 215, "<span class=\"mute\">(stale)</span>")2386+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 225, "<span class=\"mute\">(stale)</span>")
2280 if templ_7745c5c3_Err != nil {2387 if templ_7745c5c3_Err != nil {
2281 return templ_7745c5c3_Err2388 return templ_7745c5c3_Err
2282 }2389 }
2283 }2390 }
2284- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 216, "</li>")2391+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 226, "</li>")
2285 if templ_7745c5c3_Err != nil {2392 if templ_7745c5c3_Err != nil {
2286 return templ_7745c5c3_Err2393 return templ_7745c5c3_Err
2287 }2394 }
2288 }2395 }
2289- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 217, "</ul></section>")2396+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 227, "</ul></section>")
2290 if templ_7745c5c3_Err != nil {2397 if templ_7745c5c3_Err != nil {
2291 return templ_7745c5c3_Err2398 return templ_7745c5c3_Err
2292 }2399 }
@@ -2315,51 +2422,51 @@ func mrBar(p MRPage) templ.Component {
2315 }()2422 }()
2316 }2423 }
2317 ctx = templ.InitializeContext(ctx)2424 ctx = templ.InitializeContext(ctx)
2318- templ_7745c5c3_Var107 := templ.GetChildren(ctx)2425+ templ_7745c5c3_Var114 := templ.GetChildren(ctx)
2319- if templ_7745c5c3_Var107 == nil {2426+ if templ_7745c5c3_Var114 == nil {
2320- templ_7745c5c3_Var107 = templ.NopComponent2427+ templ_7745c5c3_Var114 = templ.NopComponent
2321 }2428 }
2322 ctx = templ.ClearChildren(ctx)2429 ctx = templ.ClearChildren(ctx)
2323- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 218, "<div class=\"diff-tools mr-bar\" role=\"group\" aria-label=\"Diff view and merge\"><span class=\"dim\">")2430+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 228, "<div class=\"diff-tools mr-bar\" role=\"group\" aria-label=\"Diff view and merge\"><span class=\"dim\">")
2324 if templ_7745c5c3_Err != nil {2431 if templ_7745c5c3_Err != nil {
2325 return templ_7745c5c3_Err2432 return templ_7745c5c3_Err
2326 }2433 }
2327- var templ_7745c5c3_Var108 string2434+ var templ_7745c5c3_Var115 string
2328- templ_7745c5c3_Var108, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))2435+ templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
2329 if templ_7745c5c3_Err != nil {2436 if templ_7745c5c3_Err != nil {
2330- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 463, Col: 55}2437+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 477, Col: 55}
2331 }2438 }
2332- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var108))2439+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))
2333 if templ_7745c5c3_Err != nil {2440 if templ_7745c5c3_Err != nil {
2334 return templ_7745c5c3_Err2441 return templ_7745c5c3_Err
2335 }2442 }
2336- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 219, " · <span class=\"plus\">+")2443+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 229, " · <span class=\"plus\">+")
2337 if templ_7745c5c3_Err != nil {2444 if templ_7745c5c3_Err != nil {
2338 return templ_7745c5c3_Err2445 return templ_7745c5c3_Err
2339 }2446 }
2340- var templ_7745c5c3_Var109 string2447+ var templ_7745c5c3_Var116 string
2341- templ_7745c5c3_Var109, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))2448+ templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
2342 if templ_7745c5c3_Err != nil {2449 if templ_7745c5c3_Err != nil {
2343- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 463, Col: 95}2450+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 477, Col: 95}
2344 }2451 }
2345- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var109))2452+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))
2346 if templ_7745c5c3_Err != nil {2453 if templ_7745c5c3_Err != nil {
2347 return templ_7745c5c3_Err2454 return templ_7745c5c3_Err
2348 }2455 }
2349- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 220, "</span> <span class=\"minus\">-")2456+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 230, "</span> <span class=\"minus\">-")
2350 if templ_7745c5c3_Err != nil {2457 if templ_7745c5c3_Err != nil {
2351 return templ_7745c5c3_Err2458 return templ_7745c5c3_Err
2352 }2459 }
2353- var templ_7745c5c3_Var110 string2460+ var templ_7745c5c3_Var117 string
2354- templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))2461+ templ_7745c5c3_Var117, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
2355 if templ_7745c5c3_Err != nil {2462 if templ_7745c5c3_Err != nil {
2356- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 463, Col: 140}2463+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 477, Col: 140}
2357 }2464 }
2358- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110))2465+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var117))
2359 if templ_7745c5c3_Err != nil {2466 if templ_7745c5c3_Err != nil {
2360 return templ_7745c5c3_Err2467 return templ_7745c5c3_Err
2361 }2468 }
2362- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 221, "</span></span>")2469+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 231, "</span></span>")
2363 if templ_7745c5c3_Err != nil {2470 if templ_7745c5c3_Err != nil {
2364 return templ_7745c5c3_Err2471 return templ_7745c5c3_Err
2365 }2472 }
@@ -2371,7 +2478,7 @@ func mrBar(p MRPage) templ.Component {
2371 if templ_7745c5c3_Err != nil {2478 if templ_7745c5c3_Err != nil {
2372 return templ_7745c5c3_Err2479 return templ_7745c5c3_Err
2373 }2480 }
2374- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 222, "</div>")2481+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 232, "</div>")
2375 if templ_7745c5c3_Err != nil {2482 if templ_7745c5c3_Err != nil {
2376 return templ_7745c5c3_Err2483 return templ_7745c5c3_Err
2377 }2484 }
@@ -2403,80 +2510,80 @@ func mergeMenu(p MRPage) templ.Component {
2403 }()2510 }()
2404 }2511 }
2405 ctx = templ.InitializeContext(ctx)2512 ctx = templ.InitializeContext(ctx)
2406- templ_7745c5c3_Var111 := templ.GetChildren(ctx)2513+ templ_7745c5c3_Var118 := templ.GetChildren(ctx)
2407- if templ_7745c5c3_Var111 == nil {2514+ if templ_7745c5c3_Var118 == nil {
2408- templ_7745c5c3_Var111 = templ.NopComponent2515+ templ_7745c5c3_Var118 = templ.NopComponent
2409 }2516 }
2410 ctx = templ.ClearChildren(ctx)2517 ctx = templ.ClearChildren(ctx)
2411- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 223, "<details class=\"menu mmenu\" id=\"merge-menu\" data-state=\"open\"")2518+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 233, "<details class=\"menu mmenu\" id=\"merge-menu\" data-state=\"open\"")
2412 if templ_7745c5c3_Err != nil {2519 if templ_7745c5c3_Err != nil {
2413 return templ_7745c5c3_Err2520 return templ_7745c5c3_Err
2414 }2521 }
2415 if p.Box.Error != "" {2522 if p.Box.Error != "" {
2416- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 224, " open")2523+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 234, " open")
2417 if templ_7745c5c3_Err != nil {2524 if templ_7745c5c3_Err != nil {
2418 return templ_7745c5c3_Err2525 return templ_7745c5c3_Err
2419 }2526 }
2420 }2527 }
2421- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 225, "><summary class=\"btn primary\" aria-keyshortcuts=\"Shift+M\">")2528+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 235, "><summary class=\"btn primary\" aria-keyshortcuts=\"Shift+M\">")
2422 if templ_7745c5c3_Err != nil {2529 if templ_7745c5c3_Err != nil {
2423 return templ_7745c5c3_Err2530 return templ_7745c5c3_Err
2424 }2531 }
2425 if p.Box.ReadyAction != "" {2532 if p.Box.ReadyAction != "" {
2426- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 226, "Draft ")2533+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 236, "Draft ")
2427 if templ_7745c5c3_Err != nil {2534 if templ_7745c5c3_Err != nil {
2428 return templ_7745c5c3_Err2535 return templ_7745c5c3_Err
2429 }2536 }
2430 } else {2537 } else {
2431- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 227, "Merge ")2538+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 237, "Merge ")
2432 if templ_7745c5c3_Err != nil {2539 if templ_7745c5c3_Err != nil {
2433 return templ_7745c5c3_Err2540 return templ_7745c5c3_Err
2434 }2541 }
2435 }2542 }
2436- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 228, "<kbd aria-hidden=\"true\">M</kbd></summary><div class=\"menu-pop\" role=\"group\" aria-label=\"Merge\">")2543+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 238, "<kbd aria-hidden=\"true\">M</kbd></summary><div class=\"menu-pop\" role=\"group\" aria-label=\"Merge\">")
2437 if templ_7745c5c3_Err != nil {2544 if templ_7745c5c3_Err != nil {
2438 return templ_7745c5c3_Err2545 return templ_7745c5c3_Err
2439 }2546 }
2440 if p.Box.HeadGone {2547 if p.Box.HeadGone {
2441- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 229, "<p class=\"dim\">the source branch was deleted</p>")2548+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 239, "<p class=\"dim\">the source branch was deleted</p>")
2442 if templ_7745c5c3_Err != nil {2549 if templ_7745c5c3_Err != nil {
2443 return templ_7745c5c3_Err2550 return templ_7745c5c3_Err
2444 }2551 }
2445 }2552 }
2446 if p.Box.Error != "" {2553 if p.Box.Error != "" {
2447- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 230, "<p class=\"d-err\" role=\"alert\">")2554+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 240, "<p class=\"d-err\" role=\"alert\">")
2448 if templ_7745c5c3_Err != nil {2555 if templ_7745c5c3_Err != nil {
2449 return templ_7745c5c3_Err2556 return templ_7745c5c3_Err
2450 }2557 }
2451- var templ_7745c5c3_Var112 string2558+ var templ_7745c5c3_Var119 string
2452- templ_7745c5c3_Var112, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Error)2559+ templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Error)
2453 if templ_7745c5c3_Err != nil {2560 if templ_7745c5c3_Err != nil {
2454- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 492, Col: 47}2561+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 506, Col: 47}
2455 }2562 }
2456- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var112))2563+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var119))
2457 if templ_7745c5c3_Err != nil {2564 if templ_7745c5c3_Err != nil {
2458 return templ_7745c5c3_Err2565 return templ_7745c5c3_Err
2459 }2566 }
2460- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 231, "</p>")2567+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 241, "</p>")
2461 if templ_7745c5c3_Err != nil {2568 if templ_7745c5c3_Err != nil {
2462 return templ_7745c5c3_Err2569 return templ_7745c5c3_Err
2463 }2570 }
2464 }2571 }
2465 if p.Box.ReadyAction != "" {2572 if p.Box.ReadyAction != "" {
2466- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 232, "<p class=\"d-draft\">this is a draft: it cannot be merged until it is ready for review.</p><form class=\"d-btns\" method=\"post\" action=\"")2573+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 242, "<p class=\"d-draft\">this is a draft: it cannot be merged until it is ready for review.</p><form class=\"d-btns\" method=\"post\" action=\"")
2467 if templ_7745c5c3_Err != nil {2574 if templ_7745c5c3_Err != nil {
2468 return templ_7745c5c3_Err2575 return templ_7745c5c3_Err
2469 }2576 }
2470- var templ_7745c5c3_Var113 templ.SafeURL2577+ var templ_7745c5c3_Var120 templ.SafeURL
2471- templ_7745c5c3_Var113, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))2578+ templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadyAction))
2472 if templ_7745c5c3_Err != nil {2579 if templ_7745c5c3_Err != nil {
2473- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 496, Col: 80}2580+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 510, Col: 80}
2474 }2581 }
2475- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var113))2582+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var120))
2476 if templ_7745c5c3_Err != nil {2583 if templ_7745c5c3_Err != nil {
2477 return templ_7745c5c3_Err2584 return templ_7745c5c3_Err
2478 }2585 }
2479- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 233, "\"><button type=\"submit\" class=\"btn primary\" data-default title=\"remove the draft prefix from the title\">Ready for review</button></form>")2586+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 243, "\"><button type=\"submit\" class=\"btn primary\" data-default title=\"remove the draft prefix from the title\">Ready for review</button></form>")
2480 if templ_7745c5c3_Err != nil {2587 if templ_7745c5c3_Err != nil {
2481 return templ_7745c5c3_Err2588 return templ_7745c5c3_Err
2482 }2589 }
@@ -2485,250 +2592,250 @@ func mergeMenu(p MRPage) templ.Component {
2485 if templ_7745c5c3_Err != nil {2592 if templ_7745c5c3_Err != nil {
2486 return templ_7745c5c3_Err2593 return templ_7745c5c3_Err
2487 }2594 }
2488- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 234, " ")2595+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 244, " ")
2489 if templ_7745c5c3_Err != nil {2596 if templ_7745c5c3_Err != nil {
2490 return templ_7745c5c3_Err2597 return templ_7745c5c3_Err
2491 }2598 }
2492 if p.Box.AutoMerge != nil {2599 if p.Box.AutoMerge != nil {
2493- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 235, "<form class=\"d-acts\" method=\"post\" action=\"")2600+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 245, "<form class=\"d-acts\" method=\"post\" action=\"")
2494 if templ_7745c5c3_Err != nil {2601 if templ_7745c5c3_Err != nil {
2495 return templ_7745c5c3_Err2602 return templ_7745c5c3_Err
2496 }2603 }
2497- var templ_7745c5c3_Var114 templ.SafeURL2604+ var templ_7745c5c3_Var121 templ.SafeURL
2498- templ_7745c5c3_Var114, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CancelAutoAction))2605+ templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CancelAutoAction))
2499 if templ_7745c5c3_Err != nil {2606 if templ_7745c5c3_Err != nil {
2500- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 502, Col: 86}2607+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 516, Col: 86}
2501 }2608 }
2502- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var114))2609+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121))
2503 if templ_7745c5c3_Err != nil {2610 if templ_7745c5c3_Err != nil {
2504 return templ_7745c5c3_Err2611 return templ_7745c5c3_Err
2505 }2612 }
2506- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 236, "\"><p class=\"dim\" role=\"status\">Auto-merge: ")2613+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 246, "\"><p class=\"dim\" role=\"status\">Auto-merge: ")
2507 if templ_7745c5c3_Err != nil {2614 if templ_7745c5c3_Err != nil {
2508 return templ_7745c5c3_Err2615 return templ_7745c5c3_Err
2509 }2616 }
2510- var templ_7745c5c3_Var115 string2617+ var templ_7745c5c3_Var122 string
2511- templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.Mode)2618+ templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.Mode)
2512 if templ_7745c5c3_Err != nil {2619 if templ_7745c5c3_Err != nil {
2513- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 504, Col: 41}2620+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 518, Col: 41}
2514 }2621 }
2515- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))2622+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var122))
2516 if templ_7745c5c3_Err != nil {2623 if templ_7745c5c3_Err != nil {
2517 return templ_7745c5c3_Err2624 return templ_7745c5c3_Err
2518 }2625 }
2519- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 237, " when ready, enabled by ")2626+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 247, " when ready, enabled by ")
2520 if templ_7745c5c3_Err != nil {2627 if templ_7745c5c3_Err != nil {
2521 return templ_7745c5c3_Err2628 return templ_7745c5c3_Err
2522 }2629 }
2523- var templ_7745c5c3_Var116 string2630+ var templ_7745c5c3_Var123 string
2524- templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.EnabledBy)2631+ templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.EnabledBy)
2525 if templ_7745c5c3_Err != nil {2632 if templ_7745c5c3_Err != nil {
2526- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 504, Col: 94}2633+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 518, Col: 94}
2527 }2634 }
2528- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))2635+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var123))
2529 if templ_7745c5c3_Err != nil {2636 if templ_7745c5c3_Err != nil {
2530 return templ_7745c5c3_Err2637 return templ_7745c5c3_Err
2531 }2638 }
2532- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 238, " ")2639+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 248, " ")
2533 if templ_7745c5c3_Err != nil {2640 if templ_7745c5c3_Err != nil {
2534 return templ_7745c5c3_Err2641 return templ_7745c5c3_Err
2535 }2642 }
2536 if p.Box.AutoMerge.When != "" {2643 if p.Box.AutoMerge.When != "" {
2537- var templ_7745c5c3_Var117 string2644+ var templ_7745c5c3_Var124 string
2538- templ_7745c5c3_Var117, templ_7745c5c3_Err = templ.JoinStringErrs(" ")2645+ templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
2539 if templ_7745c5c3_Err != nil {2646 if templ_7745c5c3_Err != nil {
2540- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 506, Col: 13}2647+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 520, Col: 13}
2541 }2648 }
2542- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var117))2649+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var124))
2543 if templ_7745c5c3_Err != nil {2650 if templ_7745c5c3_Err != nil {
2544 return templ_7745c5c3_Err2651 return templ_7745c5c3_Err
2545 }2652 }
2546- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 239, "<time datetime=\"")2653+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 249, "<time datetime=\"")
2547 if templ_7745c5c3_Err != nil {2654 if templ_7745c5c3_Err != nil {
2548 return templ_7745c5c3_Err2655 return templ_7745c5c3_Err
2549 }2656 }
2550- var templ_7745c5c3_Var118 string2657+ var templ_7745c5c3_Var125 string
2551- templ_7745c5c3_Var118, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.AutoMerge.WhenAt)2658+ templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.AutoMerge.WhenAt)
2552 if templ_7745c5c3_Err != nil {2659 if templ_7745c5c3_Err != nil {
2553- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 506, Col: 54}2660+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 520, Col: 54}
2554 }2661 }
2555- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var118)2662+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var125)
2556 if templ_7745c5c3_Err != nil {2663 if templ_7745c5c3_Err != nil {
2557 return templ_7745c5c3_Err2664 return templ_7745c5c3_Err
2558 }2665 }
2559- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 240, "\">")2666+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 250, "\">")
2560 if templ_7745c5c3_Err != nil {2667 if templ_7745c5c3_Err != nil {
2561 return templ_7745c5c3_Err2668 return templ_7745c5c3_Err
2562 }2669 }
2563- var templ_7745c5c3_Var119 string2670+ var templ_7745c5c3_Var126 string
2564- templ_7745c5c3_Var119, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.When)2671+ templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.When)
2565 if templ_7745c5c3_Err != nil {2672 if templ_7745c5c3_Err != nil {
2566- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 506, Col: 79}2673+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 520, Col: 79}
2567 }2674 }
2568- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var119))2675+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var126))
2569 if templ_7745c5c3_Err != nil {2676 if templ_7745c5c3_Err != nil {
2570 return templ_7745c5c3_Err2677 return templ_7745c5c3_Err
2571 }2678 }
2572- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 241, "</time> ")2679+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 251, "</time> ")
2573 if templ_7745c5c3_Err != nil {2680 if templ_7745c5c3_Err != nil {
2574 return templ_7745c5c3_Err2681 return templ_7745c5c3_Err
2575 }2682 }
2576 }2683 }
2577- var templ_7745c5c3_Var120 string2684+ var templ_7745c5c3_Var127 string
2578- templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.JoinStringErrs(" ")2685+ templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
2579 if templ_7745c5c3_Err != nil {2686 if templ_7745c5c3_Err != nil {
2580- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 508, Col: 12}2687+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 522, Col: 12}
2581 }2688 }
2582- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var120))2689+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var127))
2583 if templ_7745c5c3_Err != nil {2690 if templ_7745c5c3_Err != nil {
2584 return templ_7745c5c3_Err2691 return templ_7745c5c3_Err
2585 }2692 }
2586- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 242, "(head ")2693+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 252, "(head ")
2587 if templ_7745c5c3_Err != nil {2694 if templ_7745c5c3_Err != nil {
2588 return templ_7745c5c3_Err2695 return templ_7745c5c3_Err
2589 }2696 }
2590- var templ_7745c5c3_Var121 string2697+ var templ_7745c5c3_Var128 string
2591- templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.HeadShort)2698+ templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.AutoMerge.HeadShort)
2592 if templ_7745c5c3_Err != nil {2699 if templ_7745c5c3_Err != nil {
2593- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 508, Col: 47}2700+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 522, Col: 47}
2594 }2701 }
2595- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121))2702+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var128))
2596 if templ_7745c5c3_Err != nil {2703 if templ_7745c5c3_Err != nil {
2597 return templ_7745c5c3_Err2704 return templ_7745c5c3_Err
2598 }2705 }
2599- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 243, ")</p><div class=\"d-btns\"><button type=\"submit\" class=\"btn\">Cancel auto-merge</button></div></form>")2706+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 253, ")</p><div class=\"d-btns\"><button type=\"submit\" class=\"btn\">Cancel auto-merge</button></div></form>")
2600 if templ_7745c5c3_Err != nil {2707 if templ_7745c5c3_Err != nil {
2601 return templ_7745c5c3_Err2708 return templ_7745c5c3_Err
2602 }2709 }
2603 }2710 }
2604- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 244, " <form class=\"d-acts\" method=\"post\" action=\"")2711+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 254, " <form class=\"d-acts\" method=\"post\" action=\"")
2605 if templ_7745c5c3_Err != nil {2712 if templ_7745c5c3_Err != nil {
2606 return templ_7745c5c3_Err2713 return templ_7745c5c3_Err
2607 }2714 }
2608- var templ_7745c5c3_Var122 templ.SafeURL2715+ var templ_7745c5c3_Var129 templ.SafeURL
2609- templ_7745c5c3_Var122, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))2716+ templ_7745c5c3_Var129, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.MergeAction))
2610 if templ_7745c5c3_Err != nil {2717 if templ_7745c5c3_Err != nil {
2611- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 518, Col: 46}2718+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 532, Col: 46}
2612 }2719 }
2613- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var122))2720+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var129))
2614 if templ_7745c5c3_Err != nil {2721 if templ_7745c5c3_Err != nil {
2615 return templ_7745c5c3_Err2722 return templ_7745c5c3_Err
2616 }2723 }
2617- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 245, "\" hx-post=\"")2724+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 255, "\" hx-post=\"")
2618 if templ_7745c5c3_Err != nil {2725 if templ_7745c5c3_Err != nil {
2619 return templ_7745c5c3_Err2726 return templ_7745c5c3_Err
2620 }2727 }
2621- var templ_7745c5c3_Var123 string2728+ var templ_7745c5c3_Var130 string
2622- templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeAction)2729+ templ_7745c5c3_Var130, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeAction)
2623 if templ_7745c5c3_Err != nil {2730 if templ_7745c5c3_Err != nil {
2624- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 519, Col: 32}2731+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 533, Col: 32}
2625 }2732 }
2626- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var123)2733+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var130)
2627 if templ_7745c5c3_Err != nil {2734 if templ_7745c5c3_Err != nil {
2628 return templ_7745c5c3_Err2735 return templ_7745c5c3_Err
2629 }2736 }
2630- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 246, "\" hx-swap=\"none\" hx-sync=\"this:drop\" hx-disable=\"find button[type=submit]\"><input type=\"hidden\" name=\"head_id\" value=\"")2737+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 256, "\" hx-swap=\"none\" hx-sync=\"this:drop\" hx-disable=\"find button[type=submit]\"><input type=\"hidden\" name=\"head_id\" value=\"")
2631 if templ_7745c5c3_Err != nil {2738 if templ_7745c5c3_Err != nil {
2632 return templ_7745c5c3_Err2739 return templ_7745c5c3_Err
2633 }2740 }
2634- var templ_7745c5c3_Var124 string2741+ var templ_7745c5c3_Var131 string
2635- templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)2742+ templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
2636 if templ_7745c5c3_Err != nil {2743 if templ_7745c5c3_Err != nil {
2637- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 524, Col: 59}2744+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 538, Col: 59}
2638 }2745 }
2639- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var124)2746+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var131)
2640 if templ_7745c5c3_Err != nil {2747 if templ_7745c5c3_Err != nil {
2641 return templ_7745c5c3_Err2748 return templ_7745c5c3_Err
2642 }2749 }
2643- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 247, "\"><fieldset class=\"d-modes\"><legend class=\"sr\">merge mode</legend> ")2750+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 257, "\"><fieldset class=\"d-modes\"><legend class=\"sr\">merge mode</legend> ")
2644 if templ_7745c5c3_Err != nil {2751 if templ_7745c5c3_Err != nil {
2645 return templ_7745c5c3_Err2752 return templ_7745c5c3_Err
2646 }2753 }
2647 for i, m := range p.Box.Modes {2754 for i, m := range p.Box.Modes {
2648- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 248, "<label><input type=\"radio\" name=\"mode\" value=\"")2755+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 258, "<label><input type=\"radio\" name=\"mode\" value=\"")
2649 if templ_7745c5c3_Err != nil {2756 if templ_7745c5c3_Err != nil {
2650 return templ_7745c5c3_Err2757 return templ_7745c5c3_Err
2651 }2758 }
2652- var templ_7745c5c3_Var125 string2759+ var templ_7745c5c3_Var132 string
2653- templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)2760+ templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
2654 if templ_7745c5c3_Err != nil {2761 if templ_7745c5c3_Err != nil {
2655- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 532, Col: 24}2762+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 546, Col: 24}
2656 }2763 }
2657- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var125)2764+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var132)
2658 if templ_7745c5c3_Err != nil {2765 if templ_7745c5c3_Err != nil {
2659 return templ_7745c5c3_Err2766 return templ_7745c5c3_Err
2660 }2767 }
2661- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 249, "\"")2768+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 259, "\"")
2662 if templ_7745c5c3_Err != nil {2769 if templ_7745c5c3_Err != nil {
2663 return templ_7745c5c3_Err2770 return templ_7745c5c3_Err
2664 }2771 }
2665 if i == p.Box.Checked() {2772 if i == p.Box.Checked() {
2666- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 250, " checked")2773+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 260, " checked")
2667 if templ_7745c5c3_Err != nil {2774 if templ_7745c5c3_Err != nil {
2668 return templ_7745c5c3_Err2775 return templ_7745c5c3_Err
2669 }2776 }
2670 }2777 }
2671 if m.Disabled {2778 if m.Disabled {
2672- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 251, " disabled")2779+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 261, " disabled")
2673 if templ_7745c5c3_Err != nil {2780 if templ_7745c5c3_Err != nil {
2674 return templ_7745c5c3_Err2781 return templ_7745c5c3_Err
2675 }2782 }
2676 }2783 }
2677- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 252, " title=\"")2784+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 262, " title=\"")
2678 if templ_7745c5c3_Err != nil {2785 if templ_7745c5c3_Err != nil {
2679 return templ_7745c5c3_Err2786 return templ_7745c5c3_Err
2680 }2787 }
2681- var templ_7745c5c3_Var126 string2788+ var templ_7745c5c3_Var133 string
2682- templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Reason)2789+ templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Reason)
2683 if templ_7745c5c3_Err != nil {2790 if templ_7745c5c3_Err != nil {
2684- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 535, Col: 25}2791+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 549, Col: 25}
2685 }2792 }
2686- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var126)2793+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var133)
2687 if templ_7745c5c3_Err != nil {2794 if templ_7745c5c3_Err != nil {
2688 return templ_7745c5c3_Err2795 return templ_7745c5c3_Err
2689 }2796 }
2690- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 253, "\" :disabled=\"this.value === 'fast-forward' ? q('[data-mergeability]').data.ffOk !== true : q('[data-mergeability]').data.mergeOk !== true\" :title=\"this.value === 'fast-forward' ? q('[data-mergeability]').data.ffReason : q('[data-mergeability]').data.mergeReason\"> ")2797+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 263, "\" :disabled=\"this.value === 'fast-forward' ? q('[data-mergeability]').data.ffOk !== true : q('[data-mergeability]').data.mergeOk !== true\" :title=\"this.value === 'fast-forward' ? q('[data-mergeability]').data.ffReason : q('[data-mergeability]').data.mergeReason\"> ")
2691 if templ_7745c5c3_Err != nil {2798 if templ_7745c5c3_Err != nil {
2692 return templ_7745c5c3_Err2799 return templ_7745c5c3_Err
2693 }2800 }
2694- var templ_7745c5c3_Var127 string2801+ var templ_7745c5c3_Var134 string
2695- templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)2802+ templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
2696 if templ_7745c5c3_Err != nil {2803 if templ_7745c5c3_Err != nil {
2697- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 539, Col: 17}2804+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 553, Col: 17}
2698 }2805 }
2699- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var127))2806+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var134))
2700 if templ_7745c5c3_Err != nil {2807 if templ_7745c5c3_Err != nil {
2701 return templ_7745c5c3_Err2808 return templ_7745c5c3_Err
2702 }2809 }
2703- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 254, " ")2810+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 264, " ")
2704 if templ_7745c5c3_Err != nil {2811 if templ_7745c5c3_Err != nil {
2705 return templ_7745c5c3_Err2812 return templ_7745c5c3_Err
2706 }2813 }
2707 if i < 9 {2814 if i < 9 {
2708- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 255, "<kbd aria-hidden=\"true\">")2815+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 265, "<kbd aria-hidden=\"true\">")
2709 if templ_7745c5c3_Err != nil {2816 if templ_7745c5c3_Err != nil {
2710 return templ_7745c5c3_Err2817 return templ_7745c5c3_Err
2711 }2818 }
2712- var templ_7745c5c3_Var128 string2819+ var templ_7745c5c3_Var135 string
2713- templ_7745c5c3_Var128, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))2820+ templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(i + 1))
2714 if templ_7745c5c3_Err != nil {2821 if templ_7745c5c3_Err != nil {
2715- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 541, Col: 46}2822+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 555, Col: 46}
2716 }2823 }
2717- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var128))2824+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var135))
2718 if templ_7745c5c3_Err != nil {2825 if templ_7745c5c3_Err != nil {
2719 return templ_7745c5c3_Err2826 return templ_7745c5c3_Err
2720 }2827 }
2721- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 256, "</kbd>")2828+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 266, "</kbd>")
2722 if templ_7745c5c3_Err != nil {2829 if templ_7745c5c3_Err != nil {
2723 return templ_7745c5c3_Err2830 return templ_7745c5c3_Err
2724 }2831 }
2725 }2832 }
2726- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 257, "</label>")2833+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 267, "</label>")
2727 if templ_7745c5c3_Err != nil {2834 if templ_7745c5c3_Err != nil {
2728 return templ_7745c5c3_Err2835 return templ_7745c5c3_Err
2729 }2836 }
2730 }2837 }
2731- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 258, "</fieldset>")2838+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 268, "</fieldset>")
2732 if templ_7745c5c3_Err != nil {2839 if templ_7745c5c3_Err != nil {
2733 return templ_7745c5c3_Err2840 return templ_7745c5c3_Err
2734 }2841 }
@@ -2737,154 +2844,154 @@ func mergeMenu(p MRPage) templ.Component {
2737 return templ_7745c5c3_Err2844 return templ_7745c5c3_Err
2738 }2845 }
2739 if p.Box.CanDeleteBranch {2846 if p.Box.CanDeleteBranch {
2740- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 259, "<label class=\"d-check\"><input type=\"checkbox\" name=\"delete_branch\" value=\"1\"> delete ")2847+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 269, "<label class=\"d-check\"><input type=\"checkbox\" name=\"delete_branch\" value=\"1\"> delete ")
2741 if templ_7745c5c3_Err != nil {2848 if templ_7745c5c3_Err != nil {
2742 return templ_7745c5c3_Err2849 return templ_7745c5c3_Err
2743 }2850 }
2744- var templ_7745c5c3_Var129 string2851+ var templ_7745c5c3_Var136 string
2745- templ_7745c5c3_Var129, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)2852+ templ_7745c5c3_Var136, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
2746 if templ_7745c5c3_Err != nil {2853 if templ_7745c5c3_Err != nil {
2747- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 548, Col: 102}2854+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 562, Col: 102}
2748 }2855 }
2749- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var129))2856+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var136))
2750 if templ_7745c5c3_Err != nil {2857 if templ_7745c5c3_Err != nil {
2751 return templ_7745c5c3_Err2858 return templ_7745c5c3_Err
2752 }2859 }
2753- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 260, " after the merge <kbd aria-hidden=\"true\">D</kbd></label>")2860+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, " after the merge <kbd aria-hidden=\"true\">D</kbd></label>")
2754 if templ_7745c5c3_Err != nil {2861 if templ_7745c5c3_Err != nil {
2755 return templ_7745c5c3_Err2862 return templ_7745c5c3_Err
2756 }2863 }
2757 }2864 }
2758- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 261, "<div class=\"d-btns\"><button type=\"submit\" class=\"btn primary\" data-default")2865+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, "<div class=\"d-btns\"><button type=\"submit\" class=\"btn primary\" data-default")
2759 if templ_7745c5c3_Err != nil {2866 if templ_7745c5c3_Err != nil {
2760 return templ_7745c5c3_Err2867 return templ_7745c5c3_Err
2761 }2868 }
2762 if !p.Box.CanMerge() {2869 if !p.Box.CanMerge() {
2763- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 262, " disabled")2870+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, " disabled")
2764 if templ_7745c5c3_Err != nil {2871 if templ_7745c5c3_Err != nil {
2765 return templ_7745c5c3_Err2872 return templ_7745c5c3_Err
2766 }2873 }
2767 }2874 }
2768- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 263, " title=\"")2875+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, " title=\"")
2769 if templ_7745c5c3_Err != nil {2876 if templ_7745c5c3_Err != nil {
2770 return templ_7745c5c3_Err2877 return templ_7745c5c3_Err
2771 }2878 }
2772- var templ_7745c5c3_Var130 string2879+ var templ_7745c5c3_Var137 string
2773- templ_7745c5c3_Var130, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeTitle())2880+ templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.MergeTitle())
2774 if templ_7745c5c3_Err != nil {2881 if templ_7745c5c3_Err != nil {
2775- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 556, Col: 33}2882+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 570, Col: 33}
2776 }2883 }
2777- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var130)2884+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var137)
2778 if templ_7745c5c3_Err != nil {2885 if templ_7745c5c3_Err != nil {
2779 return templ_7745c5c3_Err2886 return templ_7745c5c3_Err
2780 }2887 }
2781- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 264, "\" :disabled=\"this.form.classList.contains('htmx-request') || !this.form.querySelector('input[name=mode]:checked:not(:disabled)')\" :title=\"(this.form.querySelector('input[name=mode]:checked') || {}).title || ''\">Merge into ")2888+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "\" :disabled=\"this.form.classList.contains('htmx-request') || !this.form.querySelector('input[name=mode]:checked:not(:disabled)')\" :title=\"(this.form.querySelector('input[name=mode]:checked') || {}).title || ''\">Merge into ")
2782 if templ_7745c5c3_Err != nil {2889 if templ_7745c5c3_Err != nil {
2783 return templ_7745c5c3_Err2890 return templ_7745c5c3_Err
2784 }2891 }
2785- var templ_7745c5c3_Var131 string2892+ var templ_7745c5c3_Var138 string
2786- templ_7745c5c3_Var131, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)2893+ templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
2787 if templ_7745c5c3_Err != nil {2894 if templ_7745c5c3_Err != nil {
2788- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 559, Col: 28}2895+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 573, Col: 28}
2789 }2896 }
2790- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var131))2897+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var138))
2791 if templ_7745c5c3_Err != nil {2898 if templ_7745c5c3_Err != nil {
2792 return templ_7745c5c3_Err2899 return templ_7745c5c3_Err
2793 }2900 }
2794- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 265, "</button> <span class=\"htmx-indicator\" role=\"status\">Merging…</span></div></form>")2901+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, "</button> <span class=\"htmx-indicator\" role=\"status\">Merging…</span></div></form>")
2795 if templ_7745c5c3_Err != nil {2902 if templ_7745c5c3_Err != nil {
2796 return templ_7745c5c3_Err2903 return templ_7745c5c3_Err
2797 }2904 }
2798 if p.Box.CanAutoMerge {2905 if p.Box.CanAutoMerge {
2799- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 266, "<form class=\"d-acts\" method=\"post\" action=\"")2906+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, "<form class=\"d-acts\" method=\"post\" action=\"")
2800 if templ_7745c5c3_Err != nil {2907 if templ_7745c5c3_Err != nil {
2801 return templ_7745c5c3_Err2908 return templ_7745c5c3_Err
2802 }2909 }
2803- var templ_7745c5c3_Var132 templ.SafeURL2910+ var templ_7745c5c3_Var139 templ.SafeURL
2804- templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.AutoAction))2911+ templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.AutoAction))
2805 if templ_7745c5c3_Err != nil {2912 if templ_7745c5c3_Err != nil {
2806- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 564, Col: 80}2913+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 578, Col: 80}
2807 }2914 }
2808- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var132))2915+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var139))
2809 if templ_7745c5c3_Err != nil {2916 if templ_7745c5c3_Err != nil {
2810 return templ_7745c5c3_Err2917 return templ_7745c5c3_Err
2811 }2918 }
2812- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 267, "\"><input type=\"hidden\" name=\"head_id\" value=\"")2919+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
2813 if templ_7745c5c3_Err != nil {2920 if templ_7745c5c3_Err != nil {
2814 return templ_7745c5c3_Err2921 return templ_7745c5c3_Err
2815 }2922 }
2816- var templ_7745c5c3_Var133 string2923+ var templ_7745c5c3_Var140 string
2817- templ_7745c5c3_Var133, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)2924+ templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
2818 if templ_7745c5c3_Err != nil {2925 if templ_7745c5c3_Err != nil {
2819- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 60}2926+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 579, Col: 60}
2820 }2927 }
2821- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var133)2928+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var140)
2822 if templ_7745c5c3_Err != nil {2929 if templ_7745c5c3_Err != nil {
2823 return templ_7745c5c3_Err2930 return templ_7745c5c3_Err
2824 }2931 }
2825- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 268, "\"><fieldset class=\"d-modes\"><legend>Auto-merge mode</legend> ")2932+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "\"><fieldset class=\"d-modes\"><legend>Auto-merge mode</legend> ")
2826 if templ_7745c5c3_Err != nil {2933 if templ_7745c5c3_Err != nil {
2827 return templ_7745c5c3_Err2934 return templ_7745c5c3_Err
2828 }2935 }
2829 for i, m := range p.Box.Modes {2936 for i, m := range p.Box.Modes {
2830- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 269, "<label><input type=\"radio\" name=\"mode\" value=\"")2937+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "<label><input type=\"radio\" name=\"mode\" value=\"")
2831 if templ_7745c5c3_Err != nil {2938 if templ_7745c5c3_Err != nil {
2832 return templ_7745c5c3_Err2939 return templ_7745c5c3_Err
2833 }2940 }
2834- var templ_7745c5c3_Var134 string2941+ var templ_7745c5c3_Var141 string
2835- templ_7745c5c3_Var134, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)2942+ templ_7745c5c3_Var141, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
2836 if templ_7745c5c3_Err != nil {2943 if templ_7745c5c3_Err != nil {
2837- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 569, Col: 62}2944+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 583, Col: 62}
2838 }2945 }
2839- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var134)2946+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var141)
2840 if templ_7745c5c3_Err != nil {2947 if templ_7745c5c3_Err != nil {
2841 return templ_7745c5c3_Err2948 return templ_7745c5c3_Err
2842 }2949 }
2843- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, "\"")2950+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, "\"")
2844 if templ_7745c5c3_Err != nil {2951 if templ_7745c5c3_Err != nil {
2845 return templ_7745c5c3_Err2952 return templ_7745c5c3_Err
2846 }2953 }
2847 if i == 0 {2954 if i == 0 {
2848- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, " checked")2955+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, " checked")
2849 if templ_7745c5c3_Err != nil {2956 if templ_7745c5c3_Err != nil {
2850 return templ_7745c5c3_Err2957 return templ_7745c5c3_Err
2851 }2958 }
2852 }2959 }
2853- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "> ")2960+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "> ")
2854 if templ_7745c5c3_Err != nil {2961 if templ_7745c5c3_Err != nil {
2855 return templ_7745c5c3_Err2962 return templ_7745c5c3_Err
2856 }2963 }
2857- var templ_7745c5c3_Var135 string2964+ var templ_7745c5c3_Var142 string
2858- templ_7745c5c3_Var135, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)2965+ templ_7745c5c3_Var142, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
2859 if templ_7745c5c3_Err != nil {2966 if templ_7745c5c3_Err != nil {
2860- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 569, Col: 96}2967+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 583, Col: 96}
2861 }2968 }
2862- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var135))2969+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var142))
2863 if templ_7745c5c3_Err != nil {2970 if templ_7745c5c3_Err != nil {
2864 return templ_7745c5c3_Err2971 return templ_7745c5c3_Err
2865 }2972 }
2866- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, "</label>")2973+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "</label>")
2867 if templ_7745c5c3_Err != nil {2974 if templ_7745c5c3_Err != nil {
2868 return templ_7745c5c3_Err2975 return templ_7745c5c3_Err
2869 }2976 }
2870 }2977 }
2871- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "</fieldset><div class=\"d-btns\"><button type=\"submit\" class=\"btn\"")2978+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "</fieldset><div class=\"d-btns\"><button type=\"submit\" class=\"btn\"")
2872 if templ_7745c5c3_Err != nil {2979 if templ_7745c5c3_Err != nil {
2873 return templ_7745c5c3_Err2980 return templ_7745c5c3_Err
2874 }2981 }
2875 if len(p.Box.Modes) == 0 {2982 if len(p.Box.Modes) == 0 {
2876- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, " disabled")2983+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, " disabled")
2877 if templ_7745c5c3_Err != nil {2984 if templ_7745c5c3_Err != nil {
2878 return templ_7745c5c3_Err2985 return templ_7745c5c3_Err
2879 }2986 }
2880 }2987 }
2881- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, " title=\"merge once the checks pass\">Merge when ready</button></div></form>")2988+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, " title=\"merge once the checks pass\">Merge when ready</button></div></form>")
2882 if templ_7745c5c3_Err != nil {2989 if templ_7745c5c3_Err != nil {
2883 return templ_7745c5c3_Err2990 return templ_7745c5c3_Err
2884 }2991 }
2885 }2992 }
2886 }2993 }
2887- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "</div></details>")2994+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "</div></details>")
2888 if templ_7745c5c3_Err != nil {2995 if templ_7745c5c3_Err != nil {
2889 return templ_7745c5c3_Err2996 return templ_7745c5c3_Err
2890 }2997 }
@@ -2910,182 +3017,182 @@ func MRMergeability(v MergeabilityView) templ.Component {
2910 }()3017 }()
2911 }3018 }
2912 ctx = templ.InitializeContext(ctx)3019 ctx = templ.InitializeContext(ctx)
2913- templ_7745c5c3_Var136 := templ.GetChildren(ctx)3020+ templ_7745c5c3_Var143 := templ.GetChildren(ctx)
2914- if templ_7745c5c3_Var136 == nil {3021+ if templ_7745c5c3_Var143 == nil {
2915- templ_7745c5c3_Var136 = templ.NopComponent3022+ templ_7745c5c3_Var143 = templ.NopComponent
2916 }3023 }
2917 ctx = templ.ClearChildren(ctx)3024 ctx = templ.ClearChildren(ctx)
2918- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "<span data-mergeability data-state=\"")3025+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "<span data-mergeability data-state=\"")
2919 if templ_7745c5c3_Err != nil {3026 if templ_7745c5c3_Err != nil {
2920 return templ_7745c5c3_Err3027 return templ_7745c5c3_Err
2921 }3028 }
2922- var templ_7745c5c3_Var137 string3029+ var templ_7745c5c3_Var144 string
2923- templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)3030+ templ_7745c5c3_Var144, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
2924 if templ_7745c5c3_Err != nil {3031 if templ_7745c5c3_Err != nil {
2925- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 587, Col: 22}3032+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 601, Col: 22}
2926 }3033 }
2927- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var137)3034+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var144)
2928 if templ_7745c5c3_Err != nil {3035 if templ_7745c5c3_Err != nil {
2929 return templ_7745c5c3_Err3036 return templ_7745c5c3_Err
2930 }3037 }
2931- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "\" data-ff-ok=\"")3038+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "\" data-ff-ok=\"")
2932 if templ_7745c5c3_Err != nil {3039 if templ_7745c5c3_Err != nil {
2933 return templ_7745c5c3_Err3040 return templ_7745c5c3_Err
2934 }3041 }
2935- var templ_7745c5c3_Var138 string3042+ var templ_7745c5c3_Var145 string
2936- templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))3043+ templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))
2937 if templ_7745c5c3_Err != nil {3044 if templ_7745c5c3_Err != nil {
2938- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 588, Col: 41}3045+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 602, Col: 41}
2939 }3046 }
2940- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var138)3047+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var145)
2941 if templ_7745c5c3_Err != nil {3048 if templ_7745c5c3_Err != nil {
2942 return templ_7745c5c3_Err3049 return templ_7745c5c3_Err
2943 }3050 }
2944- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, "\" data-merge-ok=\"")3051+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, "\" data-merge-ok=\"")
2945 if templ_7745c5c3_Err != nil {3052 if templ_7745c5c3_Err != nil {
2946 return templ_7745c5c3_Err3053 return templ_7745c5c3_Err
2947 }3054 }
2948- var templ_7745c5c3_Var139 string3055+ var templ_7745c5c3_Var146 string
2949- templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))3056+ templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))
2950 if templ_7745c5c3_Err != nil {3057 if templ_7745c5c3_Err != nil {
2951- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 589, Col: 47}3058+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 603, Col: 47}
2952 }3059 }
2953- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var139)3060+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var146)
2954 if templ_7745c5c3_Err != nil {3061 if templ_7745c5c3_Err != nil {
2955 return templ_7745c5c3_Err3062 return templ_7745c5c3_Err
2956 }3063 }
2957- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, "\" data-ff-reason=\"")3064+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "\" data-ff-reason=\"")
2958 if templ_7745c5c3_Err != nil {3065 if templ_7745c5c3_Err != nil {
2959 return templ_7745c5c3_Err3066 return templ_7745c5c3_Err
2960 }3067 }
2961- var templ_7745c5c3_Var140 string3068+ var templ_7745c5c3_Var147 string
2962- templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)3069+ templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)
2963 if templ_7745c5c3_Err != nil {3070 if templ_7745c5c3_Err != nil {
2964- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 29}3071+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 604, Col: 29}
2965 }3072 }
2966- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var140)3073+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var147)
2967 if templ_7745c5c3_Err != nil {3074 if templ_7745c5c3_Err != nil {
2968 return templ_7745c5c3_Err3075 return templ_7745c5c3_Err
2969 }3076 }
2970- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "\" data-merge-reason=\"")3077+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "\" data-merge-reason=\"")
2971 if templ_7745c5c3_Err != nil {3078 if templ_7745c5c3_Err != nil {
2972 return templ_7745c5c3_Err3079 return templ_7745c5c3_Err
2973 }3080 }
2974- var templ_7745c5c3_Var141 string3081+ var templ_7745c5c3_Var148 string
2975- templ_7745c5c3_Var141, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)3082+ templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)
2976 if templ_7745c5c3_Err != nil {3083 if templ_7745c5c3_Err != nil {
2977- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 591, Col: 35}3084+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 605, Col: 35}
2978 }3085 }
2979- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var141)3086+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var148)
2980 if templ_7745c5c3_Err != nil {3087 if templ_7745c5c3_Err != nil {
2981 return templ_7745c5c3_Err3088 return templ_7745c5c3_Err
2982 }3089 }
2983- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "\"><span class=\"badge\" data-state=\"")3090+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "\"><span class=\"badge\" data-state=\"")
2984 if templ_7745c5c3_Err != nil {3091 if templ_7745c5c3_Err != nil {
2985 return templ_7745c5c3_Err3092 return templ_7745c5c3_Err
2986 }3093 }
2987- var templ_7745c5c3_Var142 string3094+ var templ_7745c5c3_Var149 string
2988- templ_7745c5c3_Var142, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)3095+ templ_7745c5c3_Var149, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
2989 if templ_7745c5c3_Err != nil {3096 if templ_7745c5c3_Err != nil {
2990- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 593, Col: 42}3097+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 607, Col: 42}
2991 }3098 }
2992- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var142)3099+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var149)
2993 if templ_7745c5c3_Err != nil {3100 if templ_7745c5c3_Err != nil {
2994 return templ_7745c5c3_Err3101 return templ_7745c5c3_Err
2995 }3102 }
2996- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "\">")3103+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "\">")
2997 if templ_7745c5c3_Err != nil {3104 if templ_7745c5c3_Err != nil {
2998 return templ_7745c5c3_Err3105 return templ_7745c5c3_Err
2999 }3106 }
3000- var templ_7745c5c3_Var143 string3107+ var templ_7745c5c3_Var150 string
3001- templ_7745c5c3_Var143, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)3108+ templ_7745c5c3_Var150, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
3002 if templ_7745c5c3_Err != nil {3109 if templ_7745c5c3_Err != nil {
3003- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 593, Col: 54}3110+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 607, Col: 54}
3004 }3111 }
3005- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var143))3112+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var150))
3006 if templ_7745c5c3_Err != nil {3113 if templ_7745c5c3_Err != nil {
3007 return templ_7745c5c3_Err3114 return templ_7745c5c3_Err
3008 }3115 }
3009- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "</span> ")3116+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "</span> ")
3010 if templ_7745c5c3_Err != nil {3117 if templ_7745c5c3_Err != nil {
3011 return templ_7745c5c3_Err3118 return templ_7745c5c3_Err
3012 }3119 }
3013 if v.Detail != "" {3120 if v.Detail != "" {
3014- var templ_7745c5c3_Var144 string3121+ var templ_7745c5c3_Var151 string
3015- templ_7745c5c3_Var144, templ_7745c5c3_Err = templ.JoinStringErrs(" ")3122+ templ_7745c5c3_Var151, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
3016 if templ_7745c5c3_Err != nil {3123 if templ_7745c5c3_Err != nil {
3017- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 595, Col: 8}3124+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 609, Col: 8}
3018 }3125 }
3019- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var144))3126+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var151))
3020 if templ_7745c5c3_Err != nil {3127 if templ_7745c5c3_Err != nil {
3021 return templ_7745c5c3_Err3128 return templ_7745c5c3_Err
3022 }3129 }
3023- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "<span class=\"dim\">")3130+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "<span class=\"dim\">")
3024 if templ_7745c5c3_Err != nil {3131 if templ_7745c5c3_Err != nil {
3025 return templ_7745c5c3_Err3132 return templ_7745c5c3_Err
3026 }3133 }
3027- var templ_7745c5c3_Var145 string3134+ var templ_7745c5c3_Var152 string
3028- templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)3135+ templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)
3029 if templ_7745c5c3_Err != nil {3136 if templ_7745c5c3_Err != nil {
3030- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 595, Col: 38}3137+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 609, Col: 38}
3031 }3138 }
3032- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var145))3139+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))
3033 if templ_7745c5c3_Err != nil {3140 if templ_7745c5c3_Err != nil {
3034 return templ_7745c5c3_Err3141 return templ_7745c5c3_Err
3035 }3142 }
3036- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "</span>")3143+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "</span>")
3037 if templ_7745c5c3_Err != nil {3144 if templ_7745c5c3_Err != nil {
3038 return templ_7745c5c3_Err3145 return templ_7745c5c3_Err
3039 }3146 }
3040 }3147 }
3041- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "</span> ")3148+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "</span> ")
3042 if templ_7745c5c3_Err != nil {3149 if templ_7745c5c3_Err != nil {
3043 return templ_7745c5c3_Err3150 return templ_7745c5c3_Err
3044 }3151 }
3045 if len(v.Paths) > 0 {3152 if len(v.Paths) > 0 {
3046- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "<ul class=\"mg-paths\" aria-label=\"conflicting files\">")3153+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "<ul class=\"mg-paths\" aria-label=\"conflicting files\">")
3047 if templ_7745c5c3_Err != nil {3154 if templ_7745c5c3_Err != nil {
3048 return templ_7745c5c3_Err3155 return templ_7745c5c3_Err
3049 }3156 }
3050 for _, path := range v.Paths {3157 for _, path := range v.Paths {
3051- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, "<li><code>")3158+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "<li><code>")
3052 if templ_7745c5c3_Err != nil {3159 if templ_7745c5c3_Err != nil {
3053 return templ_7745c5c3_Err3160 return templ_7745c5c3_Err
3054 }3161 }
3055- var templ_7745c5c3_Var146 string3162+ var templ_7745c5c3_Var153 string
3056- templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.JoinStringErrs(path)3163+ templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinStringErrs(path)
3057 if templ_7745c5c3_Err != nil {3164 if templ_7745c5c3_Err != nil {
3058- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 601, Col: 20}3165+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 615, Col: 20}
3059 }3166 }
3060- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var146))3167+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))
3061 if templ_7745c5c3_Err != nil {3168 if templ_7745c5c3_Err != nil {
3062 return templ_7745c5c3_Err3169 return templ_7745c5c3_Err
3063 }3170 }
3064- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "</code></li>")3171+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "</code></li>")
3065 if templ_7745c5c3_Err != nil {3172 if templ_7745c5c3_Err != nil {
3066 return templ_7745c5c3_Err3173 return templ_7745c5c3_Err
3067 }3174 }
3068 }3175 }
3069- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "</ul>")3176+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "</ul>")
3070 if templ_7745c5c3_Err != nil {3177 if templ_7745c5c3_Err != nil {
3071 return templ_7745c5c3_Err3178 return templ_7745c5c3_Err
3072 }3179 }
3073 }3180 }
3074 if v.PathsNote != "" {3181 if v.PathsNote != "" {
3075- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "<p class=\"dim\">")3182+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "<p class=\"dim\">")
3076 if templ_7745c5c3_Err != nil {3183 if templ_7745c5c3_Err != nil {
3077 return templ_7745c5c3_Err3184 return templ_7745c5c3_Err
3078 }3185 }
3079- var templ_7745c5c3_Var147 string3186+ var templ_7745c5c3_Var154 string
3080- templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)3187+ templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)
3081 if templ_7745c5c3_Err != nil {3188 if templ_7745c5c3_Err != nil {
3082- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 606, Col: 30}3189+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 620, Col: 30}
3083 }3190 }
3084- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var147))3191+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154))
3085 if templ_7745c5c3_Err != nil {3192 if templ_7745c5c3_Err != nil {
3086 return templ_7745c5c3_Err3193 return templ_7745c5c3_Err
3087 }3194 }
3088- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "</p>")3195+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 304, "</p>")
3089 if templ_7745c5c3_Err != nil {3196 if templ_7745c5c3_Err != nil {
3090 return templ_7745c5c3_Err3197 return templ_7745c5c3_Err
3091 }3198 }
@@ -3112,12 +3219,12 @@ func mrMergeabilitySlot(v MergeabilityView) templ.Component {
3112 }()3219 }()
3113 }3220 }
3114 ctx = templ.InitializeContext(ctx)3221 ctx = templ.InitializeContext(ctx)
3115- templ_7745c5c3_Var148 := templ.GetChildren(ctx)3222+ templ_7745c5c3_Var155 := templ.GetChildren(ctx)
3116- if templ_7745c5c3_Var148 == nil {3223+ if templ_7745c5c3_Var155 == nil {
3117- templ_7745c5c3_Var148 = templ.NopComponent3224+ templ_7745c5c3_Var155 = templ.NopComponent
3118 }3225 }
3119 ctx = templ.ClearChildren(ctx)3226 ctx = templ.ClearChildren(ctx)
3120- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "<div id=\"mr-mergeability\" class=\"live-slot\" role=\"status\" data-slot>")3227+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 305, "<div id=\"mr-mergeability\" class=\"live-slot\" role=\"status\" data-slot>")
3121 if templ_7745c5c3_Err != nil {3228 if templ_7745c5c3_Err != nil {
3122 return templ_7745c5c3_Err3229 return templ_7745c5c3_Err
3123 }3230 }
@@ -3125,7 +3232,7 @@ func mrMergeabilitySlot(v MergeabilityView) templ.Component {
3125 if templ_7745c5c3_Err != nil {3232 if templ_7745c5c3_Err != nil {
3126 return templ_7745c5c3_Err3233 return templ_7745c5c3_Err
3127 }3234 }
3128- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "</div>")3235+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 306, "</div>")
3129 if templ_7745c5c3_Err != nil {3236 if templ_7745c5c3_Err != nil {
3130 return templ_7745c5c3_Err3237 return templ_7745c5c3_Err
3131 }3238 }
@@ -3150,9 +3257,9 @@ func MRMergeabilityFragment(v MergeabilityView) templ.Component {
3150 }()3257 }()
3151 }3258 }
3152 ctx = templ.InitializeContext(ctx)3259 ctx = templ.InitializeContext(ctx)
3153- templ_7745c5c3_Var149 := templ.GetChildren(ctx)3260+ templ_7745c5c3_Var156 := templ.GetChildren(ctx)
3154- if templ_7745c5c3_Var149 == nil {3261+ if templ_7745c5c3_Var156 == nil {
3155- templ_7745c5c3_Var149 = templ.NopComponent3262+ templ_7745c5c3_Var156 = templ.NopComponent
3156 }3263 }
3157 ctx = templ.ClearChildren(ctx)3264 ctx = templ.ClearChildren(ctx)
3158 templ_7745c5c3_Err = mrMergeabilitySlot(v).Render(ctx, templ_7745c5c3_Buffer)3265 templ_7745c5c3_Err = mrMergeabilitySlot(v).Render(ctx, templ_7745c5c3_Buffer)
@@ -3181,128 +3288,128 @@ func moreMenu(p MRPage) templ.Component {
3181 }()3288 }()
3182 }3289 }
3183 ctx = templ.InitializeContext(ctx)3290 ctx = templ.InitializeContext(ctx)
3184- templ_7745c5c3_Var150 := templ.GetChildren(ctx)3291+ templ_7745c5c3_Var157 := templ.GetChildren(ctx)
3185- if templ_7745c5c3_Var150 == nil {3292+ if templ_7745c5c3_Var157 == nil {
3186- templ_7745c5c3_Var150 = templ.NopComponent3293+ templ_7745c5c3_Var157 = templ.NopComponent
3187 }3294 }
3188 ctx = templ.ClearChildren(ctx)3295 ctx = templ.ClearChildren(ctx)
3189- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "<details class=\"menu omenu\"><summary class=\"btn icon\" aria-label=\"More actions\" title=\"more actions\">⋯</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"More actions\"><section class=\"merge-settings\"><h2>Merge settings</h2><dl class=\"kv\"><dt>modes</dt><dd>")3296+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 307, "<details class=\"menu omenu\"><summary class=\"btn icon\" aria-label=\"More actions\" title=\"more actions\">⋯</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"More actions\"><section class=\"merge-settings\"><h2>Merge settings</h2><dl class=\"kv\"><dt>modes</dt><dd>")
3190 if templ_7745c5c3_Err != nil {3297 if templ_7745c5c3_Err != nil {
3191 return templ_7745c5c3_Err3298 return templ_7745c5c3_Err
3192 }3299 }
3193- var templ_7745c5c3_Var151 string3300+ var templ_7745c5c3_Var158 string
3194- templ_7745c5c3_Var151, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))3301+ templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))
3195 if templ_7745c5c3_Err != nil {3302 if templ_7745c5c3_Err != nil {
3196- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 633, Col: 38}3303+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 647, Col: 38}
3197 }3304 }
3198- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var151))3305+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))
3199 if templ_7745c5c3_Err != nil {3306 if templ_7745c5c3_Err != nil {
3200 return templ_7745c5c3_Err3307 return templ_7745c5c3_Err
3201 }3308 }
3202- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "</dd><dt>checks</dt><dd>")3309+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 308, "</dd><dt>checks</dt><dd>")
3203 if templ_7745c5c3_Err != nil {3310 if templ_7745c5c3_Err != nil {
3204 return templ_7745c5c3_Err3311 return templ_7745c5c3_Err
3205 }3312 }
3206 if p.ChecksBlock {3313 if p.ChecksBlock {
3207- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "failing or unfinished checks block the merge")3314+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 309, "failing or unfinished checks block the merge")
3208 if templ_7745c5c3_Err != nil {3315 if templ_7745c5c3_Err != nil {
3209 return templ_7745c5c3_Err3316 return templ_7745c5c3_Err
3210 }3317 }
3211 } else {3318 } else {
3212- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "do not block the merge")3319+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 310, "do not block the merge")
3213 if templ_7745c5c3_Err != nil {3320 if templ_7745c5c3_Err != nil {
3214 return templ_7745c5c3_Err3321 return templ_7745c5c3_Err
3215 }3322 }
3216 }3323 }
3217- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "</dd></dl></section>")3324+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 311, "</dd></dl></section>")
3218 if templ_7745c5c3_Err != nil {3325 if templ_7745c5c3_Err != nil {
3219 return templ_7745c5c3_Err3326 return templ_7745c5c3_Err
3220 }3327 }
3221 if p.Box != nil {3328 if p.Box != nil {
3222 if p.Box.Signed {3329 if p.Box.Signed {
3223- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "<p class=\"d-note\" id=\"mr-signing\">squash and merge commits are signed with ermite's own key (generated on first start). ")3330+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 312, "<p class=\"d-note\" id=\"mr-signing\">squash and merge commits are signed with ermite's own key (generated on first start). ")
3224 if templ_7745c5c3_Err != nil {3331 if templ_7745c5c3_Err != nil {
3225 return templ_7745c5c3_Err3332 return templ_7745c5c3_Err
3226 }3333 }
3227 if p.Box.Fingerprint != "" {3334 if p.Box.Fingerprint != "" {
3228- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "fingerprint <code>")3335+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 313, "fingerprint <code>")
3229 if templ_7745c5c3_Err != nil {3336 if templ_7745c5c3_Err != nil {
3230 return templ_7745c5c3_Err3337 return templ_7745c5c3_Err
3231 }3338 }
3232- var templ_7745c5c3_Var152 string3339+ var templ_7745c5c3_Var159 string
3233- templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)3340+ templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)
3234 if templ_7745c5c3_Err != nil {3341 if templ_7745c5c3_Err != nil {
3235- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 649, Col: 44}3342+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 663, Col: 44}
3236 }3343 }
3237- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))3344+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var159))
3238 if templ_7745c5c3_Err != nil {3345 if templ_7745c5c3_Err != nil {
3239 return templ_7745c5c3_Err3346 return templ_7745c5c3_Err
3240 }3347 }
3241- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 304, "</code> ")3348+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 314, "</code> ")
3242 if templ_7745c5c3_Err != nil {3349 if templ_7745c5c3_Err != nil {
3243 return templ_7745c5c3_Err3350 return templ_7745c5c3_Err
3244 }3351 }
3245 }3352 }
3246- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 305, "<code>ermite signing-key show</code> prints it.</p>")3353+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 315, "<code>ermite signing-key show</code> prints it.</p>")
3247 if templ_7745c5c3_Err != nil {3354 if templ_7745c5c3_Err != nil {
3248 return templ_7745c5c3_Err3355 return templ_7745c5c3_Err
3249 }3356 }
3250 }3357 }
3251- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 306, " ")3358+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 316, " ")
3252 if templ_7745c5c3_Err != nil {3359 if templ_7745c5c3_Err != nil {
3253 return templ_7745c5c3_Err3360 return templ_7745c5c3_Err
3254 }3361 }
3255 if p.Box.CanMarkRead {3362 if p.Box.CanMarkRead {
3256- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 307, "<form method=\"post\" action=\"")3363+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 317, "<form method=\"post\" action=\"")
3257 if templ_7745c5c3_Err != nil {3364 if templ_7745c5c3_Err != nil {
3258 return templ_7745c5c3_Err3365 return templ_7745c5c3_Err
3259 }3366 }
3260- var templ_7745c5c3_Var153 templ.SafeURL3367+ var templ_7745c5c3_Var160 templ.SafeURL
3261- templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))3368+ templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))
3262 if templ_7745c5c3_Err != nil {3369 if templ_7745c5c3_Err != nil {
3263- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 65}3370+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 669, Col: 65}
3264 }3371 }
3265- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))3372+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))
3266 if templ_7745c5c3_Err != nil {3373 if templ_7745c5c3_Err != nil {
3267 return templ_7745c5c3_Err3374 return templ_7745c5c3_Err
3268 }3375 }
3269- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 308, "\"><input type=\"hidden\" name=\"head_id\" value=\"")3376+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 318, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
3270 if templ_7745c5c3_Err != nil {3377 if templ_7745c5c3_Err != nil {
3271 return templ_7745c5c3_Err3378 return templ_7745c5c3_Err
3272 }3379 }
3273- var templ_7745c5c3_Var154 string3380+ var templ_7745c5c3_Var161 string
3274- templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)3381+ templ_7745c5c3_Var161, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
3275 if templ_7745c5c3_Err != nil {3382 if templ_7745c5c3_Err != nil {
3276- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 656, Col: 60}3383+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 670, Col: 60}
3277 }3384 }
3278- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var154)3385+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var161)
3279 if templ_7745c5c3_Err != nil {3386 if templ_7745c5c3_Err != nil {
3280 return templ_7745c5c3_Err3387 return templ_7745c5c3_Err
3281 }3388 }
3282- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 309, "\"> <button type=\"submit\" title=\"the next visit can show only what changed after this head\" class=\"btn\" aria-keyshortcuts=\"Shift+R\" data-read>Mark read <kbd aria-hidden=\"true\">R</kbd></button></form>")3389+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 319, "\"> <button type=\"submit\" title=\"the next visit can show only what changed after this head\" class=\"btn\" aria-keyshortcuts=\"Shift+R\" data-read>Mark read <kbd aria-hidden=\"true\">R</kbd></button></form>")
3283 if templ_7745c5c3_Err != nil {3390 if templ_7745c5c3_Err != nil {
3284 return templ_7745c5c3_Err3391 return templ_7745c5c3_Err
3285 }3392 }
3286 }3393 }
3287- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 310, " <form method=\"post\" action=\"")3394+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 320, " <form method=\"post\" action=\"")
3288 if templ_7745c5c3_Err != nil {3395 if templ_7745c5c3_Err != nil {
3289 return templ_7745c5c3_Err3396 return templ_7745c5c3_Err
3290 }3397 }
3291- var templ_7745c5c3_Var155 templ.SafeURL3398+ var templ_7745c5c3_Var162 templ.SafeURL
3292- templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))3399+ templ_7745c5c3_Var162, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))
3293 if templ_7745c5c3_Err != nil {3400 if templ_7745c5c3_Err != nil {
3294- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 660, Col: 65}3401+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 674, Col: 65}
3295 }3402 }
3296- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var155))3403+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var162))
3297 if templ_7745c5c3_Err != nil {3404 if templ_7745c5c3_Err != nil {
3298 return templ_7745c5c3_Err3405 return templ_7745c5c3_Err
3299 }3406 }
3300- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 311, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")3407+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 321, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")
3301 if templ_7745c5c3_Err != nil {3408 if templ_7745c5c3_Err != nil {
3302 return templ_7745c5c3_Err3409 return templ_7745c5c3_Err
3303 }3410 }
3304 if !p.Box.HeadGone && p.Box.ReadyAction == "" {3411 if !p.Box.HeadGone && p.Box.ReadyAction == "" {
3305- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 312, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")3412+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 322, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")
3306 if templ_7745c5c3_Err != nil {3413 if templ_7745c5c3_Err != nil {
3307 return templ_7745c5c3_Err3414 return templ_7745c5c3_Err
3308 }3415 }
@@ -3310,13 +3417,13 @@ func moreMenu(p MRPage) templ.Component {
3310 if templ_7745c5c3_Err != nil {3417 if templ_7745c5c3_Err != nil {
3311 return templ_7745c5c3_Err3418 return templ_7745c5c3_Err
3312 }3419 }
3313- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 313, "</details>")3420+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 323, "</details>")
3314 if templ_7745c5c3_Err != nil {3421 if templ_7745c5c3_Err != nil {
3315 return templ_7745c5c3_Err3422 return templ_7745c5c3_Err
3316 }3423 }
3317 }3424 }
3318 }3425 }
3319- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 314, "</div></details>")3426+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 324, "</div></details>")
3320 if templ_7745c5c3_Err != nil {3427 if templ_7745c5c3_Err != nil {
3321 return templ_7745c5c3_Err3428 return templ_7745c5c3_Err
3322 }3429 }
@@ -3340,12 +3447,12 @@ func Compare(l Layout, p ComparePage) templ.Component {
3340 }()3447 }()
3341 }3448 }
3342 ctx = templ.InitializeContext(ctx)3449 ctx = templ.InitializeContext(ctx)
3343- templ_7745c5c3_Var156 := templ.GetChildren(ctx)3450+ templ_7745c5c3_Var163 := templ.GetChildren(ctx)
3344- if templ_7745c5c3_Var156 == nil {3451+ if templ_7745c5c3_Var163 == nil {
3345- templ_7745c5c3_Var156 = templ.NopComponent3452+ templ_7745c5c3_Var163 = templ.NopComponent
3346 }3453 }
3347 ctx = templ.ClearChildren(ctx)3454 ctx = templ.ClearChildren(ctx)
3348- templ_7745c5c3_Var157 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {3455+ templ_7745c5c3_Var164 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
3349 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context3456 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
3350 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)3457 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
3351 if !templ_7745c5c3_IsBuffer {3458 if !templ_7745c5c3_IsBuffer {
@@ -3357,263 +3464,263 @@ func Compare(l Layout, p ComparePage) templ.Component {
3357 }()3464 }()
3358 }3465 }
3359 ctx = templ.InitializeContext(ctx)3466 ctx = templ.InitializeContext(ctx)
3360- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 315, "<header class=\"show mr-h\"><h1>")3467+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 325, "<header class=\"show mr-h\"><h1>")
3361 if templ_7745c5c3_Err != nil {3468 if templ_7745c5c3_Err != nil {
3362 return templ_7745c5c3_Err3469 return templ_7745c5c3_Err
3363 }3470 }
3364- var templ_7745c5c3_Var158 string3471+ var templ_7745c5c3_Var165 string
3365- templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)3472+ templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3366 if templ_7745c5c3_Err != nil {3473 if templ_7745c5c3_Err != nil {
3367- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 677, Col: 17}3474+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 17}
3368 }3475 }
3369- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))3476+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var165))
3370 if templ_7745c5c3_Err != nil {3477 if templ_7745c5c3_Err != nil {
3371 return templ_7745c5c3_Err3478 return templ_7745c5c3_Err
3372 }3479 }
3373- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 316, " → ")3480+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 326, " → ")
3374 if templ_7745c5c3_Err != nil {3481 if templ_7745c5c3_Err != nil {
3375 return templ_7745c5c3_Err3482 return templ_7745c5c3_Err
3376 }3483 }
3377- var templ_7745c5c3_Var159 string3484+ var templ_7745c5c3_Var166 string
3378- templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)3485+ templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3379 if templ_7745c5c3_Err != nil {3486 if templ_7745c5c3_Err != nil {
3380- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 677, Col: 34}3487+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 34}
3381 }3488 }
3382- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var159))3489+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))
3383 if templ_7745c5c3_Err != nil {3490 if templ_7745c5c3_Err != nil {
3384 return templ_7745c5c3_Err3491 return templ_7745c5c3_Err
3385 }3492 }
3386- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 317, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")3493+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 327, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")
3387 if templ_7745c5c3_Err != nil {3494 if templ_7745c5c3_Err != nil {
3388 return templ_7745c5c3_Err3495 return templ_7745c5c3_Err
3389 }3496 }
3390- var templ_7745c5c3_Var160 templ.SafeURL3497+ var templ_7745c5c3_Var167 templ.SafeURL
3391- templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))3498+ templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))
3392 if templ_7745c5c3_Err != nil {3499 if templ_7745c5c3_Err != nil {
3393- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 45}3500+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 694, Col: 45}
3394 }3501 }
3395- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))3502+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))
3396 if templ_7745c5c3_Err != nil {3503 if templ_7745c5c3_Err != nil {
3397 return templ_7745c5c3_Err3504 return templ_7745c5c3_Err
3398 }3505 }
3399- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 318, "\">")3506+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 328, "\">")
3400 if templ_7745c5c3_Err != nil {3507 if templ_7745c5c3_Err != nil {
3401 return templ_7745c5c3_Err3508 return templ_7745c5c3_Err
3402 }3509 }
3403- var templ_7745c5c3_Var161 string3510+ var templ_7745c5c3_Var168 string
3404- templ_7745c5c3_Var161, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)3511+ templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3405 if templ_7745c5c3_Err != nil {3512 if templ_7745c5c3_Err != nil {
3406- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 58}3513+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 694, Col: 58}
3407 }3514 }
3408- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var161))3515+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var168))
3409 if templ_7745c5c3_Err != nil {3516 if templ_7745c5c3_Err != nil {
3410 return templ_7745c5c3_Err3517 return templ_7745c5c3_Err
3411 }3518 }
3412- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 319, "</a></dd><dt>target</dt><dd><a href=\"")3519+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 329, "</a></dd><dt>target</dt><dd><a href=\"")
3413 if templ_7745c5c3_Err != nil {3520 if templ_7745c5c3_Err != nil {
3414 return templ_7745c5c3_Err3521 return templ_7745c5c3_Err
3415 }3522 }
3416- var templ_7745c5c3_Var162 templ.SafeURL3523+ var templ_7745c5c3_Var169 templ.SafeURL
3417- templ_7745c5c3_Var162, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))3524+ templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))
3418 if templ_7745c5c3_Err != nil {3525 if templ_7745c5c3_Err != nil {
3419- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 682, Col: 45}3526+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 696, Col: 45}
3420 }3527 }
3421- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var162))3528+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var169))
3422 if templ_7745c5c3_Err != nil {3529 if templ_7745c5c3_Err != nil {
3423 return templ_7745c5c3_Err3530 return templ_7745c5c3_Err
3424 }3531 }
3425- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 320, "\">")3532+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 330, "\">")
3426 if templ_7745c5c3_Err != nil {3533 if templ_7745c5c3_Err != nil {
3427 return templ_7745c5c3_Err3534 return templ_7745c5c3_Err
3428 }3535 }
3429- var templ_7745c5c3_Var163 string3536+ var templ_7745c5c3_Var170 string
3430- templ_7745c5c3_Var163, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)3537+ templ_7745c5c3_Var170, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3431 if templ_7745c5c3_Err != nil {3538 if templ_7745c5c3_Err != nil {
3432- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 682, Col: 58}3539+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 696, Col: 58}
3433 }3540 }
3434- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var163))3541+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var170))
3435 if templ_7745c5c3_Err != nil {3542 if templ_7745c5c3_Err != nil {
3436 return templ_7745c5c3_Err3543 return templ_7745c5c3_Err
3437 }3544 }
3438- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 321, "</a></dd><dt>ahead</dt><dd>")3545+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 331, "</a></dd><dt>ahead</dt><dd>")
3439 if templ_7745c5c3_Err != nil {3546 if templ_7745c5c3_Err != nil {
3440 return templ_7745c5c3_Err3547 return templ_7745c5c3_Err
3441 }3548 }
3442- var templ_7745c5c3_Var164 string3549+ var templ_7745c5c3_Var171 string
3443- templ_7745c5c3_Var164, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)3550+ templ_7745c5c3_Var171, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)
3444 if templ_7745c5c3_Err != nil {3551 if templ_7745c5c3_Err != nil {
3445- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 684, Col: 21}3552+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 698, Col: 21}
3446 }3553 }
3447- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var164))3554+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var171))
3448 if templ_7745c5c3_Err != nil {3555 if templ_7745c5c3_Err != nil {
3449 return templ_7745c5c3_Err3556 return templ_7745c5c3_Err
3450 }3557 }
3451- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 322, "</dd></dl></header>")3558+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 332, "</dd></dl></header>")
3452 if templ_7745c5c3_Err != nil {3559 if templ_7745c5c3_Err != nil {
3453 return templ_7745c5c3_Err3560 return templ_7745c5c3_Err
3454 }3561 }
3455 if p.Note != "" {3562 if p.Note != "" {
3456- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 323, "<p class=\"notice\">")3563+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 333, "<p class=\"notice\">")
3457 if templ_7745c5c3_Err != nil {3564 if templ_7745c5c3_Err != nil {
3458 return templ_7745c5c3_Err3565 return templ_7745c5c3_Err
3459 }3566 }
3460- var templ_7745c5c3_Var165 string3567+ var templ_7745c5c3_Var172 string
3461- templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)3568+ templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
3462 if templ_7745c5c3_Err != nil {3569 if templ_7745c5c3_Err != nil {
3463- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 688, Col: 29}3570+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 702, Col: 29}
3464 }3571 }
3465- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var165))3572+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var172))
3466 if templ_7745c5c3_Err != nil {3573 if templ_7745c5c3_Err != nil {
3467 return templ_7745c5c3_Err3574 return templ_7745c5c3_Err
3468 }3575 }
3469- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 324, "</p>")3576+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 334, "</p>")
3470 if templ_7745c5c3_Err != nil {3577 if templ_7745c5c3_Err != nil {
3471 return templ_7745c5c3_Err3578 return templ_7745c5c3_Err
3472 }3579 }
3473 }3580 }
3474- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 325, " ")3581+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 335, " ")
3475 if templ_7745c5c3_Err != nil {3582 if templ_7745c5c3_Err != nil {
3476 return templ_7745c5c3_Err3583 return templ_7745c5c3_Err
3477 }3584 }
3478 if p.Existing != nil {3585 if p.Existing != nil {
3479- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 326, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")3586+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 336, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")
3480 if templ_7745c5c3_Err != nil {3587 if templ_7745c5c3_Err != nil {
3481 return templ_7745c5c3_Err3588 return templ_7745c5c3_Err
3482 }3589 }
3483- var templ_7745c5c3_Var166 templ.SafeURL3590+ var templ_7745c5c3_Var173 templ.SafeURL
3484- templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))3591+ templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))
3485 if templ_7745c5c3_Err != nil {3592 if templ_7745c5c3_Err != nil {
3486- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 114}3593+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 705, Col: 114}
3487 }3594 }
3488- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))3595+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var173))
3489 if templ_7745c5c3_Err != nil {3596 if templ_7745c5c3_Err != nil {
3490 return templ_7745c5c3_Err3597 return templ_7745c5c3_Err
3491 }3598 }
3492- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 327, "\">")3599+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 337, "\">")
3493 if templ_7745c5c3_Err != nil {3600 if templ_7745c5c3_Err != nil {
3494 return templ_7745c5c3_Err3601 return templ_7745c5c3_Err
3495 }3602 }
3496- var templ_7745c5c3_Var167 string3603+ var templ_7745c5c3_Var174 string
3497- templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)3604+ templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)
3498 if templ_7745c5c3_Err != nil {3605 if templ_7745c5c3_Err != nil {
3499- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 135}3606+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 705, Col: 135}
3500 }3607 }
3501- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))3608+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174))
3502 if templ_7745c5c3_Err != nil {3609 if templ_7745c5c3_Err != nil {
3503 return templ_7745c5c3_Err3610 return templ_7745c5c3_Err
3504 }3611 }
3505- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 328, "</a></p>")3612+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 338, "</a></p>")
3506 if templ_7745c5c3_Err != nil {3613 if templ_7745c5c3_Err != nil {
3507 return templ_7745c5c3_Err3614 return templ_7745c5c3_Err
3508 }3615 }
3509 }3616 }
3510- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 329, " ")3617+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 339, " ")
3511 if templ_7745c5c3_Err != nil {3618 if templ_7745c5c3_Err != nil {
3512 return templ_7745c5c3_Err3619 return templ_7745c5c3_Err
3513 }3620 }
3514 if p.Create != nil {3621 if p.Create != nil {
3515- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 330, "<form class=\"cform create\" method=\"post\" action=\"")3622+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 340, "<form class=\"cform create\" method=\"post\" action=\"")
3516 if templ_7745c5c3_Err != nil {3623 if templ_7745c5c3_Err != nil {
3517 return templ_7745c5c3_Err3624 return templ_7745c5c3_Err
3518 }3625 }
3519- var templ_7745c5c3_Var168 templ.SafeURL3626+ var templ_7745c5c3_Var175 templ.SafeURL
3520- templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))3627+ templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))
3521 if templ_7745c5c3_Err != nil {3628 if templ_7745c5c3_Err != nil {
3522- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 694, Col: 83}3629+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 83}
3523 }3630 }
3524- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var168))3631+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var175))
3525 if templ_7745c5c3_Err != nil {3632 if templ_7745c5c3_Err != nil {
3526 return templ_7745c5c3_Err3633 return templ_7745c5c3_Err
3527 }3634 }
3528- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 331, "\"><input type=\"hidden\" name=\"source\" value=\"")3635+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 341, "\"><input type=\"hidden\" name=\"source\" value=\"")
3529 if templ_7745c5c3_Err != nil {3636 if templ_7745c5c3_Err != nil {
3530 return templ_7745c5c3_Err3637 return templ_7745c5c3_Err
3531 }3638 }
3532- var templ_7745c5c3_Var169 string3639+ var templ_7745c5c3_Var176 string
3533- templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)3640+ templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)
3534 if templ_7745c5c3_Err != nil {3641 if templ_7745c5c3_Err != nil {
3535- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 695, Col: 62}3642+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 709, Col: 62}
3536 }3643 }
3537- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var169)3644+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var176)
3538 if templ_7745c5c3_Err != nil {3645 if templ_7745c5c3_Err != nil {
3539 return templ_7745c5c3_Err3646 return templ_7745c5c3_Err
3540 }3647 }
3541- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 332, "\"> <input type=\"hidden\" name=\"target\" value=\"")3648+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 342, "\"> <input type=\"hidden\" name=\"target\" value=\"")
3542 if templ_7745c5c3_Err != nil {3649 if templ_7745c5c3_Err != nil {
3543 return templ_7745c5c3_Err3650 return templ_7745c5c3_Err
3544 }3651 }
3545- var templ_7745c5c3_Var170 string3652+ var templ_7745c5c3_Var177 string
3546- templ_7745c5c3_Var170, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)3653+ templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)
3547 if templ_7745c5c3_Err != nil {3654 if templ_7745c5c3_Err != nil {
3548- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 696, Col: 62}3655+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 710, Col: 62}
3549 }3656 }
3550- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var170)3657+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var177)
3551 if templ_7745c5c3_Err != nil {3658 if templ_7745c5c3_Err != nil {
3552 return templ_7745c5c3_Err3659 return templ_7745c5c3_Err
3553 }3660 }
3554- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 333, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")3661+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 343, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")
3555 if templ_7745c5c3_Err != nil {3662 if templ_7745c5c3_Err != nil {
3556 return templ_7745c5c3_Err3663 return templ_7745c5c3_Err
3557 }3664 }
3558- var templ_7745c5c3_Var171 string3665+ var templ_7745c5c3_Var178 string
3559- templ_7745c5c3_Var171, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)3666+ templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)
3560 if templ_7745c5c3_Err != nil {3667 if templ_7745c5c3_Err != nil {
3561- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 698, Col: 97}3668+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 712, Col: 97}
3562 }3669 }
3563- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var171)3670+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var178)
3564 if templ_7745c5c3_Err != nil {3671 if templ_7745c5c3_Err != nil {
3565 return templ_7745c5c3_Err3672 return templ_7745c5c3_Err
3566 }3673 }
3567- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 334, "\" autocomplete=\"off\"> <label for=\"mr-desc\">description</label> <textarea id=\"mr-desc\" name=\"description\" rows=\"4\" maxlength=\"8000\" placeholder=\"Markdown, optional\"></textarea><div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Create merge request</button></div></form>")3674+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 344, "\" autocomplete=\"off\"> <label for=\"mr-desc\">description</label> <textarea id=\"mr-desc\" name=\"description\" rows=\"4\" maxlength=\"8000\" placeholder=\"Markdown, optional\"></textarea><div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Create merge request</button></div></form>")
3568 if templ_7745c5c3_Err != nil {3675 if templ_7745c5c3_Err != nil {
3569 return templ_7745c5c3_Err3676 return templ_7745c5c3_Err
3570 }3677 }
3571 }3678 }
3572- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 335, " ")3679+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 345, " ")
3573 if templ_7745c5c3_Err != nil {3680 if templ_7745c5c3_Err != nil {
3574 return templ_7745c5c3_Err3681 return templ_7745c5c3_Err
3575 }3682 }
3576 if p.HasDiff {3683 if p.HasDiff {
3577- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 336, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")3684+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 346, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")
3578 if templ_7745c5c3_Err != nil {3685 if templ_7745c5c3_Err != nil {
3579 return templ_7745c5c3_Err3686 return templ_7745c5c3_Err
3580 }3687 }
3581- var templ_7745c5c3_Var172 string3688+ var templ_7745c5c3_Var179 string
3582- templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))3689+ templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
3583 if templ_7745c5c3_Err != nil {3690 if templ_7745c5c3_Err != nil {
3584- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 57}3691+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 722, Col: 57}
3585 }3692 }
3586- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var172))3693+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))
3587 if templ_7745c5c3_Err != nil {3694 if templ_7745c5c3_Err != nil {
3588 return templ_7745c5c3_Err3695 return templ_7745c5c3_Err
3589 }3696 }
3590- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 337, " · <span class=\"plus\">+")3697+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 347, " · <span class=\"plus\">+")
3591 if templ_7745c5c3_Err != nil {3698 if templ_7745c5c3_Err != nil {
3592 return templ_7745c5c3_Err3699 return templ_7745c5c3_Err
3593 }3700 }
3594- var templ_7745c5c3_Var173 string3701+ var templ_7745c5c3_Var180 string
3595- templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))3702+ templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
3596 if templ_7745c5c3_Err != nil {3703 if templ_7745c5c3_Err != nil {
3597- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 97}3704+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 722, Col: 97}
3598 }3705 }
3599- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var173))3706+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var180))
3600 if templ_7745c5c3_Err != nil {3707 if templ_7745c5c3_Err != nil {
3601 return templ_7745c5c3_Err3708 return templ_7745c5c3_Err
3602 }3709 }
3603- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 338, "</span> <span class=\"minus\">-")3710+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 348, "</span> <span class=\"minus\">-")
3604 if templ_7745c5c3_Err != nil {3711 if templ_7745c5c3_Err != nil {
3605 return templ_7745c5c3_Err3712 return templ_7745c5c3_Err
3606 }3713 }
3607- var templ_7745c5c3_Var174 string3714+ var templ_7745c5c3_Var181 string
3608- templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))3715+ templ_7745c5c3_Var181, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
3609 if templ_7745c5c3_Err != nil {3716 if templ_7745c5c3_Err != nil {
3610- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 142}3717+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 722, Col: 142}
3611 }3718 }
3612- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174))3719+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var181))
3613 if templ_7745c5c3_Err != nil {3720 if templ_7745c5c3_Err != nil {
3614 return templ_7745c5c3_Err3721 return templ_7745c5c3_Err
3615 }3722 }
3616- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 339, "</span></span> <span class=\"grow\"></span>")3723+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 349, "</span></span> <span class=\"grow\"></span>")
3617 if templ_7745c5c3_Err != nil {3724 if templ_7745c5c3_Err != nil {
3618 return templ_7745c5c3_Err3725 return templ_7745c5c3_Err
3619 }3726 }
@@ -3621,64 +3728,64 @@ func Compare(l Layout, p ComparePage) templ.Component {
3621 if templ_7745c5c3_Err != nil {3728 if templ_7745c5c3_Err != nil {
3622 return templ_7745c5c3_Err3729 return templ_7745c5c3_Err
3623 }3730 }
3624- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 340, "</div>")3731+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 350, "</div>")
3625 if templ_7745c5c3_Err != nil {3732 if templ_7745c5c3_Err != nil {
3626 return templ_7745c5c3_Err3733 return templ_7745c5c3_Err
3627 }3734 }
3628 if p.Invisible {3735 if p.Invisible {
3629- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 341, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")3736+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 351, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")
3630 if templ_7745c5c3_Err != nil {3737 if templ_7745c5c3_Err != nil {
3631 return templ_7745c5c3_Err3738 return templ_7745c5c3_Err
3632 }3739 }
3633 }3740 }
3634- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 342, " <div id=\"diffs\"")3741+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 352, " <div id=\"diffs\"")
3635 if templ_7745c5c3_Err != nil {3742 if templ_7745c5c3_Err != nil {
3636 return templ_7745c5c3_Err3743 return templ_7745c5c3_Err
3637 }3744 }
3638 if p.Both {3745 if p.Both {
3639- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 343, " data-diff=\"")3746+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 353, " data-diff=\"")
3640 if templ_7745c5c3_Err != nil {3747 if templ_7745c5c3_Err != nil {
3641 return templ_7745c5c3_Err3748 return templ_7745c5c3_Err
3642 }3749 }
3643- var templ_7745c5c3_Var175 string3750+ var templ_7745c5c3_Var182 string
3644- templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)3751+ templ_7745c5c3_Var182, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3645 if templ_7745c5c3_Err != nil {3752 if templ_7745c5c3_Err != nil {
3646- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 721, Col: 23}3753+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 735, Col: 23}
3647 }3754 }
3648- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var175)3755+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var182)
3649 if templ_7745c5c3_Err != nil {3756 if templ_7745c5c3_Err != nil {
3650 return templ_7745c5c3_Err3757 return templ_7745c5c3_Err
3651 }3758 }
3652- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 344, "\"")3759+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 354, "\"")
3653 if templ_7745c5c3_Err != nil {3760 if templ_7745c5c3_Err != nil {
3654 return templ_7745c5c3_Err3761 return templ_7745c5c3_Err
3655 }3762 }
3656 } else {3763 } else {
3657- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 345, " data-view=\"")3764+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 355, " data-view=\"")
3658 if templ_7745c5c3_Err != nil {3765 if templ_7745c5c3_Err != nil {
3659 return templ_7745c5c3_Err3766 return templ_7745c5c3_Err
3660 }3767 }
3661- var templ_7745c5c3_Var176 string3768+ var templ_7745c5c3_Var183 string
3662- templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)3769+ templ_7745c5c3_Var183, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3663 if templ_7745c5c3_Err != nil {3770 if templ_7745c5c3_Err != nil {
3664- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 23}3771+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 737, Col: 23}
3665 }3772 }
3666- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var176)3773+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var183)
3667 if templ_7745c5c3_Err != nil {3774 if templ_7745c5c3_Err != nil {
3668 return templ_7745c5c3_Err3775 return templ_7745c5c3_Err
3669 }3776 }
3670- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 346, "\"")3777+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 356, "\"")
3671 if templ_7745c5c3_Err != nil {3778 if templ_7745c5c3_Err != nil {
3672 return templ_7745c5c3_Err3779 return templ_7745c5c3_Err
3673 }3780 }
3674 }3781 }
3675 if p.Both && !p.Pinned {3782 if p.Both && !p.Pinned {
3676- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 347, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")3783+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 357, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
3677 if templ_7745c5c3_Err != nil {3784 if templ_7745c5c3_Err != nil {
3678 return templ_7745c5c3_Err3785 return templ_7745c5c3_Err
3679 }3786 }
3680 }3787 }
3681- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 348, ">")3788+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 358, ">")
3682 if templ_7745c5c3_Err != nil {3789 if templ_7745c5c3_Err != nil {
3683 return templ_7745c5c3_Err3790 return templ_7745c5c3_Err
3684 }3791 }
@@ -3688,14 +3795,14 @@ func Compare(l Layout, p ComparePage) templ.Component {
3688 return templ_7745c5c3_Err3795 return templ_7745c5c3_Err
3689 }3796 }
3690 }3797 }
3691- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 349, "</div>")3798+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 359, "</div>")
3692 if templ_7745c5c3_Err != nil {3799 if templ_7745c5c3_Err != nil {
3693 return templ_7745c5c3_Err3800 return templ_7745c5c3_Err
3694 }3801 }
3695 }3802 }
3696 return nil3803 return nil
3697 })3804 })
3698- templ_7745c5c3_Err = Shell(l, compareRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var157), templ_7745c5c3_Buffer)3805+ templ_7745c5c3_Err = Shell(l, compareRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var164), templ_7745c5c3_Buffer)
3699 if templ_7745c5c3_Err != nil {3806 if templ_7745c5c3_Err != nil {
3700 return templ_7745c5c3_Err3807 return templ_7745c5c3_Err
3701 }3808 }
@@ -3719,173 +3826,173 @@ func compareRail(p ComparePage) templ.Component {
3719 }()3826 }()
3720 }3827 }
3721 ctx = templ.InitializeContext(ctx)3828 ctx = templ.InitializeContext(ctx)
3722- templ_7745c5c3_Var177 := templ.GetChildren(ctx)3829+ templ_7745c5c3_Var184 := templ.GetChildren(ctx)
3723- if templ_7745c5c3_Var177 == nil {3830+ if templ_7745c5c3_Var184 == nil {
3724- templ_7745c5c3_Var177 = templ.NopComponent3831+ templ_7745c5c3_Var184 = templ.NopComponent
3725 }3832 }
3726 ctx = templ.ClearChildren(ctx)3833 ctx = templ.ClearChildren(ctx)
3727- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 350, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")3834+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 360, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")
3728 if templ_7745c5c3_Err != nil {3835 if templ_7745c5c3_Err != nil {
3729 return templ_7745c5c3_Err3836 return templ_7745c5c3_Err
3730 }3837 }
3731- var templ_7745c5c3_Var178 string3838+ var templ_7745c5c3_Var185 string
3732- templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))3839+ templ_7745c5c3_Var185, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))
3733 if templ_7745c5c3_Err != nil {3840 if templ_7745c5c3_Err != nil {
3734- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 739, Col: 67}3841+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 753, Col: 67}
3735 }3842 }
3736- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var178))3843+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var185))
3737 if templ_7745c5c3_Err != nil {3844 if templ_7745c5c3_Err != nil {
3738 return templ_7745c5c3_Err3845 return templ_7745c5c3_Err
3739 }3846 }
3740- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 351, "</span></h2><ul class=\"pcommits\">")3847+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 361, "</span></h2><ul class=\"pcommits\">")
3741 if templ_7745c5c3_Err != nil {3848 if templ_7745c5c3_Err != nil {
3742 return templ_7745c5c3_Err3849 return templ_7745c5c3_Err
3743 }3850 }
3744 for _, c := range p.Ahead {3851 for _, c := range p.Ahead {
3745- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 352, "<li><a href=\"")3852+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 362, "<li><a href=\"")
3746 if templ_7745c5c3_Err != nil {3853 if templ_7745c5c3_Err != nil {
3747 return templ_7745c5c3_Err3854 return templ_7745c5c3_Err
3748 }3855 }
3749- var templ_7745c5c3_Var179 templ.SafeURL3856+ var templ_7745c5c3_Var186 templ.SafeURL
3750- templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))3857+ templ_7745c5c3_Var186, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
3751 if templ_7745c5c3_Err != nil {3858 if templ_7745c5c3_Err != nil {
3752- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 37}3859+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 757, Col: 37}
3753 }3860 }
3754- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))3861+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var186))
3755 if templ_7745c5c3_Err != nil {3862 if templ_7745c5c3_Err != nil {
3756 return templ_7745c5c3_Err3863 return templ_7745c5c3_Err
3757 }3864 }
3758- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 353, "\">")3865+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 363, "\">")
3759 if templ_7745c5c3_Err != nil {3866 if templ_7745c5c3_Err != nil {
3760 return templ_7745c5c3_Err3867 return templ_7745c5c3_Err
3761 }3868 }
3762- var templ_7745c5c3_Var180 string3869+ var templ_7745c5c3_Var187 string
3763- templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)3870+ templ_7745c5c3_Var187, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
3764 if templ_7745c5c3_Err != nil {3871 if templ_7745c5c3_Err != nil {
3765- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 49}3872+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 757, Col: 49}
3766 }3873 }
3767- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var180))3874+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var187))
3768 if templ_7745c5c3_Err != nil {3875 if templ_7745c5c3_Err != nil {
3769 return templ_7745c5c3_Err3876 return templ_7745c5c3_Err
3770 }3877 }
3771- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 354, "</a> <span class=\"s\">")3878+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 364, "</a> <span class=\"s\">")
3772 if templ_7745c5c3_Err != nil {3879 if templ_7745c5c3_Err != nil {
3773 return templ_7745c5c3_Err3880 return templ_7745c5c3_Err
3774 }3881 }
3775- var templ_7745c5c3_Var181 string3882+ var templ_7745c5c3_Var188 string
3776- templ_7745c5c3_Var181, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)3883+ templ_7745c5c3_Var188, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
3777 if templ_7745c5c3_Err != nil {3884 if templ_7745c5c3_Err != nil {
3778- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 744, Col: 32}3885+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 758, Col: 32}
3779 }3886 }
3780- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var181))3887+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var188))
3781 if templ_7745c5c3_Err != nil {3888 if templ_7745c5c3_Err != nil {
3782 return templ_7745c5c3_Err3889 return templ_7745c5c3_Err
3783 }3890 }
3784- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 355, "</span> <span class=\"mute\">")3891+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 365, "</span> <span class=\"mute\">")
3785 if templ_7745c5c3_Err != nil {3892 if templ_7745c5c3_Err != nil {
3786 return templ_7745c5c3_Err3893 return templ_7745c5c3_Err
3787 }3894 }
3788- var templ_7745c5c3_Var182 string3895+ var templ_7745c5c3_Var189 string
3789- templ_7745c5c3_Var182, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)3896+ templ_7745c5c3_Var189, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
3790 if templ_7745c5c3_Err != nil {3897 if templ_7745c5c3_Err != nil {
3791- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 746, Col: 16}3898+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 760, Col: 16}
3792 }3899 }
3793- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var182))3900+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var189))
3794 if templ_7745c5c3_Err != nil {3901 if templ_7745c5c3_Err != nil {
3795 return templ_7745c5c3_Err3902 return templ_7745c5c3_Err
3796 }3903 }
3797- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 356, " ")3904+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 366, " ")
3798 if templ_7745c5c3_Err != nil {3905 if templ_7745c5c3_Err != nil {
3799 return templ_7745c5c3_Err3906 return templ_7745c5c3_Err
3800 }3907 }
3801 if c.WhenAt != "" {3908 if c.WhenAt != "" {
3802- var templ_7745c5c3_Var183 string3909+ var templ_7745c5c3_Var190 string
3803- templ_7745c5c3_Var183, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")3910+ templ_7745c5c3_Var190, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
3804 if templ_7745c5c3_Err != nil {3911 if templ_7745c5c3_Err != nil {
3805- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 15}3912+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 762, Col: 15}
3806 }3913 }
3807- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var183))3914+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var190))
3808 if templ_7745c5c3_Err != nil {3915 if templ_7745c5c3_Err != nil {
3809 return templ_7745c5c3_Err3916 return templ_7745c5c3_Err
3810 }3917 }
3811- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 357, "<time datetime=\"")3918+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 367, "<time datetime=\"")
3812 if templ_7745c5c3_Err != nil {3919 if templ_7745c5c3_Err != nil {
3813 return templ_7745c5c3_Err3920 return templ_7745c5c3_Err
3814 }3921 }
3815- var templ_7745c5c3_Var184 string3922+ var templ_7745c5c3_Var191 string
3816- templ_7745c5c3_Var184, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)3923+ templ_7745c5c3_Var191, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
3817 if templ_7745c5c3_Err != nil {3924 if templ_7745c5c3_Err != nil {
3818- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 42}3925+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 762, Col: 42}
3819 }3926 }
3820- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var184)3927+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var191)
3821 if templ_7745c5c3_Err != nil {3928 if templ_7745c5c3_Err != nil {
3822 return templ_7745c5c3_Err3929 return templ_7745c5c3_Err
3823 }3930 }
3824- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 358, "\">")3931+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 368, "\">")
3825 if templ_7745c5c3_Err != nil {3932 if templ_7745c5c3_Err != nil {
3826 return templ_7745c5c3_Err3933 return templ_7745c5c3_Err
3827 }3934 }
3828- var templ_7745c5c3_Var185 string3935+ var templ_7745c5c3_Var192 string
3829- templ_7745c5c3_Var185, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)3936+ templ_7745c5c3_Var192, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
3830 if templ_7745c5c3_Err != nil {3937 if templ_7745c5c3_Err != nil {
3831- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 53}3938+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 762, Col: 53}
3832 }3939 }
3833- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var185))3940+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var192))
3834 if templ_7745c5c3_Err != nil {3941 if templ_7745c5c3_Err != nil {
3835 return templ_7745c5c3_Err3942 return templ_7745c5c3_Err
3836 }3943 }
3837- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 359, "</time>")3944+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 369, "</time>")
3838 if templ_7745c5c3_Err != nil {3945 if templ_7745c5c3_Err != nil {
3839 return templ_7745c5c3_Err3946 return templ_7745c5c3_Err
3840 }3947 }
3841 }3948 }
3842- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 360, "</span></li>")3949+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 370, "</span></li>")
3843 if templ_7745c5c3_Err != nil {3950 if templ_7745c5c3_Err != nil {
3844 return templ_7745c5c3_Err3951 return templ_7745c5c3_Err
3845 }3952 }
3846 }3953 }
3847- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 361, "</ul>")3954+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 371, "</ul>")
3848 if templ_7745c5c3_Err != nil {3955 if templ_7745c5c3_Err != nil {
3849 return templ_7745c5c3_Err3956 return templ_7745c5c3_Err
3850 }3957 }
3851 if len(p.Ahead) == 0 {3958 if len(p.Ahead) == 0 {
3852- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 362, "<p class=\"dim\">no commit ahead of ")3959+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 372, "<p class=\"dim\">no commit ahead of ")
3853 if templ_7745c5c3_Err != nil {3960 if templ_7745c5c3_Err != nil {
3854 return templ_7745c5c3_Err3961 return templ_7745c5c3_Err
3855 }3962 }
3856- var templ_7745c5c3_Var186 string3963+ var templ_7745c5c3_Var193 string
3857- templ_7745c5c3_Var186, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)3964+ templ_7745c5c3_Var193, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3858 if templ_7745c5c3_Err != nil {3965 if templ_7745c5c3_Err != nil {
3859- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 755, Col: 47}3966+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 769, Col: 47}
3860 }3967 }
3861- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var186))3968+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var193))
3862 if templ_7745c5c3_Err != nil {3969 if templ_7745c5c3_Err != nil {
3863 return templ_7745c5c3_Err3970 return templ_7745c5c3_Err
3864 }3971 }
3865- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 363, ".</p>")3972+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 373, ".</p>")
3866 if templ_7745c5c3_Err != nil {3973 if templ_7745c5c3_Err != nil {
3867 return templ_7745c5c3_Err3974 return templ_7745c5c3_Err
3868 }3975 }
3869 }3976 }
3870- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 364, "</section>")3977+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 374, "</section>")
3871 if templ_7745c5c3_Err != nil {3978 if templ_7745c5c3_Err != nil {
3872 return templ_7745c5c3_Err3979 return templ_7745c5c3_Err
3873 }3980 }
3874 if p.HasDiff {3981 if p.HasDiff {
3875- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 365, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")3982+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 375, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
3876 if templ_7745c5c3_Err != nil {3983 if templ_7745c5c3_Err != nil {
3877 return templ_7745c5c3_Err3984 return templ_7745c5c3_Err
3878 }3985 }
3879- var templ_7745c5c3_Var187 string3986+ var templ_7745c5c3_Var194 string
3880- templ_7745c5c3_Var187, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))3987+ templ_7745c5c3_Var194, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
3881 if templ_7745c5c3_Err != nil {3988 if templ_7745c5c3_Err != nil {
3882- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 760, Col: 66}3989+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 774, Col: 66}
3883 }3990 }
3884- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var187))3991+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var194))
3885 if templ_7745c5c3_Err != nil {3992 if templ_7745c5c3_Err != nil {
3886 return templ_7745c5c3_Err3993 return templ_7745c5c3_Err
3887 }3994 }
3888- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 366, "</span></h2>")3995+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 376, "</span></h2>")
3889 if templ_7745c5c3_Err != nil {3996 if templ_7745c5c3_Err != nil {
3890 return templ_7745c5c3_Err3997 return templ_7745c5c3_Err
3891 }3998 }
@@ -3893,12 +4000,12 @@ func compareRail(p ComparePage) templ.Component {
3893 if templ_7745c5c3_Err != nil {4000 if templ_7745c5c3_Err != nil {
3894 return templ_7745c5c3_Err4001 return templ_7745c5c3_Err
3895 }4002 }
3896- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 367, "</section>")4003+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 377, "</section>")
3897 if templ_7745c5c3_Err != nil {4004 if templ_7745c5c3_Err != nil {
3898 return templ_7745c5c3_Err4005 return templ_7745c5c3_Err
3899 }4006 }
3900 }4007 }
3901- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 368, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")4008+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 378, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")
3902 if templ_7745c5c3_Err != nil {4009 if templ_7745c5c3_Err != nil {
3903 return templ_7745c5c3_Err4010 return templ_7745c5c3_Err
3904 }4011 }
@@ -3906,7 +4013,7 @@ func compareRail(p ComparePage) templ.Component {
3906 if templ_7745c5c3_Err != nil {4013 if templ_7745c5c3_Err != nil {
3907 return templ_7745c5c3_Err4014 return templ_7745c5c3_Err
3908 }4015 }
3909- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 369, "</section>")4016+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 379, "</section>")
3910 if templ_7745c5c3_Err != nil {4017 if templ_7745c5c3_Err != nil {
3911 return templ_7745c5c3_Err4018 return templ_7745c5c3_Err
3912 }4019 }
@@ -3932,35 +4039,35 @@ func MRMergeChecks(c ChecksSummary) templ.Component {
3932 }()4039 }()
3933 }4040 }
3934 ctx = templ.InitializeContext(ctx)4041 ctx = templ.InitializeContext(ctx)
3935- templ_7745c5c3_Var188 := templ.GetChildren(ctx)4042+ templ_7745c5c3_Var195 := templ.GetChildren(ctx)
3936- if templ_7745c5c3_Var188 == nil {4043+ if templ_7745c5c3_Var195 == nil {
3937- templ_7745c5c3_Var188 = templ.NopComponent4044+ templ_7745c5c3_Var195 = templ.NopComponent
3938 }4045 }
3939 ctx = templ.ClearChildren(ctx)4046 ctx = templ.ClearChildren(ctx)
3940- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 370, "<div id=\"mr-merge-checks\" data-keep-checks>")4047+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 380, "<div id=\"mr-merge-checks\" data-keep-checks>")
3941 if templ_7745c5c3_Err != nil {4048 if templ_7745c5c3_Err != nil {
3942 return templ_7745c5c3_Err4049 return templ_7745c5c3_Err
3943 }4050 }
3944 if c.Kind == "bad" || c.Kind == "running" {4051 if c.Kind == "bad" || c.Kind == "running" {
3945- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 371, "<p class=\"d-note\">")4052+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 381, "<p class=\"d-note\">")
3946 if templ_7745c5c3_Err != nil {4053 if templ_7745c5c3_Err != nil {
3947 return templ_7745c5c3_Err4054 return templ_7745c5c3_Err
3948 }4055 }
3949- var templ_7745c5c3_Var189 string4056+ var templ_7745c5c3_Var196 string
3950- templ_7745c5c3_Var189, templ_7745c5c3_Err = templ.JoinStringErrs(c.State + ": a failing or unfinished check blocks the merge.")4057+ templ_7745c5c3_Var196, templ_7745c5c3_Err = templ.JoinStringErrs(c.State + ": a failing or unfinished check blocks the merge.")
3951 if templ_7745c5c3_Err != nil {4058 if templ_7745c5c3_Err != nil {
3952- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 775, Col: 84}4059+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 789, Col: 84}
3953 }4060 }
3954- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var189))4061+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var196))
3955 if templ_7745c5c3_Err != nil {4062 if templ_7745c5c3_Err != nil {
3956 return templ_7745c5c3_Err4063 return templ_7745c5c3_Err
3957 }4064 }
3958- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 372, "</p><label class=\"d-check\"><input type=\"checkbox\" name=\"ignore_checks\"> Ignore checks</label>")4065+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 382, "</p><label class=\"d-check\"><input type=\"checkbox\" name=\"ignore_checks\"> Ignore checks</label>")
3959 if templ_7745c5c3_Err != nil {4066 if templ_7745c5c3_Err != nil {
3960 return templ_7745c5c3_Err4067 return templ_7745c5c3_Err
3961 }4068 }
3962 }4069 }
3963- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 373, "</div>")4070+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 383, "</div>")
3964 if templ_7745c5c3_Err != nil {4071 if templ_7745c5c3_Err != nil {
3965 return templ_7745c5c3_Err4072 return templ_7745c5c3_Err
3966 }4073 }
@@ -3985,9 +4092,9 @@ func MRStateFragment(p MRPage) templ.Component {
3985 }()4092 }()
3986 }4093 }
3987 ctx = templ.InitializeContext(ctx)4094 ctx = templ.InitializeContext(ctx)
3988- templ_7745c5c3_Var190 := templ.GetChildren(ctx)4095+ templ_7745c5c3_Var197 := templ.GetChildren(ctx)
3989- if templ_7745c5c3_Var190 == nil {4096+ if templ_7745c5c3_Var197 == nil {
3990- templ_7745c5c3_Var190 = templ.NopComponent4097+ templ_7745c5c3_Var197 = templ.NopComponent
3991 }4098 }
3992 ctx = templ.ClearChildren(ctx)4099 ctx = templ.ClearChildren(ctx)
3993 templ_7745c5c3_Err = mrState(p).Render(ctx, templ_7745c5c3_Buffer)4100 templ_7745c5c3_Err = mrState(p).Render(ctx, templ_7745c5c3_Buffer)
@@ -4018,92 +4125,92 @@ func mrState(p MRPage) templ.Component {
4018 }()4125 }()
4019 }4126 }
4020 ctx = templ.InitializeContext(ctx)4127 ctx = templ.InitializeContext(ctx)
4021- templ_7745c5c3_Var191 := templ.GetChildren(ctx)4128+ templ_7745c5c3_Var198 := templ.GetChildren(ctx)
4022- if templ_7745c5c3_Var191 == nil {4129+ if templ_7745c5c3_Var198 == nil {
4023- templ_7745c5c3_Var191 = templ.NopComponent4130+ templ_7745c5c3_Var198 = templ.NopComponent
4024 }4131 }
4025 ctx = templ.ClearChildren(ctx)4132 ctx = templ.ClearChildren(ctx)
4026- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 374, "<dd id=\"mr-state\" hx-swap-oob=\"true\" class=\"mr-state\" data-state=\"")4133+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 384, "<dd id=\"mr-state\" hx-swap-oob=\"true\" class=\"mr-state\" data-state=\"")
4027 if templ_7745c5c3_Err != nil {4134 if templ_7745c5c3_Err != nil {
4028 return templ_7745c5c3_Err4135 return templ_7745c5c3_Err
4029 }4136 }
4030- var templ_7745c5c3_Var192 string4137+ var templ_7745c5c3_Var199 string
4031- templ_7745c5c3_Var192, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.State)4138+ templ_7745c5c3_Var199, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.State)
4032 if templ_7745c5c3_Err != nil {4139 if templ_7745c5c3_Err != nil {
4033- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 788, Col: 75}4140+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 802, Col: 75}
4034 }4141 }
4035- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var192)4142+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var199)
4036 if templ_7745c5c3_Err != nil {4143 if templ_7745c5c3_Err != nil {
4037 return templ_7745c5c3_Err4144 return templ_7745c5c3_Err
4038 }4145 }
4039- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 375, "\">")4146+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 385, "\">")
4040 if templ_7745c5c3_Err != nil {4147 if templ_7745c5c3_Err != nil {
4041 return templ_7745c5c3_Err4148 return templ_7745c5c3_Err
4042 }4149 }
4043- var templ_7745c5c3_Var193 string4150+ var templ_7745c5c3_Var200 string
4044- templ_7745c5c3_Var193, templ_7745c5c3_Err = templ.JoinStringErrs(p.State)4151+ templ_7745c5c3_Var200, templ_7745c5c3_Err = templ.JoinStringErrs(p.State)
4045 if templ_7745c5c3_Err != nil {4152 if templ_7745c5c3_Err != nil {
4046- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 789, Col: 11}4153+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 803, Col: 11}
4047 }4154 }
4048- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var193))4155+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var200))
4049 if templ_7745c5c3_Err != nil {4156 if templ_7745c5c3_Err != nil {
4050 return templ_7745c5c3_Err4157 return templ_7745c5c3_Err
4051 }4158 }
4052- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 376, " ")4159+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 386, " ")
4053 if templ_7745c5c3_Err != nil {4160 if templ_7745c5c3_Err != nil {
4054 return templ_7745c5c3_Err4161 return templ_7745c5c3_Err
4055 }4162 }
4056 if p.MergedShort != "" {4163 if p.MergedShort != "" {
4057- var templ_7745c5c3_Var194 string4164+ var templ_7745c5c3_Var201 string
4058- templ_7745c5c3_Var194, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")4165+ templ_7745c5c3_Var201, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
4059 if templ_7745c5c3_Err != nil {4166 if templ_7745c5c3_Err != nil {
4060- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 791, Col: 11}4167+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 805, Col: 11}
4061 }4168 }
4062- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var194))4169+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var201))
4063 if templ_7745c5c3_Err != nil {4170 if templ_7745c5c3_Err != nil {
4064 return templ_7745c5c3_Err4171 return templ_7745c5c3_Err
4065 }4172 }
4066- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 377, "<a href=\"")4173+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 387, "<a href=\"")
4067 if templ_7745c5c3_Err != nil {4174 if templ_7745c5c3_Err != nil {
4068 return templ_7745c5c3_Err4175 return templ_7745c5c3_Err
4069 }4176 }
4070- var templ_7745c5c3_Var195 templ.SafeURL4177+ var templ_7745c5c3_Var202 templ.SafeURL
4071- templ_7745c5c3_Var195, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.MergedHref))4178+ templ_7745c5c3_Var202, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.MergedHref))
4072 if templ_7745c5c3_Err != nil {4179 if templ_7745c5c3_Err != nil {
4073- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 791, Col: 50}4180+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 805, Col: 50}
4074 }4181 }
4075- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var195))4182+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var202))
4076 if templ_7745c5c3_Err != nil {4183 if templ_7745c5c3_Err != nil {
4077 return templ_7745c5c3_Err4184 return templ_7745c5c3_Err
4078 }4185 }
4079- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 378, "\">")4186+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 388, "\">")
4080 if templ_7745c5c3_Err != nil {4187 if templ_7745c5c3_Err != nil {
4081 return templ_7745c5c3_Err4188 return templ_7745c5c3_Err
4082 }4189 }
4083- var templ_7745c5c3_Var196 string4190+ var templ_7745c5c3_Var203 string
4084- templ_7745c5c3_Var196, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergedShort)4191+ templ_7745c5c3_Var203, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergedShort)
4085 if templ_7745c5c3_Err != nil {4192 if templ_7745c5c3_Err != nil {
4086- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 791, Col: 68}4193+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 805, Col: 68}
4087 }4194 }
4088- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var196))4195+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var203))
4089 if templ_7745c5c3_Err != nil {4196 if templ_7745c5c3_Err != nil {
4090 return templ_7745c5c3_Err4197 return templ_7745c5c3_Err
4091 }4198 }
4092- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 379, "</a>")4199+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 389, "</a>")
4093 if templ_7745c5c3_Err != nil {4200 if templ_7745c5c3_Err != nil {
4094 return templ_7745c5c3_Err4201 return templ_7745c5c3_Err
4095 }4202 }
4096- var templ_7745c5c3_Var197 string4203+ var templ_7745c5c3_Var204 string
4097- templ_7745c5c3_Var197, templ_7745c5c3_Err = templ.JoinStringErrs(" · " + p.MergeMode)4204+ templ_7745c5c3_Var204, templ_7745c5c3_Err = templ.JoinStringErrs(" · " + p.MergeMode)
4098 if templ_7745c5c3_Err != nil {4205 if templ_7745c5c3_Err != nil {
4099- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 791, Col: 96}4206+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 805, Col: 96}
4100 }4207 }
4101- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var197))4208+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var204))
4102 if templ_7745c5c3_Err != nil {4209 if templ_7745c5c3_Err != nil {
4103 return templ_7745c5c3_Err4210 return templ_7745c5c3_Err
4104 }4211 }
4105 }4212 }
4106- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 380, "</dd>")4213+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 390, "</dd>")
4107 if templ_7745c5c3_Err != nil {4214 if templ_7745c5c3_Err != nil {
4108 return templ_7745c5c3_Err4215 return templ_7745c5c3_Err
4109 }4216 }
@@ -4127,12 +4234,12 @@ func mrActions(p MRPage, fragment bool) templ.Component {
4127 }()4234 }()
4128 }4235 }
4129 ctx = templ.InitializeContext(ctx)4236 ctx = templ.InitializeContext(ctx)
4130- templ_7745c5c3_Var198 := templ.GetChildren(ctx)4237+ templ_7745c5c3_Var205 := templ.GetChildren(ctx)
4131- if templ_7745c5c3_Var198 == nil {4238+ if templ_7745c5c3_Var205 == nil {
4132- templ_7745c5c3_Var198 = templ.NopComponent4239+ templ_7745c5c3_Var205 = templ.NopComponent
4133 }4240 }
4134 ctx = templ.ClearChildren(ctx)4241 ctx = templ.ClearChildren(ctx)
4135- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 381, "<div id=\"mr-actions\" hx-swap-oob=\"true\" class=\"mr-acts\">")4242+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 391, "<div id=\"mr-actions\" hx-swap-oob=\"true\" class=\"mr-acts\">")
4136 if templ_7745c5c3_Err != nil {4243 if templ_7745c5c3_Err != nil {
4137 return templ_7745c5c3_Err4244 return templ_7745c5c3_Err
4138 }4245 }
@@ -4151,25 +4258,25 @@ func mrActions(p MRPage, fragment bool) templ.Component {
4151 return templ_7745c5c3_Err4258 return templ_7745c5c3_Err
4152 }4259 }
4153 if fragment && p.MergeError != "" {4260 if fragment && p.MergeError != "" {
4154- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 382, "<p class=\"d-err\" role=\"alert\">")4261+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 392, "<p class=\"d-err\" role=\"alert\">")
4155 if templ_7745c5c3_Err != nil {4262 if templ_7745c5c3_Err != nil {
4156 return templ_7745c5c3_Err4263 return templ_7745c5c3_Err
4157 }4264 }
4158- var templ_7745c5c3_Var199 string4265+ var templ_7745c5c3_Var206 string
4159- templ_7745c5c3_Var199, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergeError)4266+ templ_7745c5c3_Var206, templ_7745c5c3_Err = templ.JoinStringErrs(p.MergeError)
4160 if templ_7745c5c3_Err != nil {4267 if templ_7745c5c3_Err != nil {
4161- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 804, Col: 47}4268+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 818, Col: 47}
4162 }4269 }
4163- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var199))4270+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var206))
4164 if templ_7745c5c3_Err != nil {4271 if templ_7745c5c3_Err != nil {
4165 return templ_7745c5c3_Err4272 return templ_7745c5c3_Err
4166 }4273 }
4167- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 383, "</p>")4274+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 393, "</p>")
4168 if templ_7745c5c3_Err != nil {4275 if templ_7745c5c3_Err != nil {
4169 return templ_7745c5c3_Err4276 return templ_7745c5c3_Err
4170 }4277 }
4171 }4278 }
4172- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 384, "</div>")4279+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 394, "</div>")
4173 if templ_7745c5c3_Err != nil {4280 if templ_7745c5c3_Err != nil {
4174 return templ_7745c5c3_Err4281 return templ_7745c5c3_Err
4175 }4282 }
@@ -4194,38 +4301,38 @@ func MRActionStatus(message, href string) templ.Component {
4194 }()4301 }()
4195 }4302 }
4196 ctx = templ.InitializeContext(ctx)4303 ctx = templ.InitializeContext(ctx)
4197- templ_7745c5c3_Var200 := templ.GetChildren(ctx)4304+ templ_7745c5c3_Var207 := templ.GetChildren(ctx)
4198- if templ_7745c5c3_Var200 == nil {4305+ if templ_7745c5c3_Var207 == nil {
4199- templ_7745c5c3_Var200 = templ.NopComponent4306+ templ_7745c5c3_Var207 = templ.NopComponent
4200 }4307 }
4201 ctx = templ.ClearChildren(ctx)4308 ctx = templ.ClearChildren(ctx)
4202- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 385, "<div id=\"mr-actions\" class=\"mr-acts\" hx-swap-oob=\"true\"><p class=\"d-err\" role=\"alert\">")4309+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 395, "<div id=\"mr-actions\" class=\"mr-acts\" hx-swap-oob=\"true\"><p class=\"d-err\" role=\"alert\">")
4203 if templ_7745c5c3_Err != nil {4310 if templ_7745c5c3_Err != nil {
4204 return templ_7745c5c3_Err4311 return templ_7745c5c3_Err
4205 }4312 }
4206- var templ_7745c5c3_Var201 string4313+ var templ_7745c5c3_Var208 string
4207- templ_7745c5c3_Var201, templ_7745c5c3_Err = templ.JoinStringErrs(message)4314+ templ_7745c5c3_Var208, templ_7745c5c3_Err = templ.JoinStringErrs(message)
4208 if templ_7745c5c3_Err != nil {4315 if templ_7745c5c3_Err != nil {
4209- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 812, Col: 40}4316+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 826, Col: 41}
4210 }4317 }
4211- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var201))4318+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var208))
4212 if templ_7745c5c3_Err != nil {4319 if templ_7745c5c3_Err != nil {
4213 return templ_7745c5c3_Err4320 return templ_7745c5c3_Err
4214 }4321 }
4215- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 386, " <a href=\"")4322+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 396, " <a href=\"")
4216 if templ_7745c5c3_Err != nil {4323 if templ_7745c5c3_Err != nil {
4217 return templ_7745c5c3_Err4324 return templ_7745c5c3_Err
4218 }4325 }
4219- var templ_7745c5c3_Var202 templ.SafeURL4326+ var templ_7745c5c3_Var209 templ.SafeURL
4220- templ_7745c5c3_Var202, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))4327+ templ_7745c5c3_Var209, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
4221 if templ_7745c5c3_Err != nil {4328 if templ_7745c5c3_Err != nil {
4222- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 812, Col: 72}4329+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 826, Col: 73}
4223 }4330 }
4224- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var202))4331+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var209))
4225 if templ_7745c5c3_Err != nil {4332 if templ_7745c5c3_Err != nil {
4226 return templ_7745c5c3_Err4333 return templ_7745c5c3_Err
4227 }4334 }
4228- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 387, "\">reload</a></p></div>")4335+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 397, "\">reload</a></p></div>")
4229 if templ_7745c5c3_Err != nil {4336 if templ_7745c5c3_Err != nil {
4230 return templ_7745c5c3_Err4337 return templ_7745c5c3_Err
4231 }4338 }
M internal/adapters/web/mr_test.go +35 -0
@@ -332,3 +332,38 @@ func TestMergeIgnoreChecks(t *testing.T) {
332332 assert.Equal(t, mrHref("demo", 3), to)
333333 }
334334 }
335+
336+func TestMRLinkedIssuesAndHistory(t *testing.T) {
337+ t.Parallel()
338+ r := newIssueRig(t, domain.IssuesOwner, false)
339+ at := time.Date(2026, 1, 2, 12, 0, 0, 123, time.UTC)
340+ title, err := domain.ParseIssueTitle("Fix <login>")
341+ require.NoError(t, err)
342+ text, err := domain.ParsePlainText("between issue events")
343+ require.NoError(t, err)
344+ r.mrs.EXPECT().Get(mock.Anything, mock.Anything, repoName(t, "proj"), int64(12), mock.Anything).Return(ports.MergeRequestDetail{
345+ MergeRequest: domain.MergeRequest{Repo: repoName(t, "proj"), Number: 12, State: domain.MRStateMerged, Source: "feature", Target: "main"},
346+ Issues: []ports.MergeRequestIssue{{Number: 3, Title: title, State: domain.IssueStateResolved, Closes: true}, {Number: 4, Title: title, State: domain.IssueStateOpen}},
347+ Comments: []domain.Comment{{ID: 7, Author: "owner", Text: text, CreatedAt: at}},
348+ IssueEvents: []ports.IssueEventDetail{
349+ {Event: domain.IssueEvent{ID: 1, Issue: 3, Kind: domain.IssueEventReferenced, Actor: "owner", CreatedAt: at.Add(-time.Second)}},
350+ {Event: domain.IssueEvent{ID: 2, Issue: 3, Kind: domain.IssueEventReferenced, Closes: true, Actor: "owner", CreatedAt: at}},
351+ {Event: domain.IssueEvent{ID: 3, Issue: 3, Kind: domain.IssueEventResolved, Actor: "owner", CreatedAt: at.Add(time.Second)}},
352+ {Event: domain.IssueEvent{ID: 1, Issue: 9, Kind: domain.IssueEventReferenced, Actor: "owner", CreatedAt: at.Add(2 * time.Second)}},
353+ },
354+ }, nil)
355+ rec := r.do("GET", "/proj/merge-requests/12", false, nil)
356+ require.Equal(t, 200, rec.Code, rec.Body.String())
357+ body := rec.Body.String()
358+ assert.Contains(t, body, `id="r-issues">Issues`)
359+ assert.Contains(t, body, `href="/proj/issues/3">#3 Fix &lt;login&gt;</a>`)
360+ assert.Contains(t, body, `data-state="resolved"`)
361+ assert.Contains(t, body, " · resolves")
362+ assert.Contains(t, body, "owner referenced")
363+ assert.Contains(t, body, "owner will resolve")
364+ assert.Contains(t, body, "owner resolved")
365+ assert.Contains(t, body, `href="/proj/issues/9">#9</a>`, "removed links keep their history")
366+ assert.Less(t, strings.Index(body, `id="e3-1"`), strings.Index(body, `id="c7"`))
367+ assert.Less(t, strings.Index(body, `id="c7"`), strings.Index(body, `id="e3-2"`))
368+ assert.Less(t, strings.Index(body, `id="e3-2"`), strings.Index(body, `id="e3-3"`))
369+}
@@ -332,3 +332,38 @@ func TestMergeIgnoreChecks(t *testing.T) {
332 assert.Equal(t, mrHref("demo", 3), to)332 assert.Equal(t, mrHref("demo", 3), to)
333 }333 }
334 }334 }
335+
336+func TestMRLinkedIssuesAndHistory(t *testing.T) {
337+ t.Parallel()
338+ r := newIssueRig(t, domain.IssuesOwner, false)
339+ at := time.Date(2026, 1, 2, 12, 0, 0, 123, time.UTC)
340+ title, err := domain.ParseIssueTitle("Fix <login>")
341+ require.NoError(t, err)
342+ text, err := domain.ParsePlainText("between issue events")
343+ require.NoError(t, err)
344+ r.mrs.EXPECT().Get(mock.Anything, mock.Anything, repoName(t, "proj"), int64(12), mock.Anything).Return(ports.MergeRequestDetail{
345+ MergeRequest: domain.MergeRequest{Repo: repoName(t, "proj"), Number: 12, State: domain.MRStateMerged, Source: "feature", Target: "main"},
346+ Issues: []ports.MergeRequestIssue{{Number: 3, Title: title, State: domain.IssueStateResolved, Closes: true}, {Number: 4, Title: title, State: domain.IssueStateOpen}},
347+ Comments: []domain.Comment{{ID: 7, Author: "owner", Text: text, CreatedAt: at}},
348+ IssueEvents: []ports.IssueEventDetail{
349+ {Event: domain.IssueEvent{ID: 1, Issue: 3, Kind: domain.IssueEventReferenced, Actor: "owner", CreatedAt: at.Add(-time.Second)}},
350+ {Event: domain.IssueEvent{ID: 2, Issue: 3, Kind: domain.IssueEventReferenced, Closes: true, Actor: "owner", CreatedAt: at}},
351+ {Event: domain.IssueEvent{ID: 3, Issue: 3, Kind: domain.IssueEventResolved, Actor: "owner", CreatedAt: at.Add(time.Second)}},
352+ {Event: domain.IssueEvent{ID: 1, Issue: 9, Kind: domain.IssueEventReferenced, Actor: "owner", CreatedAt: at.Add(2 * time.Second)}},
353+ },
354+ }, nil)
355+ rec := r.do("GET", "/proj/merge-requests/12", false, nil)
356+ require.Equal(t, 200, rec.Code, rec.Body.String())
357+ body := rec.Body.String()
358+ assert.Contains(t, body, `id="r-issues">Issues`)
359+ assert.Contains(t, body, `href="/proj/issues/3">#3 Fix &lt;login&gt;</a>`)
360+ assert.Contains(t, body, `data-state="resolved"`)
361+ assert.Contains(t, body, " · resolves")
362+ assert.Contains(t, body, "owner referenced")
363+ assert.Contains(t, body, "owner will resolve")
364+ assert.Contains(t, body, "owner resolved")
365+ assert.Contains(t, body, `href="/proj/issues/9">#9</a>`, "removed links keep their history")
366+ assert.Less(t, strings.Index(body, `id="e3-1"`), strings.Index(body, `id="c7"`))
367+ assert.Less(t, strings.Index(body, `id="c7"`), strings.Index(body, `id="e3-2"`))
368+ assert.Less(t, strings.Index(body, `id="e3-2"`), strings.Index(body, `id="e3-3"`))
369+}
M internal/adapters/web/static/css/60-mr.css +16 -0
@@ -1,4 +1,12 @@
11 @layer components {
2+ .timeline { list-style: none; padding: 0; margin: 0; }
3+ .sys { margin-block: var(--s3); padding: var(--s2) var(--s3); border-left: 2px solid var(--border); color: var(--ink-dim); font-size: var(--fs-s); overflow-wrap: anywhere; }
4+ .sys-icon { margin-inline-end: var(--s2); }
5+ .sys[data-kind="resolved"] .sys-icon { color: var(--teal); }
6+ .sys[data-kind="closed"] .sys-icon { color: var(--red); }
7+ .mr-state[data-state="resolved"]::before { content: "✓ "; color: var(--teal); }
8+ .mrs tr[data-state="resolved"] .c-state::before { content: "✓ "; color: var(--teal); }
9+
210 /* merge requests: the review page. Hue only where it carries a verdict. */
311 .mr-h .show-kv { margin-top: 0; }
412 #merge-menu .htmx-indicator { display: none; }
@@ -281,6 +289,14 @@
281289 }
282290
283291 @layer components {
292+ .timeline { list-style: none; padding: 0; margin: 0; }
293+ .sys { margin-block: var(--s3); padding: var(--s2) var(--s3); border-left: 2px solid var(--border); color: var(--ink-dim); font-size: var(--fs-s); overflow-wrap: anywhere; }
294+ .sys-icon { margin-inline-end: var(--s2); }
295+ .sys[data-kind="resolved"] .sys-icon { color: var(--teal); }
296+ .sys[data-kind="closed"] .sys-icon { color: var(--red); }
297+ .mr-state[data-state="resolved"]::before { content: "✓ "; color: var(--teal); }
298+ .mrs tr[data-state="resolved"] .c-state::before { content: "✓ "; color: var(--teal); }
299+
284300 .c-body { white-space: normal; overflow-wrap: anywhere; }
285301 .c-body.prose > * { margin-block: .5em; }
286302 .c-body .ref { font-variant-numeric: tabular-nums; text-decoration: underline; }
@@ -1,4 +1,12 @@
1 @layer components {1 @layer components {
2+ .timeline { list-style: none; padding: 0; margin: 0; }
3+ .sys { margin-block: var(--s3); padding: var(--s2) var(--s3); border-left: 2px solid var(--border); color: var(--ink-dim); font-size: var(--fs-s); overflow-wrap: anywhere; }
4+ .sys-icon { margin-inline-end: var(--s2); }
5+ .sys[data-kind="resolved"] .sys-icon { color: var(--teal); }
6+ .sys[data-kind="closed"] .sys-icon { color: var(--red); }
7+ .mr-state[data-state="resolved"]::before { content: "✓ "; color: var(--teal); }
8+ .mrs tr[data-state="resolved"] .c-state::before { content: "✓ "; color: var(--teal); }
9+
2 /* merge requests: the review page. Hue only where it carries a verdict. */10 /* merge requests: the review page. Hue only where it carries a verdict. */
3 .mr-h .show-kv { margin-top: 0; }11 .mr-h .show-kv { margin-top: 0; }
4 #merge-menu .htmx-indicator { display: none; }12 #merge-menu .htmx-indicator { display: none; }
@@ -281,6 +289,14 @@
281 }289 }
282 290
283 @layer components {291 @layer components {
292+ .timeline { list-style: none; padding: 0; margin: 0; }
293+ .sys { margin-block: var(--s3); padding: var(--s2) var(--s3); border-left: 2px solid var(--border); color: var(--ink-dim); font-size: var(--fs-s); overflow-wrap: anywhere; }
294+ .sys-icon { margin-inline-end: var(--s2); }
295+ .sys[data-kind="resolved"] .sys-icon { color: var(--teal); }
296+ .sys[data-kind="closed"] .sys-icon { color: var(--red); }
297+ .mr-state[data-state="resolved"]::before { content: "✓ "; color: var(--teal); }
298+ .mrs tr[data-state="resolved"] .c-state::before { content: "✓ "; color: var(--teal); }
299+
284 .c-body { white-space: normal; overflow-wrap: anywhere; }300 .c-body { white-space: normal; overflow-wrap: anywhere; }
285 .c-body.prose > * { margin-block: .5em; }301 .c-body.prose > * { margin-block: .5em; }
286 .c-body .ref { font-variant-numeric: tabular-nums; text-decoration: underline; }302 .c-body .ref { font-variant-numeric: tabular-nums; text-decoration: underline; }

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 4

Tags 45

↑↓ moveenter openesc close