Skip to content

[blogger-20260719] jadwal-aamal-ijtimaa-ar: real .docx template + post-outcomes.json hygiene - #133

Merged
Smetools merged 2 commits into
mainfrom
hassan/blogger-20260719
Jul 19, 2026
Merged

[blogger-20260719] jadwal-aamal-ijtimaa-ar: real .docx template + post-outcomes.json hygiene#133
Smetools merged 2 commits into
mainfrom
hassan/blogger-20260719

Conversation

@Smetools

Copy link
Copy Markdown
Collaborator

What

  1. Content refresh: jadwal-aamal-ijtimaa-ar (agenda spoke, published 2026-07-06) still used an inline fenced-code-block "template" — a standing-rule violation of the 2026-07-08 STEERING decision (templates must be a real downloadable .docx, tracked via PostHog/gtag, never inline prose). Converted to a real RTL .docx via scripts/gen-template-docx.py --rtl, same proven pattern as namuthaj-mahdar-ijtimaa-ar (PR [publish-script-template-download] fix dropped frontmatter + add namuthaj AR template #125). No component changes needed — template-download.tsx already handles the frontmatter fields.
  2. Data hygiene (growth-manager dispatch, 2026-07-19): deduped post-outcomes.json's one entry with duplicate JSON keys (leftover from PR [blogger-refresh] expand knowcap-vs-read-ai-otter-fireflies MENA comparison #112's refresh) and added a dated clarifying note on total_nonbrand_clicks_28d.

Why no net-new page this run

Self-cannibalization check (live DataForSEO, today):

  • AR محضر cluster still saturated (matches 2026-07-13 finding).
  • "AI meeting transcription" AR terms (تفريغ اجتماع, تلخيص اجتماع بالذكاء الاصطناعي, etc.) — zero measurable KSA search volume.
  • "جدول أعمال اجتماع جاهز" (20/mo) and "محاور اجتماع" (50/mo) — too thin to clear the volume gate.

This refresh was the best-evidenced move available. Does not touch namuthaj (cooling off from its own 07-13 refresh, next re-score 07-26) and creates no competing page.

Verify

  • YAML frontmatter parsed clean (PyYAML), 15 keys, matches namuthaj's proven schema exactly.
  • post-outcomes.json re-validated: json.load succeeds, posts array length (20) == summary.total_posts (20).
  • Generated .docx opened and spot-checked via python-docx (30 paragraphs, correct RTL Arabic content, correct headings/bullets).
  • Not run: next build (touches prisma db push against a live DB — skipped as inappropriate for a content-only change from this worktree). Change surface is a markdown frontmatter pair already proven working on 2 live posts + a static binary asset + a JSON data file with no build-time schema — build-break risk assessed as very low.

How to test

  1. Merge → auto-deploys.
  2. Open https://knowcap.ai/blog/jadwal-aamal-ijtimaa-ar
  3. Confirm the download card renders ("نموذج جدول أعمال اجتماع جاهز (.docx)") in place of the old code-fence block, and the download works.

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01BZyPPCQ2ErMpy6aiZ8NG8F

….docx

