feat(campaign): govern attachment reuse

This commit is contained in:
2026-08-20 05:20:07 +02:00
parent f4fe534ee1
commit 112ef9dc31
16 changed files with 705 additions and 2 deletions
@@ -372,6 +372,10 @@
],
"default": "ask"
},
"reuse_policy": {
"$ref": "#/$defs/attachment_reuse_policy",
"description": "Controls whether resolving the same source file more than once is allowed, warned, reviewed, or blocked, with an optional same-recipient or same-message allowance."
},
"residual_files": {
"$ref": "#/$defs/residual_file_disposition"
}
@@ -1458,6 +1462,25 @@
},
"additionalProperties": false
},
"attachment_reuse_policy": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": ["allow", "warn", "review", "block"],
"default": "allow",
"description": "Action when one resolved source file is used more than once outside the configured allowance. Review creates an explicit, reasoned review decision."
},
"allow_within": {
"type": "string",
"enum": ["none", "same_recipient", "same_message"],
"default": "none",
"description": "Optional exception that permits reuse confined to one recipient or one built message."
}
},
"additionalProperties": false,
"default": {"action": "allow", "allow_within": "none"}
},
"residual_file_disposition": {
"type": "object",
"properties": {
@@ -61,6 +61,16 @@
}
],
"fields": {
"/attachments/reuse_policy/action": {
"label": "Duplicate-file action",
"control": "select",
"description": "Allow and record, warn, require a reasoned review decision, or block repeated use of the same resolved file."
},
"/attachments/reuse_policy/allow_within": {
"label": "Allowed reuse boundary",
"control": "select",
"description": "Optionally exempt reuse confined to one recipient or one built message."
},
"/attachments/global[]/message_filename_template": {
"label": "Direct attachment filename",
"control": "text",