auto-sync-0145

This commit is contained in:
opus
2026-04-17 01:45:02 +02:00
parent 03049c3dde
commit b2350bd71d
4 changed files with 131 additions and 7 deletions

File diff suppressed because one or more lines are too long

View File

@@ -411,15 +411,23 @@ Fichiers:
foreach ($files as $f) {
$name = basename($f);
if ($name === "00-README.md") continue;
$firstLine = trim(explode("\n", file_get_contents($f))[0]);
$firstLine = trim(explode("
", file_get_contents($f))[0]);
$list[] = "- " . $name . " :: " . substr($firstLine, 0, 80);
}
sort($list);
$out = "POSTS VAGUE 2 (DRAFT pending Yacine validation):\n";
$out .= implode("\n", $list) . "\n\n";
$out .= "Total: " . count($list) . " posts\n";
$out .= "Path: $dir\n";
$out .= "Status: indexed in Qdrant wevia_kb_768 (ids 70100-70106)\n";
$out = "POSTS VAGUE 2 (DRAFT pending Yacine validation):
";
$out .= implode("
", $list) . "
";
$out .= "Total: " . count($list) . " posts
";
$out .= "Path: $dir
";
$out .= "Status: indexed in Qdrant wevia_kb_768 (ids 70100-70106)
";
$out .= "Action: review + validate + schedule publication";
return ["provider"=>"opus46", "content"=>$out, "tool"=>"posts_v2"];
}
@@ -434,7 +442,52 @@ Fichiers:
return ["provider"=>"opus46", "content"=>"POST $num: not found. Available: " . implode(",", array_map("basename", glob($dir."*.md"))), "tool"=>"show_post"];
}
$content = file_get_contents($files[0]);
return ["provider"=>"opus46", "content"=>"POST " . basename($files[0]) . ":\n\n" . $content, "tool"=>"show_post"];
return ["provider"=>"opus46", "content"=>"POST " . basename($files[0]) . ":
" . $content, "tool"=>"show_post"];
}
// INTENT: wave3_calendar (Vague 3 - 22 semaines, 6 campagnes) - wired 2026-04-17
if (preg_match("/(vague|wave)\s*3|calendrier.*(lin|campagne)|editorial.*calendar|campagne.*post|plan.*editorial/iu", $m)) {
$calFile = "/opt/weval-l99/audits/posts-v3/calendar.json";
if (!file_exists($calFile)) {
return ["provider"=>"opus46", "content"=>"CALENDAR: not found", "tool"=>"wave3_calendar"];
}
$cal = json_decode(file_get_contents($calFile), true);
$out = "VAGUE 3 CALENDAR (22 semaines, " . count($cal["campaigns"]) . " campagnes, " . $cal["total_posts"] . " posts)\n\n";
$out .= "Cadence: " . $cal["cadence"]["total_per_week"] . " posts/semaine (" . $cal["cadence"]["corporate_per_week"] . " corp + " . $cal["cadence"]["life_science_per_week"] . " LS)\n\n";
foreach ($cal["campaigns"] as $c) {
$out .= "---\n";
$out .= "[" . $c["id"] . "] " . $c["title"] . " | " . $c["account"] . " | " . $c["weeks"] . "\n";
$out .= " Theme: " . $c["theme"] . "\n";
foreach ($c["posts"] as $p) {
$out .= " - " . $p["id"] . " (" . $p["week"] . ") [" . $p["angle"] . "]\n";
}
}
$out .= "\nFooter: " . $cal["tagline_systematic_footer"];
return ["provider"=>"opus46", "content"=>$out, "tool"=>"wave3_calendar"];
}
// INTENT: show_campaign (show 1 campaign detail)
if (preg_match("/(show|voir|detail|montre)\s+campaign\s+(\S+)|campaign\s+(\S+)\s+(detail|show)/iu", $m, $cm)) {
$cid = $cm[2] ?? $cm[3] ?? "";
$cal = @json_decode(@file_get_contents("/opt/weval-l99/audits/posts-v3/calendar.json"), true);
if (!$cal) return ["provider"=>"opus46", "content"=>"CAMPAIGN: calendar not found", "tool"=>"show_campaign"];
foreach ($cal["campaigns"] as $c) {
if (stripos($c["id"], $cid) !== false || stripos($c["title"], $cid) !== false) {
$out = "CAMPAIGN " . $c["id"] . " - " . $c["title"] . "\n";
$out .= "Account: " . $c["account"] . " | Weeks: " . $c["weeks"] . "\n";
$out .= "Theme: " . $c["theme"] . "\n\n";
foreach ($c["posts"] as $p) {
$out .= "[" . $p["id"] . "] (" . $p["week"] . ")\n";
$out .= " Angle: " . $p["angle"] . "\n";
$out .= " Seed: " . $p["body_seed"] . "\n\n";
}
return ["provider"=>"opus46", "content"=>$out, "tool"=>"show_campaign"];
}
}
return ["provider"=>"opus46", "content"=>"CAMPAIGN $cid: not found", "tool"=>"show_campaign"];
}

View File

@@ -0,0 +1,69 @@
<?php
// /linkedin-wave3-calendar.php — Vague 3 editorial calendar 22 semaines
header("Content-Type: text/html; charset=utf-8");
$cal = @json_decode(@file_get_contents("/opt/weval-l99/audits/posts-v3/calendar.json"), true);
if (!$cal) die("calendar not found");
$COLORS = ["life-science" => "#7EDAB5", "corporate" => "#1B6CA8", "corporate+life-science" => "linear-gradient(90deg,#1B6CA8,#7EDAB5)"];
?><!DOCTYPE html>
<html lang="fr"><head>
<meta charset="utf-8">
<title>WEVAL · Vague 3 — Calendrier éditorial LinkedIn 22 semaines</title>
<script src="/widgets/audit-banner.js" defer></script>
<style>
body{font-family:-apple-system,BlinkMacSystemFont,system-ui,sans-serif;background:#0a0a0f;color:#e8e8f0;margin:0;padding:2rem;max-width:1100px;margin:0 auto;line-height:1.55}
h1{font-size:2rem;background:linear-gradient(90deg,#1B6CA8,#7EDAB5);-webkit-background-clip:text;-webkit-text-fill-color:transparent;margin-bottom:.3rem}
.meta{color:#9090a8;font-size:.85rem;margin-bottom:2rem}
.stat{display:inline-block;background:#12132a;border:1px solid #2a2b4a;padding:10px 16px;border-radius:10px;margin:0 8px 8px 0}
.stat .v{color:#7EDAB5;font-weight:800;font-size:1.3rem;font-family:monospace}
.stat .l{color:#9090a8;font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;margin-top:2px}
.camp{background:#12132a;border:1px solid #2a2b4a;border-radius:12px;padding:1.5rem;margin-bottom:1.5rem;position:relative}
.camp-hdr{display:flex;gap:8px;margin-bottom:1rem;flex-wrap:wrap;align-items:center}
.camp-tag{font-family:monospace;font-size:.75rem;background:#1a1b3a;padding:3px 10px;border-radius:6px;color:#9090a8}
.camp-title{font-size:1.3rem;font-weight:800;margin-right:8px}
.camp-acc{font-size:.75rem;font-weight:700;padding:4px 12px;border-radius:20px;color:#0a0a0f;text-transform:uppercase;letter-spacing:.05em}
.camp-weeks{background:#2a2b4a;color:#e8e8f0;font-size:.75rem;padding:4px 12px;border-radius:20px;font-family:monospace;font-weight:700}
.camp-theme{color:#7EDAB5;font-size:.95rem;margin-bottom:1rem;font-style:italic}
.post{display:grid;grid-template-columns:90px 1fr 180px;gap:12px;padding:10px 14px;background:#0a0a0f;border-left:3px solid #7EDAB5;border-radius:6px;margin-bottom:6px;font-size:.9rem;align-items:center}
.post .week{color:#7EDAB5;font-family:monospace;font-weight:700;text-align:center;background:#12132a;padding:5px;border-radius:6px}
.post .angle{color:#9090a8;font-size:.8rem;text-align:right;font-family:monospace}
.post .seed{color:#e8e8f0}
.foot{margin-top:3rem;padding-top:1rem;border-top:1px solid #2a2b4a;color:#6565a0;font-size:.8rem}
.sig{font-style:italic;color:#7EDAB5}
</style></head><body>
<h1>Vague 3 · Calendrier éditorial LinkedIn</h1>
<div class="meta">Généré <?=htmlspecialchars($cal["generated_at"])?> · Source audit <?=htmlspecialchars($cal["source"])?></div>
<div style="margin-bottom:2rem">
<div class="stat"><div class="v"><?=$cal["total_campaigns"]?></div><div class="l">Campagnes</div></div>
<div class="stat"><div class="v"><?=$cal["total_posts"]?></div><div class="l">Posts</div></div>
<div class="stat"><div class="v"><?=$cal["duration_weeks"]?></div><div class="l">Semaines</div></div>
<div class="stat"><div class="v"><?=$cal["cadence"]["total_per_week"]?>/sem</div><div class="l">Cadence</div></div>
</div>
<?php foreach ($cal["campaigns"] as $c):
$bg = $COLORS[$c["account"]] ?? "#2a2b4a";
?>
<div class="camp">
<div class="camp-hdr">
<span class="camp-tag"><?=htmlspecialchars($c["id"])?></span>
<span class="camp-title"><?=htmlspecialchars($c["title"])?></span>
<span class="camp-acc" style="background:<?=$bg?>"><?=htmlspecialchars($c["account"])?></span>
<span class="camp-weeks"><?=htmlspecialchars($c["weeks"])?></span>
</div>
<div class="camp-theme">📎 <?=htmlspecialchars($c["theme"])?></div>
<?php foreach ($c["posts"] as $p): ?>
<div class="post">
<div class="week"><?=htmlspecialchars($p["week"])?></div>
<div class="seed"><strong><?=htmlspecialchars($p["id"])?></strong><br><small><?=htmlspecialchars($p["body_seed"])?></small></div>
<div class="angle"><?=htmlspecialchars($p["angle"])?></div>
</div>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
<div class="foot">
<div class="sig"><?=htmlspecialchars($cal["tagline_systematic_footer"])?></div>
<div><?=htmlspecialchars($cal["hashtags_corporate"])?> (corp) · <?=htmlspecialchars($cal["hashtags_life_science"])?> (LS)</div>
<div style="margin-top:1rem"><a href="/linkedin-posts-wave2.php" style="color:#7EDAB5">← Posts V2 piliers</a> · <a href="/live-status.php" style="color:#7EDAB5">Live status</a> · <a href="/audits/AUDIT-LINKEDIN-ARCHI-2026-04-16.md" style="color:#7EDAB5">Audit complet</a></div>
</div>
</body></html>

View File

@@ -113,6 +113,7 @@ fetch('/api/ecosystem-health.php').then(r=>r.text().then(t=>{/* HTML_GUARD_V2_BA
<div class="card wiki-item" data-tags="opus46-20260416232245"><h2 style="border:0;margin:0;padding:0">AUDIT LINKEDIN+ARCHI deploye widget banner sur 3 pages + int</h2><div style="color:#94a3b8;font-size:10px;margin-top:6px">AUDIT LINKEDIN+ARCHI deploye widget banner sur 3 pages + intents WEVIA Master wired L99 304/304<br><span style="color:#06b6d4">[16/04 23:22]</span></div></div>
<div class="card wiki-item" data-tags="opus46-20260416233748"><h2 style="border:0;margin:0;padding:0">Wave 2 posts linkedin generes 6 piliers deployes preview pag</h2><div style="color:#94a3b8;font-size:10px;margin-top:6px">Wave 2 posts linkedin generes 6 piliers deployes preview page live<br><span style="color:#06b6d4">[16/04 23:37]</span></div></div>
<div class="card wiki-item" data-tags="opus46-20260416233936"><h2 style="border:0;margin:0;padding:0">VAGUE2-2026-04-17 : 6 posts piliers LinkedIn deployes + inde</h2><div style="color:#94a3b8;font-size:10px;margin-top:6px">VAGUE2-2026-04-17 : 6 posts piliers LinkedIn deployes + indexes Qdrant 70100-70106 + intents posts_v2/show_post wired + L99 304/304<br><span style="color:#06b6d4">[16/04 23:39]</span></div></div>
<div class="card wiki-item" data-tags="opus46-20260416234032"><h2 style="border:0;margin:0;padding:0">VAGUE2 2026-04-17: 6 pillar LinkedIn posts + posts_v2 intent</h2><div style="color:#94a3b8;font-size:10px;margin-top:6px">VAGUE2 2026-04-17: 6 pillar LinkedIn posts + posts_v2 intent wired + Qdrant 70100-70106 indexed + L99 304/304 unchanged<br><span style="color:#06b6d4">[16/04 23:40]</span></div></div>
</div>
<script>
(function(){