This post (published 2026-07-06, PR #117) predates the 2026-07-08 STEERING
rule banning inline code-fence "templates" -- it was never brought into
compliance. Converts the fenced-code-block agenda template into a real
downloadable RTL .docx (scripts/gen-template-docx.py --rtl), same pattern
already proven on namuthaj-mahdar-ijtimaa-ar (PR #125): wires
template_download_href/label frontmatter -> tracked download card
(PostHog + gtag via existing template-download.tsx, no component changes
needed). Targets the DOWNLOAD-intent share of "جدول أعمال اجتماع جاهز"
(confirmed 20 vol/mo, DataForSEO live pull today) that prose alone can't
win, per opportunity-queue.json's own seo_winners note on template intent.

Self-cannibalization check run first (live DataForSEO, 2026-07-19): the AR
محضر cluster is still saturated (matches the 2026-07-13 finding); the
adjacent "AI meeting transcription" AR terms (تفريغ اجتماع, تلخيص اجتماع
بالذكاء الاصطناعي, etc.) have zero measurable KSA search volume; "جدول
أعمال اجتماع جاهز" (20/mo) and "محاور اجتماع" (50/mo) are both too thin to
clear the volume gate as net-new pages. No net-new page shipped this run --
this refresh was the best-evidenced move. Does not touch namuthaj (still
cooling off from its own 2026-07-13 refresh, PR #129; next re-score
2026-07-26) and does not create a competing page.

Also: post-outcomes.json data hygiene (dispatched task, growth-manager
run 2026-07-19) -- deduped the knowcap-vs-read-ai-otter-fireflies entry's
duplicate impressions_28d/avg_pos_28d JSON keys (leftover from PR #112's
refresh diff; last-value-wins already resolved to the correct post-refresh
177/10.1, this just removes the malformed duplicate-key structure that
likely tripped up at least one external entry-count tool this run) and
added a dated note clarifying total_nonbrand_clicks_28d: 0 is correct as
of last_verified_at (not stale) -- the one confirmed win's 28d re-score
isn't due until 2026-07-26. Independently re-verified: posts array length
(20) already equals summary.total_posts (20); no entries are missing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BZyPPCQ2ErMpy6aiZ8NG8F
@vercel

vercel Bot commented Jul 19, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
knowcap-landing Ready Ready Preview, Comment Jul 19, 2026 11:18am

Request Review

@coderabbitai

coderabbitai Bot commented Jul 19, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@Smetools, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 59 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 5e0ef14b-4e49-4166-99e9-1bab072eda6c

📥 Commits

Reviewing files that changed from the base of the PR and between 6b38b68 and fd87c4a.

⛔ Files ignored due to path filters (1)
  • app/public/downloads/jadwal-aamal-ijtimaa-template.docx is excluded by !**/*.docx
📒 Files selected for processing (2)
  • app/content/blog/jadwal-aamal-ijtimaa-ar.md
  • routines/blogger/post-outcomes.json
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch hassan/blogger-20260719

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Smetools
Smetools merged commit b0d894e into main Jul 19, 2026
3 checks passed
Smetools added a commit that referenced this pull request Aug 4, 2026
…inner for رسمي/جاهز long-tails (#145)

* [growth-manager/blogger][blogger-20260804] strengthen namuthaj for رسمي/جاهز long-tails

Two consecutive empty blogger windows were caused by the seo worker's
content-brief generator mislabeling US search volume as MENA (found
2026-07-22). This run re-verifies every محضر اجتماع family candidate live
via DataForSEO with explicit Saudi Arabia/Egypt/UAE location targeting
before picking anything, per Hassan's 2026-07-22 STEERING direction.

Real MENA numbers (location queried alongside each):
- نموذج محضر اجتماع رسمي word: SA 390 / EG 170 (clears the >=100 gate)
- نموذج محضر اجتماع جاهز: SA 210 / EG 110 (clears the gate)
- نموذج محضر اجتماع مجلس إدارة: SA 70 / EG 70 (under gate)
- نموذج محضر اجتماع لجنة: SA 70 / EG 70 (under gate)
- محضر جلسة: SA 20 / EG 40 / UAE 10 (under gate)
- كيفية كتابة محضر اجتماع مجلس إدارة: 10/10/10 (under gate)
- نموذج محضر اجتماع حكومي: 20/10 (under gate)
- محضر اجتماع قصير وسهل: 70/40 (under gate, already known saturated 07-13)
- محضر لجنة تدقيق / محضر اجتماع لجنة التدقيق: no measurable volume

Cannibalization check (live serp_organic_live_advanced, KSA/ar): the only
two candidates that clear the volume gate are BOTH already won by
namuthaj-mahdar-ijtimaa-ar -- organic page-1 for "نموذج محضر اجتماع رسمي
word" (rank_absolute 7) and "نموذج محضر اجتماع جاهز" (rank_absolute 6),
just behind Canva/WHO/uqu.edu.sa authority giants, not yet #1. Every other
variant fails the >=100 volume gate this pipeline enforces.

No net-new page shipped -- this refresh deepens the confirmed winner
instead, on demand it's already partially capturing:
- New H2 "الفرق بين محضر اجتماع رسمي ونموذج جاهز للتحميل" (~150 words,
  exact-phrase-matches both newly-verified queries).
- New FAQ sweeping the مجلس إدارة/لجنة sub-100-vol variants into the hub
  page instead of fragmenting authority onto weak standalone pages.

Verified against PR #129's actual diff this doesn't duplicate the prior
refresh (which targeted احترافي/قصير وسهل, different long-tails).

Flagged, not fixed (outside content lane): app/lib/blog.ts:235 extractFaqs()
requires heading "FAQ"/"الأسئلة الشائعة" for FAQPage schema; both namuthaj
and jadwal use "## أسئلة شائعة" (no ال) and don't match -- FAQPage JSON-LD
has likely never fired on either page. Recommend /bug-creator.

Codex fact-flag pass attempted, timed out after 2 min -- manually reviewed:
no new statistics/factual claims added, only standard KSA board-governance
process guidance (quorum, session numbering, vote record) consistent with
the page's existing voice.

Odoo: n/a (content refresh, no ticket -- ticket-gate exempts content-only
blog PRs per existing precedent, e.g. PR #133/#117)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* chore(blogger): record refresh_pr URL for namuthaj-mahdar-ijtimaa-ar

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant