58845df312
Hot-fix for the public v3.0.6 0/8 regression (2026-04-18). Beta went 10/10 yesterday with the same LAW content; public went 0/8 today. The delta was three structural anchors the port had removed or weakened. Unit 1 - Restored MANDATORY first-line badge. Every public response now emits "🌐 last30days v{VERSION} · synced {YYYY-MM-DD}" as line 1, blank line, then "What I learned:" (GENERAL) or "# {TOPIC_A} vs {TOPIC_B}..." (COMPARISON). This is the LAW 2 / LAW 4 enforcement anchor that my v3.0.6 port accidentally stripped along with the beta-specific "🧪 last30days-beta" wording. Unit 2 - Pinned SKILL_ROOT to the public plugin cache via `ls -d ~/.claude/plugins/cache/last30days-skill/last30days/*/ | sort -V | tail -1`, with a small fallback for repo/Gemini/Codex hosts. Replaces the path-discovery loop that was landing on stale copies (~/.openclaw/, ~/.agents/, ~/.codex/) on machines with a private-repo sync history. Unit 3 - Added a "SKILL CONTRACT" preface at the top of SKILL.md that names the 0/8 regression as a documented failure mode and explicitly tells the model not to treat /last30days as a generic keyword. Encodes user theory that "/last30days-beta" sounded specific enough to trigger skill-follow mode while "/last30days" reads as a search term and triggers improvise mode. Validation: all three anchors visible in the grep check for public v3.0.7 cache. Next validation is manual re-run of the 8 failure topics on public after shipping. Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>