Marker: oripagate-cron-request-v0169-pornfun560-gate-port-20260609
更新: 2026-06-09 21:18:28 JST / Pornfun 560型のcron運用をOripagate専用HUBへ移植し、キャンペーン情報用に最適化。
このページで扱う対象は https://oripagate.jp/campaign-invite-code/ の記事タイプだけ。AIfan、porn-fun、他サイトHUB、他カテゴリ記事は対象外。
2026-06-10 最適化方針: キャンペーン情報記事は通常記事として https://oripagate.jp/campaign-invite-code/ に入れる。https://oripagate.jp/campaign-code-dictionary/ は使わない。CRON名は OripaGate【通常記事・キャンペーン】収集 の形で統一する。
cronスレッド立ち上げ依頼文
OripaGate【通常記事・キャンペーン】cron専用スレッドを起動してください。
これはスレッド立ち上げ依頼文です。この文章を受けたスレッドは、スレッドを立ち上げ、対象と禁止事項を確認し、読了報告をして待機するだけです。
この立ち上げ文だけで、収集、検査、制作、高品質チェック、訂正、改善ハンドオフ、候補保存、Hub更新、WordPress更新、外部調査、cron automationの作成・登録・削除・時刻変更を始めてはいけません。
代表から別途、明示的に「確認して」「作業して」「cronを作成して」「収集して」などの次の指示が出た時だけ、その指示範囲で動いてください。確認依頼なら編集せず、作業指示なら触る対象と触らない対象を先に明記してください。
目的:
- 通常記事。招待コード、キャンペーン、クーポン、ポイント、特典の最新情報を書く。Directory Core記事ではない。投入先は https://oripagate.jp/campaign-invite-code/ に固定し、https://oripagate.jp/campaign-code-dictionary/ は使わない。投入先は https://oripagate.jp/campaign-invite-code/ に固定し、https://oripagate.jp/campaign-code-dictionary/ は使わない。投入先は https://oripagate.jp/campaign-invite-code/ に固定し、https://oripagate.jp/campaign-code-dictionary/ は使わない。投入先は https://oripagate.jp/campaign-invite-code/ に固定し、https://oripagate.jp/campaign-code-dictionary/ は使わない。投入先は https://oripagate.jp/campaign-invite-code/ に固定し、https://oripagate.jp/campaign-code-dictionary/ は使わない。投入先は https://oripagate.jp/campaign-invite-code/ に固定し、https://oripagate.jp/campaign-code-dictionary/ は使わない。投入先は https://oripagate.jp/campaign-invite-code/ に固定し、https://oripagate.jp/campaign-code-dictionary/ は使わない。投入先は https://oripagate.jp/campaign-invite-code/ に固定し、https://oripagate.jp/campaign-code-dictionary/ は使わない。投入先は https://oripagate.jp/campaign-invite-code/ に固定し、https://oripagate.jp/campaign-code-dictionary/ は使わない。投入先は https://oripagate.jp/campaign-invite-code/ に固定し、https://oripagate.jp/campaign-code-dictionary/ は使わない。
- https://oripagate.jp/campaign-invite-code/ だけを対象にする。
- Pornfun 560型の運用を継承し、収集・検査・制作・高品質チェック・訂正・改善ハンドオフの役割分離を守る。
- 必須Gateを緩めず、公開/preview HTML実測、validator_result.json、内部リンクlive 200、Q&A exact 5件以上を必須にする。
触る対象:
- cron作成時の対象は、このページ内の PROMPT_START から PROMPT_END までの本文。
## 検索cron・収集cron・検査cronの収集元範囲拡張Gate
Marker: `ORIPAGATE_CAMPAIGN_BROAD_COLLECTION_SOURCE_SCOPE_20260611`
検索cron、収集cron、検査cronは、公式TOP、公式キャンペーンページ、公式SNSだけを見て終わってはいけない。
Marker: `ORIPAGATE_CAMPAIGN_SEARCH_CRON_THIRD_PARTY_SCOPE_20260611`
検索cronは特に、公式以外の第三者作成ページを広く拾う。検索上位のアフィリエイトサイト、比較サイト、情報サイト、ブログ、まとめ記事、SNS投稿、検索結果スニペットにキャンペーン情報が出ている場合、それを候補発見元として必ず付箋する。キャンペーン情報の発見元は広く取る。検索上位に出るアフィリエイトサイト、比較サイト、情報サイト、ブログ、まとめ記事、SNS投稿、検索結果スニペット、キャンペーン名を引用している記事、招待コード・SMS認証・初回登録・ログインボーナス・ポイント還元・期間限定ガチャを扱うページも確認対象に含める。
検索cronが検索するときは、サービス名だけではなく、サービス名+招待コード、サービス名+キャンペーン、サービス名+SMS認証、サービス名+初回登録、サービス名+ログインボーナス、サービス名+ポイント還元、サービス名+イベント名、サービス名+ガチャ名、サービス名+評判、サービス名+特典で確認する。オリスタ、オリパスタジアム、GGM、DOPAなど、略称・カタカナ・英字表記の揺れも拾う。
第三者サイトで見つけた情報は、公式事実として断定しない。発見元URL、見えた文言、確認日、公式で再確認できたか、未確認点、制作での扱い方を付箋に残す。公式でも確認できた場合は公式根拠を優先する。公式で確認できない場合も、明らかな架空業者・架空キャンペーン・危険誘導でない限り、候補を落とさず「第三者情報では見えるが公式では未確認」として制作へ渡す。
検索上位のアフィリエイトサイトや情報サイトに、招待コード、SMS認証特典、初回登録特典、ログインボーナス、ポイント還元、期間限定イベント、限定ガチャの記載があるのに拾っていない場合は収集漏れである。公式だけ見て「情報なし」と判断した場合は必須FAILにする。
必須FAIL:
- `CAMPAIGN_BROAD_SOURCE_SEARCH_NOT_RUN`: 公式ページだけを見て、検索上位、アフィリエイトサイト、比較サイト、情報サイト、ブログ、SNS、検索結果スニペットを確認していない。
- `CAMPAIGN_SEARCH_CRON_THIRD_PARTY_SOURCES_MISSING`: 検索cronが公式以外の第三者作成サイトを検索・確認していない。
- `CAMPAIGN_SEARCH_CRON_TOP_RESULTS_TOO_NARROW`: 検索cronが公式サイト周辺だけで止まり、検索上位の比較サイト、アフィリエイトサイト、情報サイト、ブログ、SNS、検索結果スニペットを候補発見元として見ていない。
- `CAMPAIGN_AFFILIATE_INFO_SITE_CAMPAIGN_MISSED`: アフィリエイトサイトや情報サイトにキャンペーン情報が見えるのに候補化していない。
- `CAMPAIGN_THIRD_PARTY_SOURCE_NOTE_MISSING`: 第三者サイト由来の情報について、発見元URL、見えた文言、確認日、公式再確認状況、未確認点が付箋に無い。
- `CAMPAIGN_OFFICIAL_ONLY_NO_TARGET_FALSE_NEGATIVE`: 公式だけを見て対象なしにしたが、検索上位や第三者サイトに候補情報がある。
- Oripagate専用HUB: https://oripagate-hub.secure358.com/
- Oripagate公開カテゴリ: https://oripagate.jp/campaign-invite-code/
触らない対象:
- AIfan HUB、porn-fun HUB、Invest358、他サイトHUB。
- cron.goudou-358.jp の Oripagateカテゴリ外の記事。
- 代表が明示していない既公開記事本文。
起動時確認:
- api=status で Oripagate専用HUBが sites=1 / article_types=6 であることを確認。
- api=agent_pack&site_id=oripagate&workflow_id=oripagate-campaign-invite-code-ja を読み、最新Manual/Rules/Gates/Referencesを使う。
- 古い共有Gate、旧代表Gate、_codex_cron_threads\AGENTS.mdをcron本文の参照先にしない。
cron一式作成依頼文
OripaGate【通常記事・キャンペーン】cron一式を作成してください。
作成するcron:
- OripaGate【通常記事・キャンペーン】収集: 1回/日 / 推奨RRULEは固定しない。既存ACTIVE cron確認後に起動時間設定ルールで決める / model gpt-5.4
- OripaGate【通常記事・キャンペーン】検査: 4回/日 / 推奨RRULEは固定しない。既存ACTIVE cron確認後に起動時間設定ルールで決める / model gpt-5.5
- OripaGate【通常記事・キャンペーン】制作: 最大3回/日 / 推奨RRULEは固定しない。既存ACTIVE cron確認後に起動時間設定ルールで決める / model gpt-5.5
- OripaGate【通常記事・キャンペーン】高品質チェック: 最大5回/日 / 推奨RRULEは固定しない。既存ACTIVE cron確認後に起動時間設定ルールで決める / model gpt-5.5
- OripaGate【通常記事・キャンペーン】訂正: 1回/日 / 推奨RRULEは固定しない。既存ACTIVE cron確認後に起動時間設定ルールで決める / model gpt-5.4
- OripaGate【通常記事・キャンペーン】改善ハンドオフ: 週1回、または改善キュー発生時 / 推奨RRULEは固定しない。既存ACTIVE cron確認後に起動時間設定ルールで決める / model gpt-5.4
共通設定:
- kind: cron
- cwd: `C:\Users\Public\Documents\LLC358\_codex_cron_threads`
- 既存ACTIVE cronを確認し、同時刻と前後10分を避ける。
- 各cronのprompt本文は、このページの各個別作成依頼文にある `PROMPT_START` から `PROMPT_END` までをそのまま入れる。
- 必須Gateは外側説明だけでなく、各PROMPT本文内にも入っている。削らない。
個別cron作成依頼文
OripaGate【通常記事・キャンペーン】収集cron automation作成依頼文
PROMPT_START
# OripaGate【通常記事・キャンペーン】収集cron v0.1.76
- kind: cron
- cwd: `C:\Users\Public\Documents\LLC358\_codex_cron_threads`
- model: gpt-5.4
- reasoning: highest
- site_id: `oripagate`
- workflow_id: `oripagate-campaign-invite-code-ja`
- article_type: `campaign-invite-code`
- public_category_url: `https://oripagate.jp/campaign-invite-code/`
- do_not_use_url: `https://oripagate.jp/campaign-code-dictionary/`
- hub_url: `https://oripagate-hub.secure358.com/`
- role: 収集
- schedule intent: 1回/日
- recommended RRULE: 固定値は置かない。既存ACTIVE cronを確認し、起動時間設定ルールに従って決める。
役割目的: 公式キャンペーン、イベント、ボーナス、招待コード、クーポン、ポイント、特典の候補を1回1〜15件の範囲で発見し、候補在庫としてHubへ保存する。
## 絶対スコープ
- 対象は OripaGate専用HUB、OripaGate公開サイト、`campaign-invite-code` だけ。
- AIfan HUB、porn-fun HUB、Invest358、他サイトHUB、他記事タイプ、代表が指定していない公開記事は触らない。
- ローカル変更は `C:\Users\Public\Documents\LLC358\Autopost358\HUB\oripagate` 内だけ。
- cron実行cwdは `C:\Users\Public\Documents\LLC358\_codex_cron_threads`。正本・保存証跡はOripaGateサイトHUB内に残す。
- Gate/Manual参照先は `C:\Users\Public\Documents\LLC358\Autopost358\HUB\oripagate\gates\current` と `cron_prompts/current/campaign-invite-code` に統一する。
- 代表PC固有パス、共有Hub Gate、外部フォルダのfallback copyを参照先にしない。
- 手元キーは探す。キー値・認証値・秘密値をチャット、記事本文、Hubレコード、validator_resultに出力しない。
- 確認依頼では編集しない。作業指示の場合だけ、触る対象と触らない対象を先に明記して進める。
## 起動時に必ず確認するもの
- live Hub: `https://oripagate-hub.secure358.com/`
- `api=status` で live Hub が OripaGate専用であることを確認する。
- `api=agent_pack&site_id=oripagate&workflow_id=oripagate-campaign-invite-code-ja` を取得し、キャンペーン通常記事用の最新Rule/Manualだけを読む。
- `api=agent_work_queue` で自分のrole対象だけを確認する。対象なしなら対象なし報告をHubへ保存して終了する。
- 公開先は `https://oripagate.jp/campaign-invite-code/`。`https://oripagate.jp/campaign-code-dictionary/` は使わない。
## 起動時間設定ルール
- 既存ACTIVE cronを確認してから設定する。
- 同時刻と前後10分を避ける。
- 00分固定を避ける。
- 分は 07 / 13 / 19 / 26 / 34 / 41 / 48 / 55 を優先候補にする。
- 朝・昼・夕・夜へ分散する。
- 空けられない場合は5分間隔、1分間隔、最後は同時刻の順で詰める。混雑だけで作成停止しない。
## 収集だけの作業
## 公式以外の第三者サイトも含める収集元Gate
Marker: `ORIPAGATE_CAMPAIGN_INDIVIDUAL_PROMPT_BROAD_SOURCE_SCOPE_20260611`
- 公式TOP、公式キャンペーンページ、公式ニュース、公式SNSだけで判断してはいけない。
- 検索上位に出るアフィリエイトサイト、比較サイト、情報サイト、ブログ、まとめ記事、SNS投稿、検索結果スニペット、キャンペーン名を引用している記事も確認対象に含める。
- 招待コード、SMS認証、初回登録、ログインボーナス、ポイント還元、期間限定ガチャを扱う第三者作成ページも確認対象に含める。
- サービス名だけでなく、サービス名+招待コード、サービス名+キャンペーン、サービス名+SMS認証、サービス名+初回登録、サービス名+ログインボーナス、サービス名+ポイント還元、サービス名+イベント名、サービス名+ガチャ名、サービス名+評判、サービス名+特典で検索する。
- オリスタ、オリパスタジアム、GGM、DOPAなど、略称、カタカナ、英字表記の揺れも拾う。
- 第三者サイトで見つけた情報は公式事実として断定しない。発見元URL、見えた文言、確認日、公式で再確認できたか、未確認点、制作での扱い方を付箋に残す。
- 公式でも確認できた場合は公式根拠を優先する。
- 公式で確認できない場合も、明らかな架空業者、架空キャンペーン、危険誘導でない限り、候補を落とさず「第三者情報では見えるが公式では未確認」として次工程へ渡す。
- 検索上位のアフィリエイトサイトや情報サイトに、招待コード、SMS認証特典、初回登録特典、ログインボーナス、ポイント還元、期間限定イベント、限定ガチャの記載があるのに拾っていない場合は収集漏れである。
- 公式だけを見て「情報なし」「対象なし」と判断した場合は必須FAILにする。
- 収集cronは、第三者サイト由来の候補も、発見元URL、見えた文言、確認日、公式再確認状況、未確認点、次工程での扱い方を保存する。
- 検査cronは、第三者サイト由来の候補を公式事実として断定せず、公式再確認、未確認点、制作での注意書き、根拠URL、KW素材へ整理する。
- 必須FAIL: `CAMPAIGN_INDIVIDUAL_PROMPT_THIRD_PARTY_SEARCH_NOT_RUN`、`CAMPAIGN_AFFILIATE_INFO_SITE_CAMPAIGN_MISSED`、`CAMPAIGN_OFFICIAL_ONLY_NO_TARGET_FALSE_NEGATIVE`、`CAMPAIGN_THIRD_PARTY_SOURCE_NOTE_MISSING`、`CAMPAIGN_BROAD_SOURCE_SEARCH_NOT_RUN`、`CAMPAIGN_SEARCH_CRON_TOP_RESULTS_TOO_NARROW`
## 収集件数Gate
## 収集→検査queue接続Gate
Marker: `ORIPAGATE_CAMPAIGN_COLLECTION_INSPECTION_QUEUE_BRIDGE_20260610`
- 収集cronは、accepted候補をHub Filesに保存するだけで完了してはいけない。
- accepted候補ごとに、検査cronが `api=agent_work_queue&agent=CODEX&site_id=oripagate&workflow_id=oripagate-campaign-invite-code-ja` で読める検査用queue対象を作る。
- queue対象は `hub_table_upsert` で、Hubの正式なArticles/Tasks連携に載せる。Articlesに追加するとTasksがTaskTemplatesから自動生成される運用が使える場合は、campaign候補をArticlesへ追加し、task_codeは検査工程に進む値にする。
- queue対象には最低限、`site_id=oripagate`、`workflow_id=oripagate-campaign-invite-code-ja`、`article_type=campaign-invite-code`、`article_key`、`title`、`current_stage=inspection_pending`、`status=inspection_pending`、`next_action=campaign inspection handoff`、`task_code=1-A`、`task_name=キャンペーン開催状態・根拠確認`、`notes` に候補file_idと根拠URLを入れる。
- queue作成後、必ず `api=agent_work_queue&agent=CODEX&site_id=oripagate&workflow_id=oripagate-campaign-invite-code-ja` を再取得し、保存したaccepted候補が検査対象として見えることをreadbackする。
- Files保存件数とqueue readback件数が一致しない場合、完了と言わない。`CAMPAIGN_COLLECTION_QUEUE_HANDOFF_MISSING` を `failed_gate_names`、`required_gate_failures`、`quality_delta_items` に入れて修正する。
- 既存Filesに候補を保存しただけでqueueに出さないまま終了した場合は `CAMPAIGN_COLLECTION_FILES_ONLY_NO_QUEUE_HANDOFF` でFAIL。
- 件数証跡として `collection_files_saved_count`、`collection_queue_handoff_count`、`collection_queue_readback_count`、`collection_queue_missing_items` を保存する。
- 収集cronは1回につき、キャンペーン・イベント・ボーナス情報を1件から最大15件まで収集できる。
- 候補が16件以上見つかった場合は、重要度・開催中らしさ・根拠の強さで上位15件までを保存し、残りは次回候補としてメモする。一度に16件以上をHubのaccepted候補へ流し込まない。
- 収集対象が0件の場合だけ、検索した場所、検索語、確認日時、候補なし理由を保存して対象なし報告で終了する。
- 件数証跡として `collection_candidate_count`、`collection_batch_min=1`、`collection_batch_max=15`、`overflow_next_candidates` を残す。
- 16件以上を1回でaccepted候補として保存した場合は `CAMPAIGN_COLLECTION_BATCH_SIZE_OUT_OF_RANGE` でFAIL。
- 公式TOP、公式キャンペーンページ、公式ニュース、公式SNS、ASP案件、既存OripaGate関連記事、検索候補から候補を集める。
- 候補名、サービス名、公式URL候補、根拠URL、見える特典ラベル、期間らしき表記、収集元、重複疑い、不明点を保存する。
- 公式確定、事実評価、本文作成、公開記事更新、HTML測定までは行わない。
- 危険、明確な非公式、重複疑い、記事タイプ違いは accepted に混ぜず、除外理由または確認待ち理由を保存する。
- 収集だけでは読者向け本文、CTA、Q&A、装飾、公開/preview HTML確認を作らない。
## 保存と完了
- Hubへ候補在庫を保存し、readbackで自分が保存した候補が見えることを確認する。
- 完了報告には、保存件数、除外件数、主な収集元、未確認点、readback結果だけを書く。
- readbackできなければ完了と言わず、BLOCKED_HUB_WRITEBACK または BLOCKED_HUB_READBACK として残す。
PROMPT_END
OripaGate【通常記事・キャンペーン】検査cron automation作成依頼文
PROMPT_START
# OripaGate【通常記事・キャンペーン】検査cron v0.1.76
- kind: cron
- cwd: `C:\Users\Public\Documents\LLC358\_codex_cron_threads`
- model: gpt-5.4
- reasoning: highest
- site_id: `oripagate`
- workflow_id: `oripagate-campaign-invite-code-ja`
- article_type: `campaign-invite-code`
- public_category_url: `https://oripagate.jp/campaign-invite-code/`
- do_not_use_url: `https://oripagate.jp/campaign-code-dictionary/`
- hub_url: `https://oripagate-hub.secure358.com/`
- role: 検査
- schedule intent: 1回/日
- recommended RRULE: 固定値は置かない。既存ACTIVE cronを確認し、起動時間設定ルールに従って決める。
役割目的: 収集済み候補を確認し、現在開催中のキャンペーン・イベント・ボーナスだけを制作レディへ回し、それ以外は事実・未確認点・再確認理由を保存する。
## 絶対スコープ
- 対象は OripaGate専用HUB、OripaGate公開サイト、`campaign-invite-code` だけ。
- AIfan HUB、porn-fun HUB、Invest358、他サイトHUB、他記事タイプ、代表が指定していない公開記事は触らない。
- ローカル変更は `C:\Users\Public\Documents\LLC358\Autopost358\HUB\oripagate` 内だけ。
- cron実行cwdは `C:\Users\Public\Documents\LLC358\_codex_cron_threads`。正本・保存証跡はOripaGateサイトHUB内に残す。
- Gate/Manual参照先は `C:\Users\Public\Documents\LLC358\Autopost358\HUB\oripagate\gates\current` と `cron_prompts/current/campaign-invite-code` に統一する。
- 代表PC固有パス、共有Hub Gate、外部フォルダのfallback copyを参照先にしない。
- 手元キーは探す。キー値・認証値・秘密値をチャット、記事本文、Hubレコード、validator_resultに出力しない。
- 確認依頼では編集しない。作業指示の場合だけ、触る対象と触らない対象を先に明記して進める。
## 起動時に必ず確認するもの
- live Hub: `https://oripagate-hub.secure358.com/`
- `api=status` で live Hub が OripaGate専用であることを確認する。
- `api=agent_pack&site_id=oripagate&workflow_id=oripagate-campaign-invite-code-ja` を取得し、キャンペーン通常記事用の最新Rule/Manualだけを読む。
- `api=agent_work_queue` で自分のrole対象だけを確認する。対象なしなら対象なし報告をHubへ保存して終了する。
- 公開先は `https://oripagate.jp/campaign-invite-code/`。`https://oripagate.jp/campaign-code-dictionary/` は使わない。
## 起動時間設定ルール
- 既存ACTIVE cronを確認してから設定する。
- 同時刻と前後10分を避ける。
- 00分固定を避ける。
- 分は 07 / 13 / 19 / 26 / 34 / 41 / 48 / 55 を優先候補にする。
- 朝・昼・夕・夜へ分散する。
- 空けられない場合は5分間隔、1分間隔、最後は同時刻の順で詰める。混雑だけで作成停止しない。
## 検査だけの作業
## 開催中のみ制作レディGate
## 検査queue / Files fallback接続Gate
Marker: `ORIPAGATE_CAMPAIGN_COLLECTION_INSPECTION_QUEUE_BRIDGE_20260610`
- 検査cronは最初に `api=agent_work_queue&agent=CODEX&site_id=oripagate&workflow_id=oripagate-campaign-invite-code-ja` を読み、`article_type=campaign-invite-code` または campaign workflow に属する検査対象だけを扱う。
- `agent_work_queue` にキャンペーン検査対象が0件でも、すぐ対象なしで終了してはいけない。続けて `api=agent_pack&site_id=oripagate&workflow_id=oripagate-campaign-invite-code-ja` の `files` を確認し、`article_type=campaign-invite-code`、`workflow_id=oripagate-campaign-invite-code-ja`、`file_id` が `oripagate-campaign-` で始まる候補Filesを検査対象として拾う。
- campaign Filesが1件以上あるのに対象なしで終了した場合は `CAMPAIGN_INSPECTION_MISSED_FILE_CANDIDATES` でFAIL。
- Files fallbackで拾った候補は、検査前に候補file_id、候補名、根拠URL、確認状態をHubへ保存し、可能なら `hub_table_upsert` で検査queue対象へ補正する。補正できない場合でも検査を止めず、`CAMPAIGN_QUEUE_BRIDGE_BACKFILL_USED` を証跡に残して検査する。
- 検査が扱えるのは、queue対象とFiles fallback対象を合わせて1タスク1件から最大15件まで。16件以上ある場合は、現在開催中らしさ、根拠の強さ、期限の近さで上位15件を扱い、残りは次回候補として保存する。
- no-target報告を出せるのは、`agent_work_queue` と campaign Files fallback の両方が0件であることをreadbackした場合だけ。
- 必須証跡として `inspection_queue_item_count`、`inspection_campaign_file_fallback_count`、`inspection_target_total_count`、`inspection_no_target_allowed` を保存する。
## 検査から制作レディへ回せる件数Gate
- 検査cronが1タスクで制作レディへ回せる件数は、現在開催中と確認できたキャンペーン・イベント・ボーナス情報のうち1件から最大15件まで。
- 16件以上を同じ検査タスクで `production_ready=true` にしない。16件以上ある場合は、根拠の強さ、期限の近さ、読者への有用性で上位15件までを制作レディに回し、残りは次回検査候補として `recheck_required=true` または `next_inspection_candidate=true` で保存する。
- 現在開催中と確認できた候補が0件の場合は、`production_ready=true` を作らず、確認済み件数、開催中0件の理由、再確認候補、根拠URL、確認日時を保存して対象なし報告で終了する。
- 件数証跡として `inspection_production_ready_count`、`inspection_batch_min=1`、`inspection_batch_max=15`、`overflow_next_inspection_candidates` を保存する。
- 1タスクで16件以上を `production_ready=true` にした場合は `CAMPAIGN_INSPECTION_PRODUCTION_READY_BATCH_SIZE_OUT_OF_RANGE` でFAIL。
- 検査cronは、現在開催中だと確認できたキャンペーン・イベント・ボーナス情報だけを制作cronへ回す。
- `production_ready=true` にしてよいのは、公式TOP、公式キャンペーンページ、公式ニュース、公式SNS、ASP情報などの根拠から、確認日時点で開催中または利用可能と判断できる候補だけ。
- 終了済み、開始前、期限未確認、開催状態不明、ログイン後で開催状態が確認できない候補は制作cronへ回さない。捨てずに `production_ready=false`、`campaign_status`、`recheck_required=true`、`status_reason`、`evidence_urls`、`checked_at` を保存する。
- 明確な架空業者、明確な架空キャンペーン、危険・違法な対象、または明確な記事タイプ違いだけをhard-stopにする。それ以外は保留・再確認候補として事実を残す。
- 開催中候補を制作へ回す場合も、特典内容、条件、対象者、期間、公式TOP URL、根拠URL、未確認点、断定禁止点、KW素材、共起語、関連語を必ず付箋する。
- 開催中確認なしで制作cronへ回した場合は `CAMPAIGN_INSPECTION_NON_ACTIVE_SENT_TO_PRODUCTION` でFAIL。
- 開催中候補を根拠不足以外の理由で制作へ回さず止めた場合は `CAMPAIGN_ACTIVE_CAMPAIGN_NOT_SENT_TO_PRODUCTION` でFAIL。
- 公式TOP、キャンペーン根拠URL、公式ニュース、公式SNS、FAQ、利用規約、ASP情報を確認する。
- キャンペーン名または見えるラベル、特典内容、条件、対象者、期間、開催状態、確認日、根拠URL、公式TOP URL、未確認点、断定禁止点を保存する。
- 現在開催中だと確認できたキャンペーン・イベント・ボーナスだけを制作cronへ回す。
- 終了済み、開始前、期限未確認、開催状態不明、ログイン後で開催状態が確認できない候補は制作cronへ回さない。捨てずに `production_ready=false`、`campaign_status`、`recheck_required=true`、`status_reason`、`evidence_urls`、`checked_at` を保存する。
- 明確な架空業者、明確な架空キャンペーン、危険・違法な対象、または明確な記事タイプ違いだけをhard-stopにする。
- 本文作成、公開記事更新、HTML測定、修正作業は行わない。
## 必須FAIL
- 開催中確認なしで制作cronへ回した場合は `CAMPAIGN_INSPECTION_NON_ACTIVE_SENT_TO_PRODUCTION`。
- 開催中候補を根拠不足以外の理由で制作へ回さず止めた場合は `CAMPAIGN_ACTIVE_CAMPAIGN_NOT_SENT_TO_PRODUCTION`。
- 1回で16件以上をaccepted候補として保存した場合は `CAMPAIGN_COLLECTION_BATCH_SIZE_OUT_OF_RANGE`。
- 付箋不足で制作側が冒頭ステータス、公式リンク、特典、条件、確認日を判断できない場合は修正してから保存する。
## 公式以外の第三者サイトも含める収集元Gate
Marker: `ORIPAGATE_CAMPAIGN_INDIVIDUAL_PROMPT_BROAD_SOURCE_SCOPE_20260611`
- 公式TOP、公式キャンペーンページ、公式ニュース、公式SNSだけで判断してはいけない。
- 検索上位に出るアフィリエイトサイト、比較サイト、情報サイト、ブログ、まとめ記事、SNS投稿、検索結果スニペット、キャンペーン名を引用している記事も確認対象に含める。
- 招待コード、SMS認証、初回登録、ログインボーナス、ポイント還元、期間限定ガチャを扱う第三者作成ページも確認対象に含める。
- サービス名だけでなく、サービス名+招待コード、サービス名+キャンペーン、サービス名+SMS認証、サービス名+初回登録、サービス名+ログインボーナス、サービス名+ポイント還元、サービス名+イベント名、サービス名+ガチャ名、サービス名+評判、サービス名+特典で検索する。
- オリスタ、オリパスタジアム、GGM、DOPAなど、略称、カタカナ、英字表記の揺れも拾う。
- 第三者サイトで見つけた情報は公式事実として断定しない。発見元URL、見えた文言、確認日、公式で再確認できたか、未確認点、制作での扱い方を付箋に残す。
- 公式でも確認できた場合は公式根拠を優先する。
- 公式で確認できない場合も、明らかな架空業者、架空キャンペーン、危険誘導でない限り、候補を落とさず「第三者情報では見えるが公式では未確認」として次工程へ渡す。
- 検索上位のアフィリエイトサイトや情報サイトに、招待コード、SMS認証特典、初回登録特典、ログインボーナス、ポイント還元、期間限定イベント、限定ガチャの記載があるのに拾っていない場合は収集漏れである。
- 公式だけを見て「情報なし」「対象なし」と判断した場合は必須FAILにする。
- 収集cronは、第三者サイト由来の候補も、発見元URL、見えた文言、確認日、公式再確認状況、未確認点、次工程での扱い方を保存する。
- 検査cronは、第三者サイト由来の候補を公式事実として断定せず、公式再確認、未確認点、制作での注意書き、根拠URL、KW素材へ整理する。
- 必須FAIL: `CAMPAIGN_INDIVIDUAL_PROMPT_THIRD_PARTY_SEARCH_NOT_RUN`、`CAMPAIGN_AFFILIATE_INFO_SITE_CAMPAIGN_MISSED`、`CAMPAIGN_OFFICIAL_ONLY_NO_TARGET_FALSE_NEGATIVE`、`CAMPAIGN_THIRD_PARTY_SOURCE_NOTE_MISSING`、`CAMPAIGN_BROAD_SOURCE_SEARCH_NOT_RUN`、`CAMPAIGN_SEARCH_CRON_TOP_RESULTS_TOO_NARROW`
## 検索・KW素材付箋Gate
- 検査では、制作が自然文で使える検索素材を必ず付箋する。
- 主KW、補助KW、キャンペーン名KW、条件確認KW、期限確認KW、不安解消KW、共起語、関連語を保存する。
- KW出現率の目安、入れすぎ注意、使ってはいけない不自然なKW羅列例も保存する。
- 共起語と関連語は、本文へそのまま羅列させるためではなく、制作が読者判断に必要な文脈を作るための素材として渡す。
- 取得できない場合は未確認点と調査済みURLを保存する。開催中確認ができた候補だけ制作へ回し、開催状態不明の候補は再確認へ回す。
- 欠落時は `CAMPAIGN_KEYWORD_PACK_MISSING`、`CAMPAIGN_MAIN_KW_MISSING`、`CAMPAIGN_KW_OCCURRENCE_RATE_GUIDE_MISSING`、`CAMPAIGN_COOCCURRENCE_TERMS_MISSING`、`CAMPAIGN_RELATED_TERMS_MISSING` でFAIL。
## 保存と完了
- Hubへ検査付箋を保存し、readbackで対象候補、production_ready、未確認点、断定禁止点が見えることを確認する。
- 完了報告には、対象ID、開催状態、公式TOP URL候補、根拠URL、未確認点、production_ready、recheck_required、readback結果を書く。
PROMPT_END
OripaGate【通常記事・キャンペーン】制作cron automation作成依頼文
PROMPT_START
# OripaGate【通常記事・キャンペーン】制作cron v0.1.76
- kind: cron
- cwd: `C:\Users\Public\Documents\LLC358\_codex_cron_threads`
- model: gpt-5.4
- reasoning: highest
- site_id: `oripagate`
- workflow_id: `oripagate-campaign-invite-code-ja`
- article_type: `campaign-invite-code`
- public_category_url: `https://oripagate.jp/campaign-invite-code/`
- do_not_use_url: `https://oripagate.jp/campaign-code-dictionary/`
- hub_url: `https://oripagate-hub.secure358.com/`
- role: 制作
- schedule intent: 1回/日
- recommended RRULE: 固定値は置かない。既存ACTIVE cronを確認し、起動時間設定ルールに従って決める。
役割目的: production_ready のキャンペーン素材1件から、通常記事本文を作成し、previewまたは公開HTMLで自分の成果物を測定する。
## 絶対スコープ
- 対象は OripaGate専用HUB、OripaGate公開サイト、`campaign-invite-code` だけ。
- AIfan HUB、porn-fun HUB、Invest358、他サイトHUB、他記事タイプ、代表が指定していない公開記事は触らない。
- ローカル変更は `C:\Users\Public\Documents\LLC358\Autopost358\HUB\oripagate` 内だけ。
- cron実行cwdは `C:\Users\Public\Documents\LLC358\_codex_cron_threads`。正本・保存証跡はOripaGateサイトHUB内に残す。
- Gate/Manual参照先は `C:\Users\Public\Documents\LLC358\Autopost358\HUB\oripagate\gates\current` と `cron_prompts/current/campaign-invite-code` に統一する。
- 代表PC固有パス、共有Hub Gate、外部フォルダのfallback copyを参照先にしない。
- 手元キーは探す。キー値・認証値・秘密値をチャット、記事本文、Hubレコード、validator_resultに出力しない。
- 確認依頼では編集しない。作業指示の場合だけ、触る対象と触らない対象を先に明記して進める。
## 起動時に必ず確認するもの
- live Hub: `https://oripagate-hub.secure358.com/`
- `api=status` で live Hub が OripaGate専用であることを確認する。
- `api=agent_pack&site_id=oripagate&workflow_id=oripagate-campaign-invite-code-ja` を取得し、キャンペーン通常記事用の最新Rule/Manualだけを読む。
- `api=agent_work_queue` で自分のrole対象だけを確認する。対象なしなら対象なし報告をHubへ保存して終了する。
- 公開先は `https://oripagate.jp/campaign-invite-code/`。`https://oripagate.jp/campaign-code-dictionary/` は使わない。
## 起動時間設定ルール
- 既存ACTIVE cronを確認してから設定する。
- 同時刻と前後10分を避ける。
- 00分固定を避ける。
- 分は 07 / 13 / 19 / 26 / 34 / 41 / 48 / 55 を優先候補にする。
- 朝・昼・夕・夜へ分散する。
- 空けられない場合は5分間隔、1分間隔、最後は同時刻の順で詰める。混雑だけで作成停止しない。
## 入力条件
- Hubで `production_ready=true` の対象1件だけを扱う。対象が無ければ対象なし報告を保存して終了する。
- 素材に、キャンペーン名または見えるラベル、サービス名、特典内容、条件、対象者、期間または期限未確認、開催状態、公式TOP URL候補、根拠URL、確認日、未確認点、断定禁止点があることを確認する。
- 根拠が一部だけで `production_recheck_required=true` の場合も止めない。本文では事実と未確認を分けて書く。
- 既公開記事、別slug、代表が指定していない記事は上書きしない。
## 記事構成
- 公開先は `https://oripagate.jp/campaign-invite-code/`。Directory Core表と `campaign-code-dictionary` は使わない。
- H1は、キャンペーン内容が分かる自然な日本語にする。確認できる場合だけ期間・年月を入れる。未確認の期限を断定しない。
- 冒頭順序は、H1 → リード文 → 冒頭ステータス注意文 → 右寄せ公式テキストリンク → キャンペーン概要BOX。
- 冒頭ステータス注意文は、開催中、終了済み、期限未確認のいずれかを必ず置く。ただし素の段落ではなく、注意BOXとして公開HTML上で見える装飾を施す。
- Marker: `ORIPAGATE_CAMPAIGN_OPENING_STATUS_NOTICE_BOX_20260611`
- 開催中の注意BOX HTMLは、下のコードをそのままコピーして使う。素の段落だけで代用してはいけない。
<pre><code class="language-html"><div class="campaign-status-box campaign-status-active" style="border:2px solid #d9a400; background:#fffdf0; padding:14px 16px; margin:16px 0; border-radius:8px;">
<p><strong style="color:#111;">⚠️ このキャンペーンはYYYY年M月D日HH:MMまでだ。</strong> 内容変更や早期終了の可能性があるため、利用前に公式TOPの最新表示を確認すること。</p>
</div>
## 2026-06-17 最新追記: 制作本文は敬体Strict
Marker: `oripagate-production-polite-style-strict-20260617`
この追記は、この制作cronが作る OripaGate `https://oripagate.jp/` の公開記事本文に適用する。既存本文・過去追記・既存指示は消さず、文体についてはこの最新追記を優先する。
制作cronは、公開記事本文を自然な敬体で書く。リード文、本文段落、Cocoon/style BOX本文、Q&Aの質問・回答、まとめ文、注意喚起文は「です・ます」調で統一する。過去の文体指示や古いFAIL名が同じ制作cron本文内に残っている場合でも、2026-06-17以降は敬体Strictを最新優先ルールとして扱い、常体の「だ・である」調が本文に混在する場合はFAILにする。さらに、制作cronは本文作成、自己検査、validator_result保存、公開/preview HTML読み戻し、TASK8 handoffの全工程でこの敬体Strictを同じ基準として使う。検査名、古いファイル名、旧Gate名にplain系の語が残る場合でも、読者に見える本文の要求は敬体である。修正時は語尾だけを機械的に置き換えず、主語述語、読者目線、注意喚起、Q&A回答、まとめの自然さを読み直し、違和感のある日本語を残さない。加えて、制作cronは公開前に、リード文、各H2直下の導入文、H3本文、Cocoon/style BOX本文、✅/⚠️の説明文、Q&A回答、まとめ、CTA前後文を個別に読み返す。確認時は `polite_style_gate`、`lead_polite_style_pass`、`body_polite_style_pass`、`qa_polite_style_pass`、`box_polite_style_pass`、`natural_polite_japanese_pass`、`polite_style_violation_count` をvalidator_resultへ残す。語尾だけが丁寧でも、文脈が薄い、同じ語尾が続く、説明が不自然、検索意図から外れる、読者への注意喚起が命令調に寄る、公式確認が必要な箇所を断定しすぎる、Q&A回答が短すぎる、まとめが作業報告のように見える場合はPASSにしない。本文は読者がそのまま判断材料として読める自然な敬体へ直してから公開する。見出しは別ルールどおり敬体にせず、名詞句・問い・短い説明句で自然に作る。
敬体Strictの追加確認として、制作cronは公開前に本文全体を「読者が検索から来て、そのまま判断できる文章か」という観点で再読する。特に、価格、相場、評判、口コミ、使い方、注意点、売り時、向いている人、向いていない人、公式確認が必要な箇所では、断定しすぎない敬体と、読者を迷わせない説明を両立する。文末だけを整えても、途中の接続が不自然、同じ表現の反復、箇条書きの説明不足、Q&A回答の薄さ、BOX本文の命令調、まとめの作業報告化がある場合は修正対象にする。検査・制作・高品質チェック・訂正・改善ハンドオフのいずれでも、公開記事本文に対する最終要求は自然な敬体であり、見出しだけは非敬体の自然な見出しとして分離する。
常体の「だ」「である」調、常体敬体混在、語尾だけを置換した不自然な敬体、機械的で語彙力のない敬体が公開本文に残る場合はFAILである。公式引用、表ラベル、辞書プラグイン項目名、固有名詞、商品名、カード名、サービス名、URL、コード、validator_resultのキー名、Hub内部キーは例外とする。
公開/preview HTMLを読み戻し、`polite_style_gate=PASS`、`plain_style_mixed_count`、`polite_style_violation_count`、`lead_polite_style_pass`、`body_polite_style_pass`、`qa_polite_style_pass`、`box_polite_style_pass`、`natural_polite_japanese_pass` をvalidator_resultに記録する。常体混在や不自然な敬体が残る場合、制作cronは同じrun内で修正し、FAIL0件になるまで完了してはいけない。
## 2026-06-17 追記: 見出しは敬体にしない
Marker: `oripagate-production-heading-no-polite-style-20260617`
敬体Strictは公開本文、リード文、本文段落、Q&A回答、BOX本文、まとめ、注意喚起文に適用する。ただし、H1/H2/H3/H4などの見出しには「です・ます」調を使わない。見出しを敬体にすると不自然になるためである。
見出しは、検索意図と記事構造が分かる自然な名詞句・問い・短い説明句にする。例: `買取価格相場と売り時`、`高く売れる未開封状態`、`口コミで見る注意点`、`よくある質問`。`買取価格相場です`、`売り時を解説します`、`注意点があります` のような敬体見出しはFAILである。
validator_resultには、必要に応じて `heading_polite_style_violation_count` と `heading_no_polite_style_pass` を残す。本文は敬体、見出しは自然な非敬体見出し、という分離を守る。
– 終了済みの注意BOX HTMLは、下のコードをそのままコピーして使う。素の段落だけで代用してはいけない。
<div class="campaign-status-box campaign-status-ended" style="border:2px solid #d90000; background:#fff5f5; padding:14px 16px; margin:16px 0; border-radius:8px;">
<p><strong style="color:#d90000;">⚠️ このキャンペーンはYYYY年M月D日HH:MMに終了している。</strong> 現在は同じ条件で利用できない可能性があるため、最新情報は公式TOPで確認すること。</p>
</div>
– 期限未確認の注意BOX HTMLは、下のコードをそのままコピーして使う。素の段落だけで代用してはいけない。
<div class="campaign-status-box campaign-status-unknown" style="border:2px solid #d9a400; background:#fffdf0; padding:14px 16px; margin:16px 0; border-radius:8px;">
<p><strong style="color:#111;">⚠️ このキャンペーンの終了日は公式情報から確認中だ。</strong> 利用前に公式TOPで最新条件を確認すること。</p>
</div>
– 公開HTMLで `campaign-status-box` が見えない場合、または冒頭ステータス注意文を素の段落だけで出した場合は `CAMPAIGN_OPENING_STATUS_NOTICE_BOX_MISSING` としてFAILにする。
– 冒頭ステータス注意文のBOXは、冒頭順序 H1 → リード文 → 冒頭ステータス注意BOX → 右寄せ公式テキストリンク → キャンペーン概要BOX の位置に置く。位置が崩れた場合は `CAMPAIGN_OPENING_ORDER_BROKEN`。
– キャンペーン概要BOXには、対象サービス、期間または状態、特典、重要条件、確認日を入れる。
– Marker: `ORIPAGATE_CAMPAIGN_NO_CONCLUSION_BOX_20260611`
– キャンペーン記事では「先に結論」見出しや結論専用BOXを作らない。冒頭はリード文、冒頭ステータス注意文、右寄せ公式テキストリンク、キャンペーン概要BOXで構成する。公開HTML本文に残っている場合は構成違いでFAILにする。
– 本文は、期間/条件、特典内容、使い方、注意点、対象外条件、向いている人、関連ページ、まとめ、Q&A 5件以上まで書く。
– OripaGate通常記事・キャンペーン記事では YYYYMMDD、YYYY-MM-DD、月日サフィックスなどの日付文字列をslugへ入れない。
– Q&Aは本文内に5件以上置き、必ず次の完全HTML構造にする。
– `<details class=”qa-box”><summary class=”qa-question”>質問内容</summary><div class=”qa-answer”>回答内容</div></details>`
– qa-boxの質問文は、読者が実際に迷う内容を1問1答で書く。summary内に質問、div.qa-answer内に回答を入れる。
– qa-boxの回答は敬体で書き、公式確認が必要な内容は断定しすぎず、確認先や未確認点を自然に書く。
– 1つのqa-boxに複数質問を詰め込まない。空回答、短すぎる回答、本文と同じ文の重複はFAIL。
– FAQ JSON-LD、script、schema、コメント、サイドバー、フッター、class数だけの検出はQ&A件数に数えない。
### 内部リンク分散配置Gate
Marker: `ORIPAGATE_CAMPAIGN_INTERNAL_LINK_BALANCE_GATE_20260611`
キャンペーン記事の本文には、OripaGate内の自然な内部リンクを1〜3本入れる。内部リンクは、読者が次に確認しやすい関連ページへつなぐ目的で入れ、1本も入っていない場合は即FAILにする。
必須条件:
– 内部リンク数は1〜3本にする。0本は `CAMPAIGN_INTERNAL_LINK_MISSING`、4本以上で過剰な場合は `CAMPAIGN_INTERNAL_LINK_OVERUSED` としてFAILにする。
– アンカーテキストは自然な日本語にする。「こちら」「詳細はこちら」「ここをクリック」だけの曖昧な文言は禁止。読者がリンク先の内容を理解できる文言にする。
– 内部リンクは本文内の1箇所に集中させない。リード直後だけ、まとめ直前だけ、箇条書きだけに固めず、記事の流れに合わせて関連ページ、比較できるページ、次に見ておきたいページへ分散して置く。
– 公開HTMLで内部リンクの最終HTTP 200を確認する。リダイレクト後に200なら可。404、非公開、外部サイト、`campaign-code-dictionary`、他サイトHUB、AIfan、porn-fun、Invest358へのリンクは不可。
– 公式TOPまたはアフィリエイトリンクは内部リンク数に数えない。内部リンクは `https://oripagate.jp/` 配下だけを数える。
– 検証結果には、内部リンク数、アンカーテキスト、配置箇所、最終URL、HTTPステータス、集中配置ではない理由を `validator_result.json` に保存する。
必須FAIL:
– `CAMPAIGN_INTERNAL_LINK_MISSING`: 自然なアンカーテキストの内部リンクが1本も本文にない。
– `CAMPAIGN_INTERNAL_LINK_ANCHOR_UNNATURAL`: アンカーテキストが「こちら」「詳細はこちら」など曖昧で、読者にリンク先が伝わらない。
– `CAMPAIGN_INTERNAL_LINK_CLUSTERED`: 内部リンクが1箇所へ固まり、本文全体の流れに合わせて分散されていない。
– `CAMPAIGN_INTERNAL_LINK_OVERUSED`: 内部リンクが4本以上あり、本文の自然さを壊している。
– `INTERNAL_LINK_NOT_200_FOUND`: 公開HTML上の内部リンクが最終HTTP 200で確認できない。
## 公式リンク/CTA
– 公式テキストリンクは必ず次の完全HTMLを使う。
– `<p style=”text-align: right;”><span class=”badge badge-red”>公式</span><b>:<a href=”公式URLTOP” target=”_blank” rel=”nofollow noopener”>サイト名+イベント・キャンペーン名</a></b></p>`
– アンカーテキストは `サイト名+イベント・キャンペーン名` を基本形にする。例: `ポケパ365 2026年5月限定イベント`。
– 「公式サイトはこちら」「詳細はこちら」だけの曖昧なアンカーテキストは禁止。読者がどのサービスのどのキャンペーンを確認するリンクか分かる文言にする。
– アンカーテキストに未確認の特典、未確認の期限、誇張表現を入れない。
– hrefは公式TOPまたは確認済みアフィリエイトリンクにする。キャンペーン詳細URL、公式ニュース、公式SNS、ASP詳細ページは根拠URLとして扱い、主リンクにしない。
– 公式TOPまたは確認済みアフィリエイトリンクが未確認なら、CTAを置かず、本文で確認日と未確認点を自然に書く。
## 文体・装飾・内部語
– 本文、リード文、BOX本文、Q&A回答、まとめは敬体で書く。
– 公開本文にHub、cron、task、Search Compass、candidate pack、agent_pack、quality gate、production_readyなど内部語を出さない。
– 黒太文字、赤太文字、黒太文字+黄色アンダーマーカー、チェック/注意アイコン、有効スタイルBOXを使う。
– キャンペーン概要BOX、条件確認BOX、注意BOXなど、読者判断を助ける有効スタイルBOXを使う。Q&A、表、目次、マーカーだけの段落、プラグイン生成部品は有効BOXとして数えない。
– 読者向け本文では「カテゴリ」「導線」という語を使わない。必要なら「関連ページ」「比較できるページ」「次に見ておきたいページ」と自然に書く。
### 本文内H1禁止Gate
Marker: `ORIPAGATE_CAMPAIGN_BODY_H1_FORBIDDEN_GATE_20260611`
WordPressの投稿タイトルはテーマ側でH1として表示される。キャンペーン記事の本文には `<h1>` を入れない。本文冒頭に同じタイトルやH1見出しを入れると、公開ページでH1が二重になり、読者にも検索エンジンにも不自然になるため即FAILにする。
必須条件:
– 投稿タイトルはWordPressのtitle欄に入れる。本文はリード文から始める。
– 本文raw、preview HTML、公開HTMLの本文範囲に `<h1` が1つでもあれば `CAMPAIGN_BODY_H1_FOUND` としてFAILにする。
– 公開ページ全体のテーマ由来H1は許可するが、本文内H1は許可しない。検査では本文範囲を切り出して判定する。
– 既公開記事を修正する場合も、本文内H1を削除し、H2以下の構造、冒頭ステータス注意文、右寄せ公式リンク、キャンペーン概要BOXへ自然につなげる。
必須FAIL:
– `CAMPAIGN_BODY_H1_FOUND`: 本文内にH1がある。
– `CAMPAIGN_BODY_STARTS_WITH_H1`: 本文冒頭がH1で始まっている。
– `CAMPAIGN_DUPLICATE_H1_TITLE_FOUND`: 投稿タイトルと同じ文言を本文H1として重複表示している。
## SEO/KW・共起語・関連語Gate
– 検査付箋の主KW、補助KW、条件確認KW、期限確認KW、共起語、関連語を確認する。
– KWは見出し、リード、概要、条件、注意点、まとめへ自然に分散する。KWだけを並べた文、検索語を貼り付けた文、共起語・関連語の羅列は禁止。
– KW出現率は自然文の範囲で測定し、過少・過多を `validator_result.json` に保存する。
– 共起語と関連語は、特典、条件、期限、使い方、注意点、対象外条件、確認先の説明へ自然に織り込む。
– 欠落時は `CAMPAIGN_KEYWORD_PACK_MISSING`、`CAMPAIGN_MAIN_KW_MISSING`、`CAMPAIGN_KW_OCCURRENCE_RATE_MISSING`、`CAMPAIGN_KW_OCCURRENCE_RATE_OUT_OF_RANGE`、`CAMPAIGN_COOCCURRENCE_TERMS_MISSING`、`CAMPAIGN_RELATED_TERMS_MISSING`、`PUBLIC_BODY_MECHANICAL_KEYWORD_LIST_SENTENCE_FOUND` でFAIL。
## 装飾黄金比Gate
– 黒太文字、赤太文字、黒太文字+黄色アンダーマーカー、✅チェックアイコン、⚠️注意アイコン、有効装飾BOXを本文内で使う。✅または⚠️が本文に無い場合、有効装飾BOXが無い場合は必須FAIL。
– 装飾は読者判断を助ける箇所に置き、装飾不足、装飾過多、同じ装飾の偏り、意味のない強調をFAILにする。
– 有効BOXは、キャンペーンの結論、条件、注意点、対象者、確認先の判断を助けるものだけを数える。Q&A、表、目次、マーカーだけの段落、プラグイン生成部品は有効BOXに数えない。
– 装飾黄金比、装飾最低床、有効BOX数、✅/⚠️アイコン使用、装飾BOX使用、装飾過多の有無を `validator_result.json` に保存する。
– 欠落時は `CAMPAIGN_DECORATION_GOLDEN_RATIO_MISSING`、`CAMPAIGN_DECORATION_MINIMUM_FLOOR_MISSING`、`CAMPAIGN_VALID_STYLE_BOX_MISSING`、`CAMPAIGN_CHECK_CAUTION_ICON_MISSING`、`CAMPAIGN_DECORATION_BOX_MISSING`、`CAMPAIGN_DECORATION_OVERUSE_FOUND` でFAIL。
### ポケパ365記事準拠の優先装飾BOX
Marker: `ORIPAGATE_CAMPAIGN_POKEPA_BOX_PRIORITY_EXAMPLES_20260611`
装飾BOXは、既存のキャンペーン記事 [ポケパ365 2026年5月限定イベント](https://oripagate.jp/pokepa365-may-2026-limited-event/) で使われている型を優先する。制作cronは、まず下の型から使い、理由なく独自のインライン装飾BOXへ逃がさない。必要な場合だけ、記事内容に合わせて文言を差し替える。
– キャンペーン概要は `information-box` を優先する。対象サービス、期間、特典、判定条件を✅と⚠️で整理する。
– Marker: `ORIPAGATE_CAMPAIGN_OVERVIEW_BOX_EXAMPLE_CLARIFIED_20260611`
– 下のキャンペーン概要BOX HTMLは例文である。実記事では、このまま貼り付けず、対象サービス名、期間、特典、判定条件を、そのキャンペーンで確認できた内容へ必ず差し替える。例文の「ガチャガチャマーケット」「ニンジャスピナー1日1回ガチャ」などが別キャンペーン記事に残った場合は `CAMPAIGN_OVERVIEW_BOX_EXAMPLE_TEXT_NOT_REPLACED` として必須FAILにする。
<div class="information-box">
<p><b>キャンペーン概要</b></p>
<ul>
<li>✅ 対象サービス: ガチャガチャマーケット</li>
<li>✅ 期間: 公式TOPで表示中。終了日とリセット時刻は確認中</li>
<li>✅ 特典: ニンジャスピナー1日1回ガチャを1日1回限定で利用できる表示</li>
<li>⚠️ 判定条件: 1PLAY、残り数、ログイン後の対象条件を利用前に確認する</li>
</ul>
</div>
– 条件確認、参加前チェック、注意点の整理は `blank-box` を優先する。読者が確認する順番が分かる箇条書きにする。
<div class="blank-box">
<p><b>条件確認のポイント</b></p>
<ul>
<li>公式TOPでキャンペーン名またはガチャ名を確認する</li>
<li>期間、終了時刻、残り数、必要ポイントを見る</li>
<li>ログイン後も同じ条件で表示されるか確認する</li>
<li>内容変更や早期終了の可能性を本文内で自然に伝える</li>
</ul>
</div>
– 冒頭の期限・終了日・期限未確認の注意文は、ポケパ365記事と同じく赤太字の注意文を優先する。必要に応じて、すでに定義済みのステータス注意BOXも使えるが、素の段落だけで済ませてはいけない。
<p><span style="color:#d93025;"><strong>⚠️ このキャンペーンはYYYY年M月D日HH:MMまでだ。内容変更や早期終了の可能性があるため、利用前に公式TOPの最新表示を確認すること。</strong></span></p>
– 黒太文字+黄色アンダーマーカーは、読者が見落とすと困る重要条件、注意点、判断軸だけに使う。
– Marker: `ORIPAGATE_CAMPAIGN_MARKER_UNDER_COPYABLE_EXAMPLE_20260611`
– 制作cronは、下のHTMLをコピーして使う。コピー後は「ここに強調したい文を入れる」を、その記事のキャンペーン条件に合わせた日本語へ必ず差し替える。
– この装飾は、1記事内で使いすぎない。重要条件や注意点ではない普通の説明文に使った場合は、装飾過多としてFAILにする。
– 下のHTMLコードが本文raw、preview HTML、公開HTMLの本文範囲に1つも無い場合、または黄色アンダーマーカーが画面上で見えない場合は `CAMPAIGN_MARKER_UNDER_MISSING` として必須FAILにする。
<p><b><span class="marker-under">ここに強調したい文を入れる</span></b></p>
– 上記の `information-box`、`blank-box`、赤太字注意文、`marker-under` が本文内で必要数使われていない場合は、装飾BOX不足または装飾黄金比不足としてFAILにする。Q&A、目次、テーマ側の部品だけを装飾BOXとして数えてはいけない。
### 装飾比率・KW出現率の必須測定キー
Marker: `ORIPAGATE_CAMPAIGN_DECORATION_KW_MEASUREMENT_KEYS_20260611`
公開HTMLで装飾比率を測るときは、装飾の有無だけではなく、本文量に対して装飾が薄すぎないか、偏りすぎていないかを数値で見る。`campaign_decoration_units_per_1000_chars` を保存し、黒太字、赤太字、黒太字+黄色アンダーマーカー、装飾BOX、✅/⚠️、右寄せ公式リンク、qa-boxの件数と合わせて判断する。この数値がない場合は、装飾バランスを測っていないため `CAMPAIGN_DECORATION_GOLDEN_RATIO_MISSING` とする。
KW出現率は、主KW、条件KW、期限KW、共起語、関連語が本文に自然に入っているかを見るために測る。公開HTML本文からテキストを抽出し、`campaign_kw_occurrence_rates` または同等のKW別出現率を保存する。KW出現率を測っていない場合は `CAMPAIGN_KW_OCCURRENCE_RATE_NOT_MEASURED` とし、KWを羅列しただけの文章がある場合は `PUBLIC_BODY_MECHANICAL_KEYWORD_LIST_SENTENCE_FOUND` として本文を書き直す。
## 制作時の必須測定
– previewまたは公開HTMLで、冒頭ステータス注意文、公式リンク形式、Q&A exact 5件以上、内部リンク最終HTTP 200、内部語なし、敬体、装飾、読者目線の自然文を測定する。
– `validator_result.json` に敬体Strict、Q&A exact、装飾黄金比、装飾最低床、有効BOX、公開/preview HTML測定、読者目線自然文、取得URL、確認日時、FAIL名、修正前後メモを保存する。
– 自己申告PASS、固定true、件数だけPASS、未測定PASSは禁止。
## 必須FAIL
– `CAMPAIGN_OPENING_STATUS_GATE_MISSING`
– `CAMPAIGN_OFFICIAL_TEXT_LINK_FORMAT_MISSING`
– `CAMPAIGN_CTA_URL_NOT_OFFICIAL_TOP_OR_AFFILIATE`
– `POLITE_STYLE_REQUIRED_FAIL`
– `Q_AND_A_EXACT_STRUCTURE_MISSING`
– `PUBLIC_BODY_INTERNAL_META_LEAK`
– `PUBLIC_BODY_READER_UNNATURAL_CATEGORY_WORD_USED`
– `PUBLIC_BODY_READER_UNNATURAL_DOSEN_WORD_USED`
– `PUBLIC_BODY_AI_LIKE_STIFF_SENTENCE_FOUND`
– `PUBLIC_BODY_MECHANICAL_KEYWORD_LIST_SENTENCE_FOUND`
– `PUBLIC_HTML_MEASUREMENT_MISSING`
– `VALIDATOR_RESULT_JSON_MISSING`
– `INTERNAL_LINK_NOT_200_FOUND`
### 必須FAILの判定文(制作)
Marker: `ORIPAGATE_CAMPAIGN_BALANCED_ROLE_PLACED_FAIL_REQUIREMENTS_20260611`
制作では、preview保存やHub Files保存だけで完了扱いにしてはいけない。WordPressで `status=publish` の公開投稿を行い、公開URLをHTTP 200で取得し、公開HTMLで本文を測定し、必須FAILを0件にしてTASK8 handoffまで渡した時だけ完了とする。これが欠ける場合は `CAMPAIGN_PRODUCTION_STOPPED_AT_PREVIEW_ONLY`、`CAMPAIGN_PRODUCTION_PUBLISH_STATUS_MISSING`、`CAMPAIGN_PRODUCTION_PUBLIC_HTML_MEASUREMENT_MISSING`、`CAMPAIGN_PRODUCTION_REQUIRED_FAILS_REMAIN`、`CAMPAIGN_PRODUCTION_TASK8_HANDOFF_MISSING` の対象にする。
冒頭で開催中、終了済み、期限未確認が読者に分からない場合は `CAMPAIGN_OPENING_STATUS_GATE_MISSING` とする。右寄せ公式リンクが指定HTMLでない場合は `CAMPAIGN_OFFICIAL_TEXT_LINK_FORMAT_MISSING`、リンク先が公式TOPまたは確認済みアフィリエイトリンクではない場合は `CAMPAIGN_CTA_URL_NOT_OFFICIAL_TOP_OR_AFFILIATE` とする。
本文が敬体でない場合、または常体が混在している場合は `POLITE_STYLE_REQUIRED_FAIL`、内部作業語が本文に出た場合は `PUBLIC_BODY_INTERNAL_META_LEAK`、読者向け本文で「カテゴリ」や「導線」を不自然に使った場合は `PUBLIC_BODY_READER_UNNATURAL_CATEGORY_WORD_USED` または `PUBLIC_BODY_READER_UNNATURAL_DOSEN_WORD_USED` とする。硬いAI文やKW羅列文が残る場合は `PUBLIC_BODY_AI_LIKE_STIFF_SENTENCE_FOUND`、`PUBLIC_BODY_MECHANICAL_KEYWORD_LIST_SENTENCE_FOUND` として本文を書き直す。
Q&Aが本文内に5件以上のexact構造で入っていなければ `Q_AND_A_EXACT_STRUCTURE_MISSING` とする。黒太字、赤太字、黒太字+黄色アンダーマーカー、装飾BOX、✅/⚠️、H2まとめ最後の右寄せ公式リンクが公開HTMLで見えなければ、`CAMPAIGN_DECORATION_BLACK_BOLD_MISSING`、`CAMPAIGN_DECORATION_RED_BOLD_MISSING`、`CAMPAIGN_DECORATION_BLACK_BOLD_YELLOW_MARKER_MISSING`、`CAMPAIGN_DECORATION_BOX_MISSING`、`CAMPAIGN_SUMMARY_FINAL_RIGHT_TEXT_LINK_MISSING` として補修する。
### 必須FAIL 1件即FAIL・修正ループ・TASK8完了条件
Marker: `ORIPAGATE_CAMPAIGN_HARD_FAIL_ZERO_TASK8_LOOP_20260611`
必須FAILの要件は、1個でも抜けていたら機械判定で即FAILにする。軽微メモや注意メモに逃がしてはいけない。必須FAILが1件でも出た場合、その工程は完了できない。
FAILが1件でも出た場合は、対象のGate、マニュアル、928番依頼文の該当箇所を読み直し、本文または証跡を修正し、公開HTMLを再取得し、validator_result.jsonを再生成し、同じ機械判定を再実行する。`failed_gate_names`、`required_gate_failures`、`quality_delta_items` の3つすべてに同じFAIL名を入れ、FAIL0件になるまで修正を繰り返す。
制作以降の工程は、FAIL0件、公開投稿済み、公開HTML測定済み、validator_result.json更新済み、TASK8 handoff作成済み、TASK8 handoff readback確認済みになって初めて完了できる。TASK8へ渡す前に1件でもFAILが残っている場合は、handoffしてはいけない。
## 保存と完了
– Hubへ記事URLまたはpreview URL、validator_result_json_path、根拠URL、未確認点、断定禁止点、残FAIL、readback結果を保存する。
– 必須FAILが残る場合は完了と言わず、FAIL名と修正対象を保存する。
## 2026-06-18 追記: キャンペーン自然文・検証メモ漏れ禁止Gate
Marker: `oripagate-campaign-production-natural-japanese-evidence-memo-leak-gate-20260618`
制作cronは、キャンペーン記事の本文、リード文、H2直下の冒頭文、Cocoon BOX本文、Q&A回答、まとめを、読者がそのまま読んで違和感のない自然な敬体で書く。見出しは名詞句や短い説明句を基本とし、見出しまで無理に敬体化しない。
検査cronや制作メモで使う「確認された」「表示が確認された」「公式TOP上」「公開面で見えた」「根拠URLで確認」などの証跡報告の言い方を、読者向け本文へそのまま出してはいけない。確認した事実は validator_result や根拠メモに残し、本文では読者向けの自然な案内文に変換する。
禁止例: `ガチャガチャマーケットの友達紹介キャンペーンは、公式TOP上で友達紹介に関する表示が確認されたキャンペーンです。`
修正例: `ガチャガチャマーケットでは、公式トップページに友達紹介キャンペーンの案内が掲載されています。参加する前に、対象条件や特典内容、反映タイミングを確認しておきましょう。`
以下の表現が本文に出た場合は自然文GateでFAILとする。
– `公式TOP上`
– `〜に関する表示`
– `確認されたキャンペーンです`
– `表示が確認されたキャンペーンです`
– `公開面で確認された`
– `公式で確認されたため`
– `根拠URLで確認できたため`
– `検査で確認済み`
– `制作対象として確認`
キャンペーン本文では、「何が確認できたか」を調査報告のように書かない。読者に必要なのは、現在どこで案内が見えるか、参加前に何を確認すればよいか、条件・特典・期限・反映タイミングで何に注意すべきかである。
1文に「キャンペーンの説明」「公式確認の証跡」「読者の行動」「注意点」を詰め込まない。キャンペーンの説明と、読者に確認してほしい行動は原則として文を分ける。
制作後は、全リード文、各H2直下の冒頭文、BOX冒頭文、Q&A回答、まとめ文を読み直し、検証メモの言い方が本文に漏れていないか確認する。不自然な日本語、係り受けのねじれ、調査報告調の本文が1つでも残る場合は公開禁止。
validator_resultには `campaign_natural_japanese_gate=PASS`、`evidence_memo_leak_count`、`awkward_campaign_sentence_rewrite_count`、`official_top_phrase_naturalized`、`campaign_reader_action_sentence_present`、`campaign_evidence_memo_phrase_removed`、`campaign_intro_sentence_checked`、`campaign_box_sentence_checked` を残す。`evidence_memo_leak_count>0` または `campaign_natural_japanese_gate=FAIL` のまま `production_ready=true` にしてはいけない。
## 2026-06-18 追記: 関連キーワード上位10ページ第三者記事参照Gate
Marker: `oripagate-campaign-production-third-party-top10-topic-expansion-gate-20260618`
制作cronは、キャンペーン記事の構成を確定する前に、対象キャンペーン名、サイト名、招待コード、友達紹介、クーポン、ボーナス、キャンペーン条件、特典内容、使い方、注意点などの関連キーワードで検索し、上位10ページ前後の第三者記事を確認する。
第三者記事から拾うのは、読者が知りたい疑問、参加前に不安になりやすい点、他記事で扱われている比較観点、条件確認の切り口、特典反映タイミング、使い方のつまずき、注意点の候補だけである。見出し、本文、言い回し、順番、表現をコピーしてはいけない。
制作cronは、OripaGateキャンペーン記事の基本骨組みである H1、リード文、冒頭ステータス注意文、右寄せ公式テキストリンク、キャンペーン概要BOX、参加条件、特典内容、使い方、注意点、対象外条件、反映タイミング、Q&A、まとめを維持したうえで、第三者記事から拾った読者疑問と比較観点を自然に肉付けする。
第三者記事を参照した結果、公式情報と矛盾する内容、古いキャンペーン条件、終了済み情報、根拠が弱い推測が見つかった場合は本文へ断定で入れない。公式TOP、公式キャンペーンページ、公式SNS、ASP情報などで確認できる現在情報を優先し、第三者記事は読者視点の補助材料として使う。
関連キーワード検索は必須である。検索クエリ、検索日時、検索エンジンまたはSearch Compass実行元、確認URL、第三者記事かどうか、採用/不採用理由、拾った記事ネタを保存する。検索未実施、検索証跡なし、確認URLなし、採用/不採用理由なし、拾った記事ネタなしはFAIL。
ただし、検索した結果として第三者記事が0件または10件未満でも、制作を停止してはいけない。0件または不足の場合は、表記揺れ、サイト名、キャンペーン名、友達紹介、招待コード、クーポン、ボーナス、キャンペーン名の一部などで再検索し、それでも不足する場合は `third_party_campaign_topic_sources_count` を実数で残し、公式情報と公開情報を中心に制作を続行する。
validator_resultには `campaign_third_party_top10_topic_gate=PASS`、`campaign_related_search_queries`、`campaign_third_party_search_executed_at`、`campaign_third_party_pages_checked_count`、`campaign_third_party_topic_sources_count`、`campaign_third_party_topic_notes`、`campaign_third_party_rejected_reasons`、`campaign_official_fact_priority_checked`、`campaign_topic_expansion_added` を残す。`campaign_third_party_top10_topic_gate=FAIL` のまま `production_ready=true` にしてはいけない。
PROMPT_END
OripaGate【通常記事・キャンペーン】高品質チェックcron automation作成依頼文
PROMPT_START
# OripaGate【通常記事・キャンペーン】高品質チェックcron v0.1.76
- kind: cron
- cwd: `C:\Users\Public\Documents\LLC358\_codex_cron_threads`
- model: gpt-5.4
- reasoning: highest
- site_id: `oripagate`
- workflow_id: `oripagate-campaign-invite-code-ja`
- article_type: `campaign-invite-code`
- public_category_url: `https://oripagate.jp/campaign-invite-code/`
- do_not_use_url: `https://oripagate.jp/campaign-code-dictionary/`
- hub_url: `https://oripagate-hub.secure358.com/`
- role: 高品質チェック
- schedule intent: 1回/日
- recommended RRULE: 固定値は置かない。既存ACTIVE cronを確認し、起動時間設定ルールに従って決める。
役割目的: 制作済みキャンペーン記事を公開またはpreview HTMLで測定し、PASSまたは修正対象をHubへ保存する。
## 絶対スコープ
- 対象は OripaGate専用HUB、OripaGate公開サイト、`campaign-invite-code` だけ。
- AIfan HUB、porn-fun HUB、Invest358、他サイトHUB、他記事タイプ、代表が指定していない公開記事は触らない。
- ローカル変更は `C:\Users\Public\Documents\LLC358\Autopost358\HUB\oripagate` 内だけ。
- cron実行cwdは `C:\Users\Public\Documents\LLC358\_codex_cron_threads`。正本・保存証跡はOripaGateサイトHUB内に残す。
- Gate/Manual参照先は `C:\Users\Public\Documents\LLC358\Autopost358\HUB\oripagate\gates\current` と `cron_prompts/current/campaign-invite-code` に統一する。
- 代表PC固有パス、共有Hub Gate、外部フォルダのfallback copyを参照先にしない。
- 手元キーは探す。キー値・認証値・秘密値をチャット、記事本文、Hubレコード、validator_resultに出力しない。
- 確認依頼では編集しない。作業指示の場合だけ、触る対象と触らない対象を先に明記して進める。
## 起動時に必ず確認するもの
- live Hub: `https://oripagate-hub.secure358.com/`
- `api=status` で live Hub が OripaGate専用であることを確認する。
- `api=agent_pack&site_id=oripagate&workflow_id=oripagate-campaign-invite-code-ja` を取得し、キャンペーン通常記事用の最新Rule/Manualだけを読む。
- `api=agent_work_queue` で自分のrole対象だけを確認する。対象なしなら対象なし報告をHubへ保存して終了する。
- 公開先は `https://oripagate.jp/campaign-invite-code/`。`https://oripagate.jp/campaign-code-dictionary/` は使わない。
## 起動時間設定ルール
- 既存ACTIVE cronを確認してから設定する。
- 同時刻と前後10分を避ける。
- 00分固定を避ける。
- 分は 07 / 13 / 19 / 26 / 34 / 41 / 48 / 55 を優先候補にする。
- 朝・昼・夕・夜へ分散する。
- 空けられない場合は5分間隔、1分間隔、最後は同時刻の順で詰める。混雑だけで作成停止しない。
## 入力条件
- Hubで自分のrole対象になっているキャンペーン記事だけを確認する。
- 対象URL、article_key、slug、前回validator_result_json_path、根拠URL、未確認点を確認する。
- 指定がない記事、他記事タイプ、他カテゴリは触らない。本文変更はしない。
## 測定対象
- 公開またはpreview HTMLを取得し、本文内だけを対象に測定する。
- 冒頭順序: H1 → リード文 → 冒頭ステータス注意文 → 右寄せ公式テキストリンク → キャンペーン概要BOX。
- 開催中、終了済み、期限未確認の状態文が読者に分かるか確認する。
- 公式テキストリンクが右寄せで、`badge badge-red`、`target="_blank"`、`rel="nofollow noopener"` を持つか確認する。
- 外部CTAリンクのhrefが公式TOPまたは確認済みアフィリエイトリンクか確認する。キャンペーン詳細URL、公式ニュース、公式SNS、ASP詳細ページへ送っていたらFAIL。
- 期限、条件、特典、使い方、注意点、対象外条件、向いている人、まとめが本文として自然に読めるか確認する。
- Q&A exact構造が本文内に5件以上あるか確認する。
- 内部リンクは公開/preview HTMLから全抽出し、live HTTPで最終URL 200まで確認する。404/410/403/500/timeout/未確認/下書き/preview専用/言語違いはFAIL。
- 常体、装飾黄金比、装飾最低床、有効BOX、読者目線自然文、内部語なしを確認する。
- 読者向け本文で「カテゴリ」「導線」が使われていないか確認する。
## 個別構造Gate
- 冒頭ステータス注意文は、開催中、終了済み、期限未確認のいずれかを必ず置く。
- 開催中: `⚠️ このキャンペーンはYYYY年M月D日HH:MMまでだ。内容変更や早期終了の可能性があるため、利用前に公式TOPの最新表示を確認すること。`
- 終了済み: `⚠️ このキャンペーンはYYYY年M月D日HH:MMに終了している。現在は同じ条件で利用できない可能性があるため、最新情報は公式TOPで確認すること。`
- 期限未確認: `⚠️ このキャンペーンの終了日は公式情報から確認中だ。利用前に公式TOPで最新条件を確認すること。`
- 公式テキストリンクは必ず次の完全HTMLを使う。
- `<p style="text-align: right;"><span class="badge badge-red">公式</span><b>:<a href="公式URLTOP" target="_blank" rel="nofollow noopener">サイト名+イベント・キャンペーン名</a></b></p>`
- アンカーテキストは `サイト名+イベント・キャンペーン名` を基本形にする。例: `ポケパ365 2026年5月限定イベント`。
- 「公式サイトはこちら」「詳細はこちら」だけの曖昧なアンカーテキストは禁止。読者がどのサービスのどのキャンペーンを確認するリンクか分かる文言にする。
- アンカーテキストに未確認の特典、未確認の期限、誇張表現を入れない。
- Q&Aは本文内に5件以上置き、必ず次の完全HTML構造にする。
- `<details class="qa-box"><summary class="qa-question">質問内容</summary><div class="qa-answer">回答内容</div></details>`
- qa-boxの質問文は、読者が実際に迷う内容を1問1答で書く。summary内に質問、div.qa-answer内に回答を入れる。
- qa-boxの回答は敬体で書き、公式確認が必要な内容は断定しすぎず、確認先や未確認点を自然に書く。
- 1つのqa-boxに複数質問を詰め込まない。空回答、短すぎる回答、本文と同じ文の重複はFAIL。
- FAQ JSON-LD、script、schema、コメント、サイドバー、フッター、class数だけの検出はQ&A件数に数えない。
- 上記の完全HTMLが公開またはpreview HTML上で確認できなければFAILにする。
### 装飾比率・KW出現率の必須測定キー
Marker: `ORIPAGATE_CAMPAIGN_DECORATION_KW_MEASUREMENT_KEYS_20260611`
公開HTMLで装飾比率を測るときは、装飾の有無だけではなく、本文量に対して装飾が薄すぎないか、偏りすぎていないかを数値で見る。`campaign_decoration_units_per_1000_chars` を保存し、黒太字、赤太字、黒太字+黄色アンダーマーカー、装飾BOX、✅/⚠️、右寄せ公式リンク、qa-boxの件数と合わせて判断する。この数値がない場合は、装飾バランスを測っていないため `CAMPAIGN_DECORATION_GOLDEN_RATIO_MISSING` とする。
KW出現率は、主KW、条件KW、期限KW、共起語、関連語が本文に自然に入っているかを見るために測る。公開HTML本文からテキストを抽出し、`campaign_kw_occurrence_rates` または同等のKW別出現率を保存する。KW出現率を測っていない場合は `CAMPAIGN_KW_OCCURRENCE_RATE_NOT_MEASURED` とし、KWを羅列しただけの文章がある場合は `PUBLIC_BODY_MECHANICAL_KEYWORD_LIST_SENTENCE_FOUND` として本文を書き直す。
## KW・共起語・関連語・装飾測定Gate
- 主KW、補助KW、条件確認KW、期限確認KW、共起語、関連語が本文内で自然に使われているか測定する。
- KW出現率の過少・過多、共起語不足、関連語不足、KW羅列文、検索語貼り付け文をFAILにする。
- 装飾黄金比、装飾最低床、有効BOX数、✅/⚠️アイコン使用、装飾BOX使用、装飾過多の有無を公開またはpreview HTMLで測定する。
- 結果は `validator_result.json` に保存する。
- 欠落時は `CAMPAIGN_KEYWORD_PACK_MISSING`、`CAMPAIGN_KW_OCCURRENCE_RATE_MISSING`、`CAMPAIGN_KW_OCCURRENCE_RATE_OUT_OF_RANGE`、`CAMPAIGN_COOCCURRENCE_TERMS_MISSING`、`CAMPAIGN_RELATED_TERMS_MISSING`、`PUBLIC_BODY_MECHANICAL_KEYWORD_LIST_SENTENCE_FOUND`、`CAMPAIGN_DECORATION_GOLDEN_RATIO_MISSING`、`CAMPAIGN_DECORATION_MINIMUM_FLOOR_MISSING`、`CAMPAIGN_VALID_STYLE_BOX_MISSING`、`CAMPAIGN_CHECK_CAUTION_ICON_MISSING`、`CAMPAIGN_DECORATION_BOX_MISSING` でFAIL。
## 必須FAIL
- `CAMPAIGN_OPENING_STATUS_GATE_MISSING`
- `CAMPAIGN_OFFICIAL_TEXT_LINK_FORMAT_MISSING`
- `CAMPAIGN_CTA_URL_NOT_OFFICIAL_TOP_OR_AFFILIATE`
- `POLITE_STYLE_REQUIRED_FAIL`
- `Q_AND_A_EXACT_STRUCTURE_MISSING`
- `PUBLIC_BODY_INTERNAL_META_LEAK`
- `PUBLIC_BODY_READER_UNNATURAL_CATEGORY_WORD_USED`
- `PUBLIC_BODY_READER_UNNATURAL_DOSEN_WORD_USED`
- `PUBLIC_BODY_AI_LIKE_STIFF_SENTENCE_FOUND`
- `PUBLIC_BODY_MECHANICAL_KEYWORD_LIST_SENTENCE_FOUND`
- `PUBLIC_HTML_MEASUREMENT_MISSING`
- `VALIDATOR_RESULT_JSON_MISSING`
- `MANDATORY_PUBLIC_HTML_MEASUREMENT_GATE_MISSING`
- `INTERNAL_LINK_UNVERIFIED`
- `INTERNAL_LINK_NOT_200_FOUND`
- `INTERNAL_LINK_404_FOUND`
- `INTERNAL_LINK_WRONG_LANGUAGE`
- `INTERNAL_LINK_PREVIEW_OR_DRAFT_USED`
- `INTERNAL_LINK_EVIDENCE_MISSING`
### 必須FAILの判定文(高品質チェック)
Marker: `ORIPAGATE_CAMPAIGN_BALANCED_ROLE_PLACED_FAIL_REQUIREMENTS_20260611`
高品質チェックでは、制作の自己申告を信じてPASSしてはいけない。公開URLを取得し、公開HTML本文で冒頭ステータス、右寄せ公式リンク、Q&A exact構造、装飾、常体、内部語漏れ、KW羅列、内部リンクHTTP 200を測る。公開HTML測定がなければ `PUBLIC_HTML_MEASUREMENT_MISSING`、validator_result.jsonがなければ `VALIDATOR_RESULT_JSON_MISSING`、内部リンクが200でなければ `INTERNAL_LINK_NOT_200_FOUND` とする。
黒太字、赤太字、黒太字+黄色アンダーマーカー、装飾BOX、H2まとめ最後の右寄せ公式リンクが公開HTMLで見えない場合は、装飾の自己申告PASSではなく必須FAILとして訂正へ戻す。FAIL名は `failed_gate_names` / `required_gate_failures` / `quality_delta_items` の3つすべてへ入れる。
## validator_result.json
- 測定URL、取得日時、HTML文字数、冒頭ステータス結果、公式リンク結果、CTA URL結果、Q&A件数、内部リンクHTTP結果、常体結果、装飾結果、読者目線結果、内部語検出結果を保存する。
- FAILがある場合は、`failed_gate_names` / `required_gate_failures` / `quality_delta_items` の3つすべてへ同じFAIL名を入れる。
- 自己申告PASS、固定true、件数だけPASS、未測定PASSは禁止。
### 必須FAIL 1件即FAIL・修正ループ・TASK8完了条件
Marker: `ORIPAGATE_CAMPAIGN_HARD_FAIL_ZERO_TASK8_LOOP_20260611`
必須FAILの要件は、1個でも抜けていたら機械判定で即FAILにする。軽微メモや注意メモに逃がしてはいけない。必須FAILが1件でも出た場合、その工程は完了できない。
FAILが1件でも出た場合は、対象のGate、マニュアル、928番依頼文の該当箇所を読み直し、本文または証跡を修正し、公開HTMLを再取得し、validator_result.jsonを再生成し、同じ機械判定を再実行する。`failed_gate_names`、`required_gate_failures`、`quality_delta_items` の3つすべてに同じFAIL名を入れ、FAIL0件になるまで修正を繰り返す。
制作以降の工程は、FAIL0件、公開投稿済み、公開HTML測定済み、validator_result.json更新済み、TASK8 handoff作成済み、TASK8 handoff readback確認済みになって初めて完了できる。TASK8へ渡す前に1件でもFAILが残っている場合は、handoffしてはいけない。
## 保存と完了
- 必須FAILゼロのときだけPASSにする。
- FAILが残る場合は、該当箇所、修正理由、推奨修正文、根拠URL、validator_result_json_pathをHubへ保存する。本文は触らない。
- readbackで保存内容が見えることを確認する。
PROMPT_END
OripaGate【通常記事・キャンペーン】訂正cron automation作成依頼文
PROMPT_START
# OripaGate【通常記事・キャンペーン】訂正cron v0.1.76
- kind: cron
- cwd: `C:\Users\Public\Documents\LLC358\_codex_cron_threads`
- model: gpt-5.4
- reasoning: highest
- site_id: `oripagate`
- workflow_id: `oripagate-campaign-invite-code-ja`
- article_type: `campaign-invite-code`
- public_category_url: `https://oripagate.jp/campaign-invite-code/`
- do_not_use_url: `https://oripagate.jp/campaign-code-dictionary/`
- hub_url: `https://oripagate-hub.secure358.com/`
- role: 訂正
- schedule intent: 1回/日
- recommended RRULE: 固定値は置かない。既存ACTIVE cronを確認し、起動時間設定ルールに従って決める。
役割目的: 指定されたキャンペーン記事の指定FAILだけを直し、公開またはpreview HTMLで再測定する。
## 絶対スコープ
- 対象は OripaGate専用HUB、OripaGate公開サイト、`campaign-invite-code` だけ。
- AIfan HUB、porn-fun HUB、Invest358、他サイトHUB、他記事タイプ、代表が指定していない公開記事は触らない。
- ローカル変更は `C:\Users\Public\Documents\LLC358\Autopost358\HUB\oripagate` 内だけ。
- cron実行cwdは `C:\Users\Public\Documents\LLC358\_codex_cron_threads`。正本・保存証跡はOripaGateサイトHUB内に残す。
- Gate/Manual参照先は `C:\Users\Public\Documents\LLC358\Autopost358\HUB\oripagate\gates\current` と `cron_prompts/current/campaign-invite-code` に統一する。
- 代表PC固有パス、共有Hub Gate、外部フォルダのfallback copyを参照先にしない。
- 手元キーは探す。キー値・認証値・秘密値をチャット、記事本文、Hubレコード、validator_resultに出力しない。
- 確認依頼では編集しない。作業指示の場合だけ、触る対象と触らない対象を先に明記して進める。
## 起動時に必ず確認するもの
- live Hub: `https://oripagate-hub.secure358.com/`
- `api=status` で live Hub が OripaGate専用であることを確認する。
- `api=agent_pack&site_id=oripagate&workflow_id=oripagate-campaign-invite-code-ja` を取得し、キャンペーン通常記事用の最新Rule/Manualだけを読む。
- `api=agent_work_queue` で自分のrole対象だけを確認する。対象なしなら対象なし報告をHubへ保存して終了する。
- 公開先は `https://oripagate.jp/campaign-invite-code/`。`https://oripagate.jp/campaign-code-dictionary/` は使わない。
## 起動時間設定ルール
- 既存ACTIVE cronを確認してから設定する。
- 同時刻と前後10分を避ける。
- 00分固定を避ける。
- 分は 07 / 13 / 19 / 26 / 34 / 41 / 48 / 55 を優先候補にする。
- 朝・昼・夕・夜へ分散する。
- 空けられない場合は5分間隔、1分間隔、最後は同時刻の順で詰める。混雑だけで作成停止しない。
## 入力条件
- Hubで自分のrole対象になっている修正対象だけを扱う。代表指定またはHub指定がない記事は触らない。
- 対象URL、article_key、slug、指定FAIL、対象箇所、期待する修正内容、前回validator_result_json_pathを確認する。
- 指定外の記事、指定外セクション、他記事タイプ、他カテゴリには触らない。
## 修正対象
- 冒頭ステータス注意文がない、状態が曖昧、期限未確認を断定している場合は、開催中/終了済み/期限未確認のどれかへ直す。
- 公式テキストリンク形式が違う場合は、指定HTMLへ直す。hrefは公式TOPまたは確認済みアフィリエイトリンクにする。
- キャンペーン詳細URL、公式ニュース、公式SNS、ASP詳細ページを主リンクにしている場合は、公式TOPまたは確認済みアフィリエイトリンクへ直し、元URLは根拠URLとして扱う。
- 常体でない文、内部語が出ている文、「カテゴリ」「導線」を読者向け本文で使っている文を自然な読者向け表現へ直す。
- Q&A exact構造が不足している場合は、本文内に5件以上になるよう直す。
- 内部リンクが未確認、404、preview専用、言語違いの場合は、公開到達確認済みの最終HTTP 200リンクへ直す。
- 装飾不足、装飾過多、有効BOX不足がある場合は、読者判断を助ける範囲で直す。
- 根拠が未確認の内容は断定しない。未確認点は自然文で残す。
## 個別構造Gate
- 冒頭ステータス注意文は、開催中、終了済み、期限未確認のいずれかを必ず置く。
- 開催中: `⚠️ このキャンペーンはYYYY年M月D日HH:MMまでだ。内容変更や早期終了の可能性があるため、利用前に公式TOPの最新表示を確認すること。`
- 終了済み: `⚠️ このキャンペーンはYYYY年M月D日HH:MMに終了している。現在は同じ条件で利用できない可能性があるため、最新情報は公式TOPで確認すること。`
- 期限未確認: `⚠️ このキャンペーンの終了日は公式情報から確認中だ。利用前に公式TOPで最新条件を確認すること。`
- 公式テキストリンクは必ず次の完全HTMLを使う。
- `<p style="text-align: right;"><span class="badge badge-red">公式</span><b>:<a href="公式URLTOP" target="_blank" rel="nofollow noopener">サイト名+イベント・キャンペーン名</a></b></p>`
- アンカーテキストは `サイト名+イベント・キャンペーン名` を基本形にする。例: `ポケパ365 2026年5月限定イベント`。
- 「公式サイトはこちら」「詳細はこちら」だけの曖昧なアンカーテキストは禁止。読者がどのサービスのどのキャンペーンを確認するリンクか分かる文言にする。
- アンカーテキストに未確認の特典、未確認の期限、誇張表現を入れない。
- Q&Aは本文内に5件以上置き、必ず次の完全HTML構造にする。
- `<details class="qa-box"><summary class="qa-question">質問内容</summary><div class="qa-answer">回答内容</div></details>`
- qa-boxの質問文は、読者が実際に迷う内容を1問1答で書く。summary内に質問、div.qa-answer内に回答を入れる。
- qa-boxの回答は敬体で書き、公式確認が必要な内容は断定しすぎず、確認先や未確認点を自然に書く。
- 1つのqa-boxに複数質問を詰め込まない。空回答、短すぎる回答、本文と同じ文の重複はFAIL。
- FAQ JSON-LD、script、schema、コメント、サイドバー、フッター、class数だけの検出はQ&A件数に数えない。
- 指定FAILがこの構造不足の場合は、上記の完全HTMLへ直してから再測定する。
### 装飾比率・KW出現率の必須測定キー
Marker: `ORIPAGATE_CAMPAIGN_DECORATION_KW_MEASUREMENT_KEYS_20260611`
公開HTMLで装飾比率を測るときは、装飾の有無だけではなく、本文量に対して装飾が薄すぎないか、偏りすぎていないかを数値で見る。`campaign_decoration_units_per_1000_chars` を保存し、黒太字、赤太字、黒太字+黄色アンダーマーカー、装飾BOX、✅/⚠️、右寄せ公式リンク、qa-boxの件数と合わせて判断する。この数値がない場合は、装飾バランスを測っていないため `CAMPAIGN_DECORATION_GOLDEN_RATIO_MISSING` とする。
KW出現率は、主KW、条件KW、期限KW、共起語、関連語が本文に自然に入っているかを見るために測る。公開HTML本文からテキストを抽出し、`campaign_kw_occurrence_rates` または同等のKW別出現率を保存する。KW出現率を測っていない場合は `CAMPAIGN_KW_OCCURRENCE_RATE_NOT_MEASURED` とし、KWを羅列しただけの文章がある場合は `PUBLIC_BODY_MECHANICAL_KEYWORD_LIST_SENTENCE_FOUND` として本文を書き直す。
## KW・共起語・関連語・装飾修正Gate
- 主KW、補助KW、条件確認KW、期限確認KW、共起語、関連語が本文内で自然に使われているか測定する。
- KW出現率の過少・過多、共起語不足、関連語不足、KW羅列文、検索語貼り付け文をFAILにする。
- 装飾黄金比、装飾最低床、有効BOX数、✅/⚠️アイコン使用、装飾BOX使用、装飾過多の有無を公開またはpreview HTMLで測定する。
- 結果は `validator_result.json` に保存する。
- 欠落時は `CAMPAIGN_KEYWORD_PACK_MISSING`、`CAMPAIGN_KW_OCCURRENCE_RATE_MISSING`、`CAMPAIGN_KW_OCCURRENCE_RATE_OUT_OF_RANGE`、`CAMPAIGN_COOCCURRENCE_TERMS_MISSING`、`CAMPAIGN_RELATED_TERMS_MISSING`、`PUBLIC_BODY_MECHANICAL_KEYWORD_LIST_SENTENCE_FOUND`、`CAMPAIGN_DECORATION_GOLDEN_RATIO_MISSING`、`CAMPAIGN_DECORATION_MINIMUM_FLOOR_MISSING`、`CAMPAIGN_VALID_STYLE_BOX_MISSING`、`CAMPAIGN_CHECK_CAUTION_ICON_MISSING`、`CAMPAIGN_DECORATION_BOX_MISSING` でFAIL。
### 必須FAILの判定文(訂正)
Marker: `ORIPAGATE_CAMPAIGN_BALANCED_ROLE_PLACED_FAIL_REQUIREMENTS_20260611`
訂正では、指摘された1点だけを直して終わってはいけない。同種の欠落を本文全体で探し、公開記事を更新し、公開HTMLを再取得して再測定する。修正後も公開HTML測定、validator_result.json更新、必須FAIL0件化がない場合は完了不可とする。
装飾欠落、右寄せ公式リンク欠落、Q&A構造ミス、常体ミス、内部語漏れ、内部リンク200未確認は、本文修正、公開投稿更新、公開HTML再測定、validator_result.json更新、TASK8 handoff更新まで行う。readbackがなければ訂正完了とはしない。
## 再測定
- 修正後に公開またはpreview HTMLを再取得する。
- 冒頭ステータス、公式リンク、CTA URL、Q&A exact、内部リンクHTTP、常体、装飾、読者目線自然文、内部語なしを再測定する。
- `validator_result.json` に修正前、修正後、取得URL、確認日時、残FAIL、PASS条件を保存する。
- FAILが残る場合は、`failed_gate_names` / `required_gate_failures` / `quality_delta_items` の3つすべてへ同じFAIL名を入れる。
## 必須FAIL
- `CAMPAIGN_OPENING_STATUS_GATE_MISSING`
- `CAMPAIGN_OFFICIAL_TEXT_LINK_FORMAT_MISSING`
- `CAMPAIGN_CTA_URL_NOT_OFFICIAL_TOP_OR_AFFILIATE`
- `POLITE_STYLE_REQUIRED_FAIL`
- `Q_AND_A_EXACT_STRUCTURE_MISSING`
- `PUBLIC_BODY_INTERNAL_META_LEAK`
- `PUBLIC_BODY_READER_UNNATURAL_CATEGORY_WORD_USED`
- `PUBLIC_BODY_READER_UNNATURAL_DOSEN_WORD_USED`
- `PUBLIC_BODY_AI_LIKE_STIFF_SENTENCE_FOUND`
- `PUBLIC_BODY_MECHANICAL_KEYWORD_LIST_SENTENCE_FOUND`
- `PUBLIC_HTML_MEASUREMENT_MISSING`
- `VALIDATOR_RESULT_JSON_MISSING`
- `INTERNAL_LINK_NOT_200_FOUND`
### 必須FAIL 1件即FAIL・修正ループ・TASK8完了条件
Marker: `ORIPAGATE_CAMPAIGN_HARD_FAIL_ZERO_TASK8_LOOP_20260611`
必須FAILの要件は、1個でも抜けていたら機械判定で即FAILにする。軽微メモや注意メモに逃がしてはいけない。必須FAILが1件でも出た場合、その工程は完了できない。
FAILが1件でも出た場合は、対象のGate、マニュアル、928番依頼文の該当箇所を読み直し、本文または証跡を修正し、公開HTMLを再取得し、validator_result.jsonを再生成し、同じ機械判定を再実行する。`failed_gate_names`、`required_gate_failures`、`quality_delta_items` の3つすべてに同じFAIL名を入れ、FAIL0件になるまで修正を繰り返す。
制作以降の工程は、FAIL0件、公開投稿済み、公開HTML測定済み、validator_result.json更新済み、TASK8 handoff作成済み、TASK8 handoff readback確認済みになって初めて完了できる。TASK8へ渡す前に1件でもFAILが残っている場合は、handoffしてはいけない。
## 保存と完了
- 必須FAILゼロまで修正、再取得、再測定を繰り返す。
- Hubへ修正内容、対象URL、validator_result_json_path、残FAIL、readback結果を保存する。
- readbackで自分の修正証跡が見えることを確認する。
PROMPT_END
OripaGate【通常記事・キャンペーン】改善ハンドオフcron automation作成依頼文
PROMPT_START
# OripaGate【通常記事・キャンペーン】改善ハンドオフcron v0.1.76
- kind: cron
- cwd: `C:\Users\Public\Documents\LLC358\_codex_cron_threads`
- model: gpt-5.4
- reasoning: highest
- site_id: `oripagate`
- workflow_id: `oripagate-campaign-invite-code-ja`
- article_type: `campaign-invite-code`
- public_category_url: `https://oripagate.jp/campaign-invite-code/`
- do_not_use_url: `https://oripagate.jp/campaign-code-dictionary/`
- hub_url: `https://oripagate-hub.secure358.com/`
- role: 改善ハンドオフ
- schedule intent: 1回/日
- recommended RRULE: 固定値は置かない。既存ACTIVE cronを確認し、起動時間設定ルールに従って決める。
役割目的: 検査済みキャンペーン記事の残課題、再発防止、次回改善材料をHubへ整理して渡す。
## 絶対スコープ
- 対象は OripaGate専用HUB、OripaGate公開サイト、`campaign-invite-code` だけ。
- AIfan HUB、porn-fun HUB、Invest358、他サイトHUB、他記事タイプ、代表が指定していない公開記事は触らない。
- ローカル変更は `C:\Users\Public\Documents\LLC358\Autopost358\HUB\oripagate` 内だけ。
- cron実行cwdは `C:\Users\Public\Documents\LLC358\_codex_cron_threads`。正本・保存証跡はOripaGateサイトHUB内に残す。
- Gate/Manual参照先は `C:\Users\Public\Documents\LLC358\Autopost358\HUB\oripagate\gates\current` と `cron_prompts/current/campaign-invite-code` に統一する。
- 代表PC固有パス、共有Hub Gate、外部フォルダのfallback copyを参照先にしない。
- 手元キーは探す。キー値・認証値・秘密値をチャット、記事本文、Hubレコード、validator_resultに出力しない。
- 確認依頼では編集しない。作業指示の場合だけ、触る対象と触らない対象を先に明記して進める。
## 起動時に必ず確認するもの
- live Hub: `https://oripagate-hub.secure358.com/`
- `api=status` で live Hub が OripaGate専用であることを確認する。
- `api=agent_pack&site_id=oripagate&workflow_id=oripagate-campaign-invite-code-ja` を取得し、キャンペーン通常記事用の最新Rule/Manualだけを読む。
- `api=agent_work_queue` で自分のrole対象だけを確認する。対象なしなら対象なし報告をHubへ保存して終了する。
- 公開先は `https://oripagate.jp/campaign-invite-code/`。`https://oripagate.jp/campaign-code-dictionary/` は使わない。
## 起動時間設定ルール
- 既存ACTIVE cronを確認してから設定する。
- 同時刻と前後10分を避ける。
- 00分固定を避ける。
- 分は 07 / 13 / 19 / 26 / 34 / 41 / 48 / 55 を優先候補にする。
- 朝・昼・夕・夜へ分散する。
- 空けられない場合は5分間隔、1分間隔、最後は同時刻の順で詰める。混雑だけで作成停止しない。
## 入力条件
- Hubで自分のrole対象になっているキャンペーン記事だけを確認する。
- 公開URLまたはpreview URL、article_key、slug、最新validator_result_json_path、残FAIL、修正済み内容、未確認点、根拠URLを確認する。
- 記事本文を直接直さない。公開記事、下書き、他記事タイプ、他カテゴリには触らない。
## 整理する内容
- 冒頭ステータスGateの結果。
- 検査non-stop制作レディGateの結果。
- 公式テキストリンクとCTA URLの結果。
- Q&A exact、常体、装飾、内部リンクHTTP 200、読者目線自然文、内部語なしの結果。
- 未確認点、断定禁止点、公式TOP URL、根拠URL、確認日。
- 残FAILがある場合は、FAIL名、対象箇所、なぜ残っているか、次に必要な対応。
- 必須FAILゼロの場合は、再発防止メモ、次回の改善候補、保守時に見るべき箇所。
## 個別構造Gate
- 冒頭ステータス注意文は、開催中、終了済み、期限未確認のいずれかを必ず置く。
- 開催中: `⚠️ このキャンペーンはYYYY年M月D日HH:MMまでだ。内容変更や早期終了の可能性があるため、利用前に公式TOPの最新表示を確認すること。`
- 終了済み: `⚠️ このキャンペーンはYYYY年M月D日HH:MMに終了している。現在は同じ条件で利用できない可能性があるため、最新情報は公式TOPで確認すること。`
- 期限未確認: `⚠️ このキャンペーンの終了日は公式情報から確認中だ。利用前に公式TOPで最新条件を確認すること。`
- 公式テキストリンクは必ず次の完全HTMLを使う。
- `<p style="text-align: right;"><span class="badge badge-red">公式</span><b>:<a href="公式URLTOP" target="_blank" rel="nofollow noopener">サイト名+イベント・キャンペーン名</a></b></p>`
- アンカーテキストは `サイト名+イベント・キャンペーン名` を基本形にする。例: `ポケパ365 2026年5月限定イベント`。
- 「公式サイトはこちら」「詳細はこちら」だけの曖昧なアンカーテキストは禁止。読者がどのサービスのどのキャンペーンを確認するリンクか分かる文言にする。
- アンカーテキストに未確認の特典、未確認の期限、誇張表現を入れない。
- Q&Aは本文内に5件以上置き、必ず次の完全HTML構造にする。
- `<details class="qa-box"><summary class="qa-question">質問内容</summary><div class="qa-answer">回答内容</div></details>`
- qa-boxの質問文は、読者が実際に迷う内容を1問1答で書く。summary内に質問、div.qa-answer内に回答を入れる。
- qa-boxの回答は敬体で書き、公式確認が必要な内容は断定しすぎず、確認先や未確認点を自然に書く。
- 1つのqa-boxに複数質問を詰め込まない。空回答、短すぎる回答、本文と同じ文の重複はFAIL。
- FAQ JSON-LD、script、schema、コメント、サイドバー、フッター、class数だけの検出はQ&A件数に数えない。
- handoffでは、上記の完全HTMLが最終HTMLに残っているか、validator_result_json_pathで確認できるかを整理する。
### 装飾比率・KW出現率の必須測定キー
Marker: `ORIPAGATE_CAMPAIGN_DECORATION_KW_MEASUREMENT_KEYS_20260611`
公開HTMLで装飾比率を測るときは、装飾の有無だけではなく、本文量に対して装飾が薄すぎないか、偏りすぎていないかを数値で見る。`campaign_decoration_units_per_1000_chars` を保存し、黒太字、赤太字、黒太字+黄色アンダーマーカー、装飾BOX、✅/⚠️、右寄せ公式リンク、qa-boxの件数と合わせて判断する。この数値がない場合は、装飾バランスを測っていないため `CAMPAIGN_DECORATION_GOLDEN_RATIO_MISSING` とする。
KW出現率は、主KW、条件KW、期限KW、共起語、関連語が本文に自然に入っているかを見るために測る。公開HTML本文からテキストを抽出し、`campaign_kw_occurrence_rates` または同等のKW別出現率を保存する。KW出現率を測っていない場合は `CAMPAIGN_KW_OCCURRENCE_RATE_NOT_MEASURED` とし、KWを羅列しただけの文章がある場合は `PUBLIC_BODY_MECHANICAL_KEYWORD_LIST_SENTENCE_FOUND` として本文を書き直す。
## KW・共起語・関連語・装飾handoff確認Gate
- 主KW、補助KW、条件確認KW、期限確認KW、共起語、関連語が本文内で自然に使われているか測定する。
- KW出現率の過少・過多、共起語不足、関連語不足、KW羅列文、検索語貼り付け文をFAILにする。
- 装飾黄金比、装飾最低床、有効BOX数、✅/⚠️アイコン使用、装飾BOX使用、装飾過多の有無を公開またはpreview HTMLで測定する。
- 結果は `validator_result.json` に保存する。
- 欠落時は `CAMPAIGN_KEYWORD_PACK_MISSING`、`CAMPAIGN_KW_OCCURRENCE_RATE_MISSING`、`CAMPAIGN_KW_OCCURRENCE_RATE_OUT_OF_RANGE`、`CAMPAIGN_COOCCURRENCE_TERMS_MISSING`、`CAMPAIGN_RELATED_TERMS_MISSING`、`PUBLIC_BODY_MECHANICAL_KEYWORD_LIST_SENTENCE_FOUND`、`CAMPAIGN_DECORATION_GOLDEN_RATIO_MISSING`、`CAMPAIGN_DECORATION_MINIMUM_FLOOR_MISSING`、`CAMPAIGN_VALID_STYLE_BOX_MISSING`、`CAMPAIGN_CHECK_CAUTION_ICON_MISSING`、`CAMPAIGN_DECORATION_BOX_MISSING` でFAIL。
### 必須FAILの判定文(改善ハンドオフ/TASK8)
Marker: `ORIPAGATE_CAMPAIGN_BALANCED_ROLE_PLACED_FAIL_REQUIREMENTS_20260611`
改善ハンドオフ/TASK8では、preview成果物だけを渡してはいけない。公開URL、WordPress post id、status=publish、公開HTML測定結果、validator_result.json、必須FAIL0件、修正履歴、再発防止メモを渡す。handoffを作っただけで読み返していない場合は `TASK8_HANDOFF_READBACK_MISSING` とする。
handoff時点で必須FAILが1件でも残る場合は、本文を直す工程へ戻す。TASK8 handoffは、公開投稿済み、公開HTML測定済み、validator_result.json更新済み、残FAIL0件をreadback確認して初めて完了とする。
### 必須FAIL 1件即FAIL・修正ループ・TASK8完了条件
Marker: `ORIPAGATE_CAMPAIGN_HARD_FAIL_ZERO_TASK8_LOOP_20260611`
必須FAILの要件は、1個でも抜けていたら機械判定で即FAILにする。軽微メモや注意メモに逃がしてはいけない。必須FAILが1件でも出た場合、その工程は完了できない。
FAILが1件でも出た場合は、対象のGate、マニュアル、928番依頼文の該当箇所を読み直し、本文または証跡を修正し、公開HTMLを再取得し、validator_result.jsonを再生成し、同じ機械判定を再実行する。`failed_gate_names`、`required_gate_failures`、`quality_delta_items` の3つすべてに同じFAIL名を入れ、FAIL0件になるまで修正を繰り返す。
制作以降の工程は、FAIL0件、公開投稿済み、公開HTML測定済み、validator_result.json更新済み、TASK8 handoff作成済み、TASK8 handoff readback確認済みになって初めて完了できる。TASK8へ渡す前に1件でもFAILが残っている場合は、handoffしてはいけない。
## 完了判定
- 必須FAILが残っている場合は完了扱いにしない。修正対象として戻す情報を保存する。
- 必須FAILゼロ、公開/preview HTML測定、validator_result_json_path、Hub readback、根拠URL、未確認点整理が揃っている場合だけ、task8 handoff情報として保存する。
- 自己申告PASS、固定true、件数だけPASS、証跡なしPASSは禁止。
## 保存と完了
- Hubへ handoff summary、validator_result_json_path、公開/preview HTML確認URL、残課題、再発防止メモ、次回改善案、readback結果を保存する。
- readbackできなければ完了と言わず、BLOCKED_HUB_WRITEBACK または BLOCKED_HUB_READBACK として残す。
PROMPT_END
更新確認チェック
- Marker `oripagate-cron-request-v0169-pornfun560-gate-port-20260609` が本文にある。
- PROMPT_START /
### v0.1.76 終了済み除外・未確認再確認Gate(検査cron本文内必須)
## キャンペーン検査 終了済み除外・未確認再確認 Gate
Marker: `ORIPAGATE_CAMPAIGN_EXPIRED_EXCLUSION_AND_RECHECK_GATE_20260610`
Version: `v0.1.76-oripagate-campaign-cron-bridge-and-active-only-20260610`
検査cronは、明らかに期間終了・終了済みのキャンペーンを制作cronへ回さない。明らかに終わっている候補は除外し、除外理由と根拠URLを残す。
一方で、終了済みと断定できない非架空候補は落とさない。期限未確認、開催状態不明、ログイン後限定で確認不可、弱い根拠、条件未確認の候補は、公開面で見えた事実・未確認点・再確認理由・根拠URL・KW素材を付箋し、`production_ready=false` / `recheck_required=true` の再確認候補として保存する。
検査cronの判定:
- `production_ready=true`: 確認日時点で現在開催中、または現在利用可能と確認できた候補だけ。
- `exclude_reason=expired`: 明らかに期間終了・終了済みと確認できた候補。制作へ回さず、再確認候補にも混ぜない。
- `production_ready=false`: 終了済みとは断定できないが、期限未確認、開催状態不明、ログイン後限定で開催確認不可、弱い根拠、条件未確認の候補。捨てずに再確認候補として保存する。
- `hard_stop=true`: 明確な架空業者、明確な架空キャンペーン、危険・違法な対象、OripaGateキャンペーン通常記事として明確に記事タイプ外の候補だけ。
明らかに終了済みの候補で保存する最低限の除外メモ:
- キャンペーン名または公開面で見えたラベル
- サービス名
- 終了済みと判断した表示
- 根拠URL
- 確認日時
- 除外理由
再確認候補で保存する最低限の付箋:
- キャンペーン名または公開面で見えたラベル
- サービス名
- 公開面で見えた表示
- 特典内容
- 条件と対象者
- 期間、期限、開催状態、または未確認状態
- 公式TOP URLまたは確認済みアフィリエイトリンク候補
- 根拠URL
- 確認日時
- 未確認点
- 再確認理由
- 制作で再確認すべき点
- 主KW
- KW出現率の目安
- 共起語
- 関連語
必須FAIL:
- `CAMPAIGN_EXPIRED_CAMPAIGN_SENT_TO_PRODUCTION`: 明らかに終了済みの候補を制作へ回した。
- `CAMPAIGN_EXPIRED_CAMPAIGN_SAVED_AS_RECHECK`: 明らかに終了済みの候補を再確認候補に混ぜた。
- `CAMPAIGN_EXPIRED_EXCLUSION_REASON_MISSING`: 終了済み除外候補に除外理由・根拠URL・確認日時がない。
- `CAMPAIGN_UNCONFIRMED_NONFICTION_CANDIDATE_DROPPED`: 終了済みと断定できない非架空候補を落とした。
- `CAMPAIGN_INSPECTION_RECHECK_STICKY_NOTES_MISSING`: 再確認候補の事実、未確認点、再確認理由、根拠URL、KW素材が不足している。
必須FAILが出た場合は、`failed_gate_names` / `required_gate_failures` / `quality_delta_items` の3つすべてに同じFAIL名を入れ、候補を補修する。
## キャンペーン制作 公開完了 Gate
Marker: `ORIPAGATE_CAMPAIGN_PRODUCTION_PUBLISH_COMPLETION_GATE_20260610`
Version: `v0.1.76-oripagate-campaign-cron-bridge-and-active-only-20260610`
制作cronは、代表からキャンペーン記事の制作・投稿・公開を指示され、`production_ready=true` 候補を受け取った場合、preview保存や成果物保存だけで完了してはいけない。preview HTML、article_body.html、validator_result.json、Hub Files保存は検証証跡であり、制作完了ではない。
制作cronの完了条件:
- WordPress RESTで `status=publish` の投稿を作成または更新する。
- 公開先は `https://oripagate.jp/campaign-invite-code/` 配下の通常記事にする。
- `https://oripagate.jp/campaign-code-dictionary/` は使わない。
- 投稿後に公開URLを取得する。
- 公開URLへアクセスし、公開HTMLで本文、冒頭ステータス、右寄せ公式テキストリンク、Q&A、装飾、内部リンク、公式リンクを実測する。
- `validator_result.json` に公開URL、HTTP 200、公開HTML測定結果、WordPress post id、slug、status=publish、確認日時を保存する。
- 必須FAILを0件にする。FAILが1件でも残っている状態で完了してはいけない。
- TASK8へhandoffするための成果物、公開URL、validator_result.json、修正履歴、残FAIL0件証跡、次工程への申し送りを保存する。
- TASK8 handoffが完了し、handoff証跡をreadback確認する。
- Hubへ保存する成果物には、previewだけでなく公開URLと公開HTML測定結果を必ず含める。
preview保存で止めてよい場合:
- 代表が明示的に「previewだけ」「下書きだけ」「公開しない」と指示した場合だけ。
- その場合も完了報告には「公開未実施」と明記する。
必須FAIL:
- `CAMPAIGN_PRODUCTION_STOPPED_AT_PREVIEW_ONLY`: preview保存、article_body保存、Hub Files保存だけで制作完了扱いにした。
- `CAMPAIGN_PRODUCTION_PUBLISH_STATUS_MISSING`: WordPress投稿の `status=publish` 証跡がない。
- `CAMPAIGN_PRODUCTION_PUBLIC_URL_MISSING`: 公開URLがない。
- `CAMPAIGN_PRODUCTION_PUBLIC_HTML_MEASUREMENT_MISSING`: 公開HTMLで測定していない。
- `CAMPAIGN_PRODUCTION_REQUIRED_FAILS_REMAIN`: 必須FAILが1件以上残っている。
- `CAMPAIGN_PRODUCTION_TASK8_HANDOFF_MISSING`: TASK8 handoffがない。
- `CAMPAIGN_PRODUCTION_TASK8_HANDOFF_READBACK_MISSING`: TASK8 handoff証跡のreadback確認がない。
- `CAMPAIGN_PRODUCTION_WRONG_CATEGORY_URL`: `campaign-invite-code` 以外、または `campaign-code-dictionary` へ入れた。
- `CAMPAIGN_PRODUCTION_COMPLETION_REPORT_FALSE`: preview保存だけなのに公開完了のように報告した。
必須FAILが出た場合は、`failed_gate_names` / `required_gate_failures` / `quality_delta_items` の3つすべてに同じFAIL名を入れ、公開投稿、公開HTML再取得、validator再実行、FAIL0件化、TASK8 handoff、Hub証跡更新まで修正する。
## キャンペーン制作 装飾バランス必須 Gate
Marker: `ORIPAGATE_CAMPAIGN_DECORATION_BALANCE_GATE_20260610`
Version: `v0.1.76-oripagate-campaign-cron-bridge-and-active-only-20260610`
Reference: `https://oripagate.jp/pokepa365-may-2026-limited-event/`
キャンペーン制作、高品質チェック、訂正、TASK8 handoffは、装飾を任意扱いにしない。`https://oripagate.jp/pokepa365-may-2026-limited-event/` のように、キャンペーン内容が読みやすく、要点・注意点・行動リンク・Q&Aが自然に目に入る装飾バランスを公開HTMLで実測する。
必須の装飾要素:
- 黒太字
- 赤太字
- 黒太字+黄色マーカー
- ✅などのチェックアイコン
- ⚠️などの注意アイコン
- 要点BOX
- 注意BOX
- キャンペーン概要BOX
- まとめ/判断BOX
- 右寄せ公式テキストリンク
- Q&A exact `.qa-box`
装飾の考え方:
- 素の段落だけで白々しく仕上げた本文はFAIL。
- 装飾BOXがない本文はFAIL。
- ✅や⚠️などのチェック/注意アイコンがない本文はFAIL。
- 強調が特定箇所に偏り、本文全体の読みやすさが崩れている場合はFAIL。
- 装飾だけが多く、事実・条件・期限・注意点が薄い場合もFAIL。
- 参考記事の装飾量を丸写しせず、本文量に対して同等の読みやすさになるように調整する。
公開HTML validator必須キー:
- `campaign_decoration_balance_gate`
- `campaign_decoration_reference_url`
- `campaign_decoration_reference_checked`
- `campaign_black_bold_count`
- `campaign_red_bold_count`
- `campaign_yellow_marker_count`
- `campaign_check_icon_count`
- `campaign_caution_icon_count`
- `campaign_valid_box_count`
- `campaign_summary_decision_box_count`
- `campaign_official_text_link_count`
- `campaign_qa_box_count`
- `campaign_decoration_balance_notes`
- `campaign_decoration_balance_gate_result`
必須FAIL:
- `CAMPAIGN_DECORATION_BALANCE_GATE_MISSING`
- `CAMPAIGN_DECORATION_REFERENCE_NOT_MEASURED`
- `CAMPAIGN_DECORATION_BOX_MISSING`
- `CAMPAIGN_DECORATION_CHECK_ICON_MISSING`
- `CAMPAIGN_DECORATION_CAUTION_ICON_MISSING`
- `CAMPAIGN_DECORATION_GOLDEN_RATIO_MISSING`
- `CAMPAIGN_DECORATION_STERILE_PLAIN_TEXT_FOUND`
- `CAMPAIGN_DECORATION_OVERDONE_OR_UNBALANCED`
必須FAILが出た場合は、`failed_gate_names` / `required_gate_failures` / `quality_delta_items` の3つすべてに同じFAIL名を入れ、公開HTML再取得、装飾補修、validator再実行、FAIL0件化、TASK8 handoff更新までやり直す。
PROMPT_END は全体で9組、個別cron作成依頼文では6組ある。
- 各PROMPTは自分のroleに必要な作業だけを書く。
- 各PROMPT内に他roleの実行手順、公開更新手順、修正手順、handoff手順を混ぜない。
- 収集PROMPTは候補在庫作成だけ。
- 検査PROMPTは事実確認とproduction_ready付箋だけ。
- 制作PROMPTはproduction_ready対象1件の記事作成と自分の成果物測定だけ。
- 高品質チェックPROMPTは測定とFAIL保存だけで、本文を直さない。
- 訂正PROMPTは指定FAILの修正と再測定だけ。
- 改善ハンドオフPROMPTは証跡整理と引き渡しだけで、本文を直さない。
- キャンペーン記事の冒頭ステータスGate、検査non-stop制作レディGate、公式リンクGateは必要な工程だけが参照する。
- AIfan HUB、porn-fun HUB、Invest358、他HUBを触らない指示が各PROMPT内に入っている。
- 古い共有Gateを参照先にしない指示が各PROMPT内に入っている。
- 秘密値、トークン値、認証値を含まない。
キャンペーン記事の冒頭ステータスGate
キャンペーン記事は、公開後に期限切れで読まれても読者が誤解しないよう、H1直後の冒頭で開催状態と確認先を必ず明示する。記事構成は H1 → リード文 → 冒頭ステータス注意文 → 右寄せ公式テキストリンク → キャンペーン概要 の順を必須とする。
- H1には、サービス名またはキャンペーン名と、確認できる場合は期間・年月を入れる。未確認の期限を断定しない。
- リード文の1文目で、対象サービス、キャンペーン内容、開催中・終了済み・予定・期限未確認のいずれかを自然な敬体で書く。
- リード直後に、以下いずれかの冒頭ステータス注意文を必ず置く。敬体で書き、読者に公式TOPまたはアフィリエイトリンクで最新条件を確認させる。
- 開催中テンプレート:
⚠️ このキャンペーンはYYYY年M月D日HH:MMまでだ。内容変更や早期終了の可能性があるため、利用前に公式TOPの最新表示を確認すること。 - 終了済みテンプレート:
⚠️ このキャンペーンはYYYY年M月D日HH:MMに終了している。現在は同じ条件で利用できない可能性があるため、最新情報は公式TOPで確認すること。 - 期限未確認テンプレート:
⚠️ このキャンペーンの終了日は公式情報から確認中だ。利用前に公式TOPで最新条件を確認すること。 - 冒頭ステータス注意文の直後に、指定済みの公式テキストリンク形式を置く。リンク先は公式TOPまたは確認済みアフィリエイトリンクに限り、キャンペーン詳細URL・公式ニュースURL・公式SNS URL・ASP詳細ページを主リンクにしない。
- その次にキャンペーン概要BOXを置き、対象サービス、期間または状態、特典、重要条件、確認日を短く整理する。
- 公開またはpreview HTMLで、冒頭ステータス注意文、公式テキストリンク、キャンペーン概要BOXの順序と表示を実測し、
validator_result.jsonに保存する。 - 冒頭ステータス注意文がない、開催状態が不明、期限を未確認のまま断定、公式確認先がない、または順序が崩れている場合は
CAMPAIGN_OPENING_STATUS_GATE_MISSINGでFAILにする。 - 検査・制作・高品質チェック・訂正・改善ハンドオフの各段階でこのGateを確認し、FAIL時は
failed_gate_names/required_gate_failures/quality_delta_itemsの3つすべてへ同じFAIL名を入れる。
キャンペーン検査cronの制作レディ鉄則Gate
キャンペーン検査cronは、情報不足を理由に候補を止めない。明確な架空業者、明確な架空キャンペーン、危険・違法な対象、またはOripaGateのキャンペーン通常記事として明らかに記事タイプ違いの場合を除き、取れる限りの事実・未確認点・断定禁止点を付箋し、production_ready=true で制作へ回す。
- 期限切れ、ログイン後限定、アプリ限定、弱い根拠、情報不足、不確実な条件は、停止理由ではなく制作へ渡す付箋にする。
- 検査は、キャンペーン名または見えるラベル、特典内容、条件、期間・日付表記、開催状態、公式TOP URL、根拠URL、確認日、未確認点、断定禁止点を保存する。
- 公式TOPまたは確認済みアフィリエイトリンクが見つかる場合は、読者の主リンク候補として保存する。キャンペーン詳細URL、公式ニュース、公式SNS、ASP詳細ページは根拠URLとして扱う。
- 根拠が一部だけの場合も
production_ready=trueとし、production_recheck_required=trueを付けて制作へ回す。 - 制作は、事実は事実として、未確認は未確認として、冒頭ステータスGateに沿って慎重に記事化する。
- 明確なhard-stopではない候補を検査段階で止めた場合は
CAMPAIGN_INSPECTION_STOPPED_WITHOUT_HARD_STOPでFAILにする。 - このFAILが出たら、
failed_gate_names/required_gate_failures/quality_delta_itemsの3つすべてへ同じFAIL名を入れ、付箋を補って制作レディへ戻す。
