Phase 6: rules editor + unsubscribe detection (AUD-72)
- FR-11 rules editor: plain-text area at /rules, saved and versioned (SaveRules appends a version; restore re-saves an old version), parse errors surfaced, one-click re-classify. The reply model now reads the rules document too (FR-11). - FR-7 unsubscribe: parse and store List-Unsubscribe / List-Unsubscribe-Post (migration v6), detect email and web links (internal/unsubscribe), a domain-level ignore list, and an explicit record of what was marked. No code path contacts an unsubscribe link; acting on one needs Sam's approval. - Migration v6 is additive; unsubscribe gains url/updated_at. - Tests: detector, parser, store migration/records/candidates, rules editor, unsubscribe handlers, message-detail rendering. Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
@@ -13,6 +13,18 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{if .UnsubLinks}}
|
||||
<section class="unsub-detected" aria-label="Unsubscribe">
|
||||
<h3>Unsubscribe</h3>
|
||||
{{if eq .UnsubStatus "ignored"}}<span class="pill">ignored</span>{{end}}
|
||||
{{if eq .UnsubStatus "done"}}<span class="pill">recorded</span>{{end}}
|
||||
<ul class="unsub-link-list">
|
||||
{{range .UnsubLinks}}<li><span class="pill">{{.Method}}</span> <span class="unsub-url">{{.URL}}</span></li>{{end}}
|
||||
</ul>
|
||||
<a class="btn btn-utility btn-small" href="/unsubscribe">Manage unsubscribe</a>
|
||||
</section>
|
||||
{{end}}
|
||||
|
||||
<details class="detail-original" open>
|
||||
<summary>Original message</summary>
|
||||
<pre class="detail-text">{{.Message.BodyText}}</pre>
|
||||
|
||||
Reference in New Issue
Block a user