from pathlib import Path
p=Path('/opt/struktur/social-media-agent/templates/cockpit.html'); s=p.read_text()
# expose server-computed relevance fields
old=''' ps: {{(s.publish_status or "")|tojson}}'''
new=''' ps: {{(s.publish_status or "")|tojson}},
mas_relevant: {{(s.mas_relevant or 0)|int}},
mas_anchor: {{(s.mas_anchor or "")|tojson}},
mas_reason: {{(s.mas_relevance_reason or "")|tojson}},
content_blocked: {{(s.content_blocked or 0)|int}},
content_block_reason: {{(s.content_block_reason or "")|tojson}}'''
assert s.count(old)==1; s=s.replace(old,new)
# Replace mal text function
old='''function malText(m) {
const v = parseInt(m)||0;
if (v>=25) return 'Direkter MAS-Bezug — hohes Content-Potential';
if (v>=15) return 'Klarer Mallorca-Bezug für MAS nutzbar';
if (v>=5) return 'Schwacher Mallorca-Bezug vorhanden';
return 'Geringer direkter Bezug zu MAS';
}'''
new='''function malText(m, s) {
if (s && !s.mas_relevant) return s.content_blocked ? 'Nicht für MAS-Content geeignet: sensibles/fachfremdes Ereignis' : 'Kein fachlicher MAS-Bezug — nur allgemeines Mallorca-Radarsignal';
const v = parseInt(m)||0;
if (v>=25) return 'Direkter MAS-Bezug — hohes Content-Potential';
if (v>=15) return 'Klarer Mallorca-Bezug für MAS nutzbar';
if (v>=5) return 'Schwacher Mallorca-Bezug vorhanden';
return 'Geringer direkter Bezug zu MAS';
}'''
assert s.count(old)==1; s=s.replace(old,new)
# Gate client-generated helpers
s=s.replace('''function platReason(plat, s) {
const reasons = {''','''function platReason(plat, s) {
if (s && !s.mas_relevant) return '';
const reasons = {''')
s=s.replace('''function hookSuggestions(s) {
const hooks = {''','''function hookSuggestions(s) {
if (s && !s.mas_relevant) return [];
const hooks = {''')
s=s.replace('''function contentIdea(s) {
const ideas = {''','''function contentIdea(s) {
if (s && !s.mas_relevant) return [];
const ideas = {''')
s=s.replace('''function ctaSuggestion(s) {
const ctas = {''','''function ctaSuggestion(s) {
if (s && !s.mas_relevant) return '';
const ctas = {''')
# Director only for relevant
s=s.replace(''' if (s.dir_score > 0) {''',''' if (s.mas_relevant && s.dir_score > 0) {''')
# cases only relevant
s=s.replace(''' if (s.cases) {''',''' if (s.mas_relevant && s.cases) {''')
# actions: add irrelevant branch
old=''' const acts = s.comp ? `'''
new=''' const acts = !s.mas_relevant ? `<div style="background:rgba(100,116,139,.08);border-left:3px solid #64748b;border-radius:6px;padding:10px 12px;color:#94a3b8;">${s.content_blocked ? 'Nicht für MAS-Content geeignet: sensibles/fachfremdes Ereignis' : 'Kein fachlicher MAS-Bezug. Allgemeines Radarsignal — keine Content-Aktion.'}</div>` : s.comp ? `'''
assert s.count(old)==1; s=s.replace(old,new)
# recommended action has no false action when irrelevant because acts branch; warum reason call
s=s.replace('''${x(malText(s.mal))}''','''${x(malText(s.mal, s))}${s.mas_relevant && s.mas_reason ? `<div style="margin-top:4px;color:#8096a8;">${x(s.mas_reason)}</div>` : ''}''')
p.write_text(s); print('cockpit client relevance guards added')