実装エラー記録【】

  1. 2026-05-19 最新Gate同期 / 全評価スコアcron共通
    1. 必ず読むHub参照
    2. 排他ロックGate
    3. ロック自動復旧Gate
    4. リリース粘りGate
    5. 所要時間統計Gate
    6. 工程所有Gate
    7. 評価スコア記事の冒頭構成Gate
    8. 公式リンク実装Gate
    9. 装飾実装Gate
    10. 視覚シグナル・独自性Gate
    11. 検索意図・共起語反映Gate
    12. 評価項目見出し化Gate
    13. 文体 / FAQ / 構造化データGate
    14. 見本ページ実照合Gate
    15. 品質スコア / 差分修正Gate
    16. 外部PCでのcron実行前提
  2. 対応済み
    1. TaskTemplate参照不備
    2. 検査cronのready表記混線
    3. 公式情報偏重によるHOLD過多
    4. 制作cronのHub認証403
    5. 制作cronの最低品質Gate前倒し
    6. 訂正cronの実修正必達
  3. 次回cronで期待する挙動
  4. 反映対象
  5. 2026-05-19 KW調査パック・出現率Gate / 全評価スコアcron共通
    1. 必読Hub参照
    2. KW調査パックGate
    3. 狙いKW・出現率Gate
    4. 未達時の加筆Gate
    5. 工程別Gate
  6. 2026-05-19 本文品質・網羅性Writing Gate / 全評価スコアcron共通
    1. 必読Hub参照
    2. 本文品質10項目
    3. 工程別Gate
    4. PASS条件マーカー
  7. 2026-05-19 キーワード出現率Hub API / 全評価スコアcron共通
    1. Hub API
    2. Gate
  8. 2026-05-19 自然なキーワードファミリー出現率Gate(全評価スコアcron共通)
    1. 対象キーワード
    2. 出現率目標
    3. 不足時の加筆方法
    4. 通過条件
  9. 2026-05-19 Search Compass分析パックGate(共起語・検索意図・出現率・網羅性)
    1. SEARCH_COMPASS_ANALYSIS_PACK_POLICY
    2. 出現率・共起語・網羅性
    3. 工程別Gate
  10. 2026-05-19 Search Compass API稼働確認済み
  11. 2026-05-19 評価スコアcron 装飾黄金律原案・KW三層Gate
    1. DECORATION_GOLDEN_RATIO_V1_DRAFT
    2. THREE_LAYER_KEYWORD_POLICY_V1
    3. 工程Gate
  12. 2026-05-19 評価スコアcron 並行スレッド共通仕様
    1. LOCK_RETRY_NEXT_CANDIDATE_POLICY
    2. 工程別所有範囲
    3. 失敗条件
  13. 2026-05-19 評価スコアcron リード文自然導入・掲載内容マーカーGate
  14. 2026-05-19 評価スコアcron KW自然化・FAQ qa-box Gate
  15. 2026-05-19 Hub Auth / Network Classification Gate
  16. 2026-05-19 Quality Verdict Concurrency Gate
  17. 2026-05-19 H2/H3 Heading Hierarchy Gate
  18. 2026-05-19 Content Volume / Natural Expansion Gate
  19. 2026-05-20 Runtime Retry / Revision Lock Gate
  20. 2026-05-20 porn-fun Directory Category Genre Gate
  21. 2026-05-20 cron automation命名Gate
  22. 2026-05-20 porn-fun日本語URL正本Gate
  23. 更新履歴:2026-05-23 v6.7 検査cronの止めすぎ防止

2026-05-19 最新Gate同期 / 全評価スコアcron共通

正本: cronは毎回 Main 358 Hub の agent_pack / agent_work_queue / agent_runtime_readiness を読む。cron.goudou-358.jp は公開テンプレート置き場であり、Hubが読めない場合の判断代替ではない。Hub認証が401/403/invalid token/token expired/timeout/DNS/network error等で読めない場合は BLOCKED_HUB_AUTH とし、対象なし、PASS、完了、制作readyなしとは判断しない。

適用範囲: AIfunIO、Nightlife店舗、Nightlifeホテル、porn-fun単体サービス移行を含む評価スコアcron全体。サイト固有Gateがある場合は、共通Gateの上にサイト固有Gateを優先する。

必ず読むHub参照

  • Rules/evaluation-score-cron-six-point-reinforcement-rule-v6-6
  • Manuals/evaluation-score-cron-six-point-reinforcement-gate-v6-6
  • Checks/evaluation-score-cron-six-point-reinforcement-check-v6-6
  • Rules/evaluation-score-cron-lock-gate-rule-v6-6
  • Manuals/evaluation-score-cron-lock-gate-v6-6
  • Checks/evaluation-score-cron-lock-gate-check-v6-6
  • Rules/evaluation-score-cron-lock-fallback-rule-v6-6
  • Manuals/evaluation-score-cron-lock-fallback-gate-v6-6
  • Checks/evaluation-score-cron-lock-fallback-check-v6-6
  • Rules/evaluation-score-cron-release-persistence-rule-v6-6
  • Manuals/evaluation-score-cron-release-persistence-gate-v6-6
  • Checks/evaluation-score-cron-release-persistence-check-v6-6
  • Rules/evaluation-score-cron-runtime-statistics-rule-v6-6
  • Manuals/evaluation-score-cron-runtime-statistics-gate-v6-6
  • Checks/evaluation-score-cron-runtime-statistics-check-v6-6
  • Rules/evaluation-score-cron-visual-originality-rule-v6-6
  • Manuals/evaluation-score-cron-visual-originality-gate-v6-6
  • Checks/evaluation-score-cron-visual-originality-check-v6-6
  • Rules/evaluation-score-cron-search-intent-application-rule-v6-6
  • Manuals/evaluation-score-cron-search-intent-application-gate-v6-6
  • Checks/evaluation-score-cron-search-intent-application-check-v6-6
  • Rules/evaluation-score-cron-stage-ownership-rule-v6-6
  • Manuals/evaluation-score-cron-stage-ownership-gate-v6-6
  • Checks/evaluation-score-cron-stage-ownership-check-v6-6
  • Rules/evaluation-score-cron-decoration-implementation-rule-v6-6
  • Manuals/evaluation-score-cron-decoration-implementation-gate-v6-6
  • Checks/evaluation-score-cron-decoration-implementation-check-v6-6
  • Rules/evaluation-score-cron-score-item-heading-rule-v6-6
  • Manuals/evaluation-score-cron-score-item-heading-gate-v6-6
  • Checks/evaluation-score-cron-score-item-heading-check-v6-6
  • Rules/evaluation-score-cron-no-gap-complete-rule-v6-6
  • Manuals/evaluation-score-cron-no-gap-complete-gate-v6-6
  • Checks/evaluation-score-cron-no-gap-complete-check-v6-6

排他ロックGate

  • cron開始時に対象行へ task_lock / in_progress を作り、locked_by、run_id、lock_expires_at、idempotency_key をHubへ残す。
  • 他cronがロック中の対象は触らない。結果は SKIP_LOCKED として残す。
  • ロック取得前にWordPress本文、Directory Core、FAQ JSON-LD、301、削除、公開状態を書き換えない。
  • 同一記事を制作cronと訂正cronが同時に触らない。制作は新規または明示された全面再制作、訂正は correction_queue / ready_for_retest の既存記事を担当する。

ロック自動復旧Gate

  • agent_task_action task_lock が task_not_found_or_not_recorded を返しただけで代表待ち停止にしない。
  • Hub認証が成功し、agent_pack / agent_work_queue / agent_runtime_readiness が読め、対象候補の旧URL・新URL・slug・article_key相当・workflow_id・task_code・stage ownership が確認できる場合は、自動復旧ロックへ進む。
  • 自動復旧ロックは hub_table_upsert で References に reference_type=cron_soft_lock / source_type=cron_lock_fallback として作る。
  • soft lockには reference_id=cron-soft-lock-{workflow_id}-{article_key_or_slug}-{task_code}、locked_by、lock_owner_agent、lock_stage、run_id、lock_acquired_at、lock_expires_at、idempotency_key、target_old_url、target_new_url を残す。
  • soft lock作成成功なら lock_source=hub_reference_soft_lock / task_lock_missing_recovered=true / target_task_bootstrap_created=true として処理を続ける。
  • soft lockも作れない場合だけ LOCK_ACQUIRE_FAILED。Hub認証不備は BLOCKED_HUB_AUTH、WordPress認証不備は BLOCKED_WP_AUTH。

リリース粘りGate

  • cronの目的は止まる理由を探すことではなく、安全な範囲で高品質記事を前へ進めること。
  • Hub認証不備は BLOCKED_HUB_AUTH、WordPress認証不備は BLOCKED_WP_AUTH。対象不明、工程所有違反、危険情報根拠不足、承認必須操作は停止する。
  • task_not_found_or_not_recorded、公式情報の一部不足、通常の品質不足、候補1件のHOLD/EXCLUDE/LOCKEDだけで代表待ち停止にしない。
  • 制作cronは品質不足を同一run内で最低2回自己修正する。常体Strict、公式タグ、marker-under+b、赤太字、✅/⚠️とli分離、評価項目見出し化、見本4URL実照合、section id / h2 id は自己修正対象。
  • 高品質cronは不足点を quality_delta_items / fix_targets / expected_html_conditions / retest_required=true として訂正cronへ渡す。
  • 訂正cronは quality_delta_items を実修正し、公開HTMLまたはプレビューHTMLで再確認する。直せない場合だけ BLOCKED_CORRECTION_UNRESOLVED。
  • 結果には release_attempted=true、self_repair_passes、attempted_repair_count、remaining_delta_items、next_candidate_selected、next_stage を残す。

所要時間統計Gate

  • 各cron/各タスクの平均必要時間を後で統計化するため、実行ごとに開始・終了・所要秒数・工程・結果をHubへ残す。
  • 開始時に run_started_at_jst、run_id、automation_id、workflow_id、task_code、task_stage、site_id、article_type_id、content_set を保持する。
  • 終了時に run_finished_at_jst、elapsed_seconds、elapsed_minutes、result_status、processed_count、skipped_count、blocked_count、failure_reason、next_stage を残す。
  • Hub記録先は References。reference_type=cron_runtime_stat / source_type=cron_run_metrics / reference_id=cron-runtime-{workflow_id}-{task_code}-{run_id} とする。
  • 統計集計キーは site_id、article_type_id、content_set、task_code、task_stage、result_status、elapsed_seconds。
  • Hub認証が通っている限り、WP認証不備、対象不明、ロック競合、品質FAIL、訂正未解決でも cron_runtime_stat を残す。
  • Hub認証そのものが読めない BLOCKED_HUB_AUTH の場合はHubへ書けないため、memoryへ runtime_stat_pending=true を残す。

工程所有Gate

  • 制作cronは新規制作または明示された全面再制作だけを扱う。task8_recheck、ready_for_retest、correction_queue、quality_pass、301_ready、published は制作対象にしない。
  • 高品質cronは公開HTMLを厳格検査し、直接本文修正を主目的にしない。修正場所、修正条件、再確認条件を quality_delta_items として訂正cronへ渡す。
  • 訂正cronは高品質cronから来た不足点を実修正し、公開HTMLまたはプレビューHTMLで再確認して ready_for_retest / task8_recheck へ返す。
  • 工程所有違反は SKIP_STAGE_OWNERSHIP とし、対象記事を勝手に進めない。

評価スコア記事の冒頭構成Gate

  • 冒頭順は H1タイトル → 評価スコア表 → リード文 → 公式テキストリンク → 最初のH2。
  • H1とSEOタイトルは分離する。H1に「評判」「レビュー」「評価」「デリヘル呼べる?」などのSEOタイトル語を混ぜない。
  • H1重複、H1へのSEOタイトル混入、言語不一致、公式リンク漏れ、公式タグ欠落はFAILまたは訂正対象。
  • H1を本文HTML内に新たに書くという意味ではない。WordPress/辞書プラグイン側のH1表示を確認する。

公式リンク実装Gate

テキストで公式またはアフィリエイトリンクへ誘導する場合は、右寄せ、公式タグ、太字リンクをセットで扱う。

marker: hub-v0141-produce-ready-bridge-required-20260526
Before any work, read Autopost358/_branch_common/docs/CRON_LATEST_RULE_BOOTSTRAP.md and run Autopost358/_branch_common/bootstrap/autopost_cron_launcher.py or RUN_AUTOPOST_CRON_LAUNCHER.cmd. Read Main Hub api=cron_preflight_resolve first so target resolution, latest manifest, connection policy, write scope, selected candidate, fast_start_pack, recorded risks, and lock_payload are received in one call. Use api=agent_runtime_bootstrap, api=status, api=agent_runtime_readiness, api=agent_work_queue, and workflow/article api=agent_pack only as legacy fallback or detailed stage follow-up after fast-start resolve. Continue only when latest_instruction_manifest is present, hub_version >= 0.1.41, and mandatory rule keys include cron-self-refresh-before-work-v1, hub-v023-cron-write-scope-and-recorded-risks, production-pack-recorded-risks-v1, all-inspection-soft-statuses-produce-ready-v1, no-master-table-claim-bridge-v1, publication-events-count-source-v1, publication-count-reconciliation-history-v1, update-request-events-source-v1, db-migration-dual-layer-prep-v1, db-shadow-prepare-and-compare-v1, and cron-bootstrap-single-entrypoint-v1.

For production cron, candidate_ready, candidate_ready_only, pending_info, ready_with_notice, notice_required, ready_for_produce, production_ready, production_ready_with_recorded_risks, and READY_FOR_PRODUCE_WITH_RECORDED_RISKS are all production_ready_with_recorded_risks. Keep recorded risks, unknown_fields, discrepancy_notes, warning_display_plan, do_not_claim, reader_caution_text, alternative_sources, official_link_decision, and pre_upload_recheck_urls, but start one same-scope article through the approved bridge. If Work Queue has no materialized produce row but same-scope Hub References, article_material_pack, production_pack, handoff, or lock_payload contains a soft-ready candidate, use no_master_table_claim_bridge / no_master_table_claim_bridge_allowed and proceed with one article. Do not return NO_UNLOCKED_TARGET, NO_ELIGIBLE_TARGET, no ready, PASS, done, complete, upstream_fill_required, or no production-ready candidate only because the produce queue row is not materialized.

cron_preflight_resolve must not select stale targets with workflow/content_set/site mismatch. Stop only for Hub auth/network/reference failure, WordPress auth/write failure, representative 358 no-touch lock, wrong workflow/content_set/site, duplicate-publication risk, legal/safety danger, public Gate failure, rejected/archived/hard_block, or missing identity/URL/source basis. If Hub read is OK but hub_table_upsert or another master-table write returns 403, classify as BLOCKED_HUB_WRITE_SCOPE or QUEUE_SYNC_MISMATCH, not BLOCKED_HUB_AUTH. Normal cron must not use hub_table_upsert; ordinary progress, lock, result, publication, Directory Core, FAQ JSON-LD, high-quality test, correction, and handoff records go through the approved runtime/result APIs.

For inspection cron, classification is allowed, but the exit must create production material. When production_ready_count=0, continue 0-B/1-A/1-B/1-B2/1-C in the same run, return to 0-A if needed, and create next_production_handoff with at least one production_ready=true, production_ready_with_recorded_risks, or READY_FOR_PRODUCE_WITH_RECORDED_RISKS item unless blocked by the hard stops above. This rule belongs inside every startup thread text, individual cron request text, standalone request text, and full-set request text; do not leave it only in outside explanation.

<p style="text-align:right;"><span class="badge badge-red">公式</span><b>:<a href="公式またはアフィリエイトURL" rel="nofollow noopener">サービス名</a></b></p>
  • PC表示で本文右側または右寄せに見える位置へ置く。
  • 表示文言には必ず「公式」または「公式サイト」を含める。
  • アフィリエイトリンクがある場合はアフィリエイトリンク、無い場合は公式リンクを使う。
  • 画像だけ、バッジだけ、テキストだけで公式導線を済ませない。official_link_checked=true と official_badge_checked=true を残す。

装飾実装Gate

  • 黄色アンダーマーカーは <b><span class=”marker-under”>…</span></b> をセット条件にする。marker_under_without_b_count が1以上ならFAIL。
  • 赤太字を必要箇所に入れる。red_bold_count=0 で装飾バランス不足ならFAIL。
  • ✅ / ⚠️ と li を重複させない。<li>✅ …</li> や <li>⚠️ …</li> は li_signal_overlap_count としてFAIL。
  • ボックスと ✅ / ⚠️ は役割を分ける。ボックス内を記号だらけにしない。
  • 白々しい装飾、装飾0件、公式タグ欠落、マーカー単独使用、赤太字0件は decoration_balance_checked=false として訂正対象。

視覚シグナル・独自性Gate

  • 星評価は✅/⚠️の代替ではない。★★★★★や★★★★☆は評価点表現であり、visual_signal_checkには数えない。
  • 高品質PASSには positive_signal_count>=2、warning_signal_count>=2、red_bold_count>=1、marker_under_b_count>=1、li_signal_overlap_count=0 が必要。
  • ✅/⚠️が0件、星だけ、淡い見出しと普通文だけ、汎用文だけの場合はPASS不可。
  • 対象サービス固有の根拠、プラン名、運営名、導線、退会条件、料金条件、利用条件を評価理由へ展開する。
  • 「項目名 + 点数 + 一般論 + 確認する必要がある」の同型文が続く場合は repetitive_pattern_count としてFAILまたは訂正対象。
  • unique_service_fact_count が不足する場合は generic_rewrite_risk=high とし、quality_delta_itemsに修正場所と追加論点を残す。
  • 独自性確認は originality_check=pass で明示する。汎用文反復や対象固有情報不足があれば originality_check=fail として訂正へ戻す。

検索意図・共起語反映Gate

  • 共起語は収集だけではPASS不可。本文構造、評価理由、注意点、FAQへ反映する。
  • search_intent_summary、serp_competitor_topics、cooccurrence_terms、reader_questions、comparison_axes、selected_original_headings をHubへ残す。
  • 高品質PASSには search_intent_applied=true、cooccurrence_terms_used_count>=3、serp_topic_coverage_count>=2、original_heading_count>=1、reader_question_coverage_count>=1、comparison_axis_count>=2、generic_rewrite_risk=low が必要。
  • 定番見出しだけで終わらせず、検索意図・共起語・読者疑問から記事固有のH2/H3を最低1つ追加する。
  • 検索上位や共起語から、評価項目本文に具体的な比較軸を最低2つ入れる。
  • 読者疑問をFAQまたは注意点へ最低1つ反映する。
  • 過去PASSでも、✅/⚠️不足、汎用文反復、共起語反映不足、記事固有見出し不足が見つかった場合は quality_pass_invalidated_by_new_gate=true として訂正へ戻す。301_readyへ進めない。

評価項目見出し化Gate

  • 評価スコア表の各評価項目は、本文内のH2/H3またはsectionとして読者判断材料になる説明へ展開する。
  • 点数と理由、本文見出し、本文説明が対応していることを score_reason_alignment で確認する。
  • お決まり見出しだけでなく、検索上位、共起語、読者疑問から記事固有の見出しを1つ以上追加する。
  • score_items_from_table、score_item_heading_plan、score_item_heading_coverage をHub結果に残す。

文体 / FAQ / 構造化データGate

  • 日本語評価ページは常体Strict。本文、FAQ、リスト、評価項目説明に「です」「ます」「ください」「ません」「ましょう」が残ればFAILまたは訂正対象。
  • FAQ本文とFAQPage JSON-LDの質問・回答を一致させる。
  • FAQの script type=”application/ld+json” を記事本文へ直接入れない。WordPress側のカスタムJavaScript、構造化データ欄、または指定運用欄へ分離する。
  • 内部運用語、Hub、cron、301準備、旧記事移行、ローカルパス、認証値、APPパスワード、トークンを公開本文へ出さない。

見本ページ実照合Gate

  • 見本ページは完全コピー対象ではない。構成、導線、装飾バランス、情報密度、評価項目の展開を照合する。
  • 参照4URL: https://invest358.com/ja/errante-review/ / https://invest358.com/ja/thinkmarkets-review/ / https://aifan.io/ja/pollo-ai-review/ / https://aifan.io/ja/crowdworks-ai-review/
  • 見本ページ実照合ログなしで ready_for_high_quality_test / ready_for_retest / quality_pass に進めない。
  • Hub結果には style_reference_urls、style_reference_checked_at、style_reference_findings、public_html_checked=true/false を残す。

品質スコア / 差分修正Gate

  • 0〜49点: 制作cronが高品質へ渡してはいけない。止まり続けないよう、確認中で進められる項目は確認中として進め、通常の品質不足は制作棚へ戻す。
  • 50〜80点: 制作cron通過可。ただし quality_delta_items として不足点、修正場所、再確認条件を明記する。
  • 80〜90点: 高品質cronで軽微扱いせず、不足を具体的修正単位へ分解する。
  • 90〜99点: 訂正cronが最後の不足を潰し、100点化チェックシートで確認する。
  • 100点: 訂正cron後、公開HTMLまたはプレビューHTMLで確認済み。correction_completion_score=100 として再検査PASS候補にする。
  • production_quality_score、quality_score_before、quality_delta_items、minimum_gate_failures、target_score=100、retest_required=true をHubへ残す。

外部PCでのcron実行前提

  • このテンプレートを貼るPCが本社PCでなくても、毎回Main Hubの最新正本を読む設計にする。
  • cron置き場の本文だけを固定正本として扱わない。Hubが読めなければ BLOCKED_HUB_AUTH。
  • modelは可能な範囲で最新・高性能、reasoningEffortは可能な範囲で最高。確認できない場合は BLOCKED_AUTOMATION_MODEL_CONFIG。
  • YUKI/TAKUMIがcron検証中の記事本文を直接直して、cronの失敗を隠さない。

2026-05-18に確認した、porn-fun単体サービス評価スコアページ移行cronの立ち上げテスト・検査cron表示・Hub参照Gateの対応記録です。ここには認証情報、APPパスワード、秘密値、個人ローカルパス、スクリーンショット画像は載せません。

対応済み

TaskTemplate参照不備

収集cron・制作cronが BLOCKED_HUB_REFERENCE_INCOMPLETE で停止した原因は、サイト別agent_pack内でTaskTemplate参照が本文文字列として見えていても、cronが実体レコードとして扱える record_type=TaskTemplatestask_template_idworkflow_idtask_codecompletion_rulerequired_outputs が不足していたことです。

  • porn-fun移行用7工程のTaskTemplate実体フィールドをHubへ追加済み。
  • AIfunIO、Nightlife夜遊び店舗、Nightlifeホテルにも同じGateを全サイト共通で展開済み。
  • 共通Manual: evaluation-score-cron-tasktemplate-agent-pack-real-record-gate-v6-6
  • 共通Check: evaluation-score-cron-tasktemplate-agent-pack-real-record-check-v6-6

検査cronのready表記混線

検査cronの表示に出ていた「制作readyが10件」「ready棚が10件から13件」は、本物の制作投入readyではなく、0-A候補や1-B URL検証などの汎用 check_status=ready を広く数えていた表示です。これは制作cronへそのまま渡してよい状態とは別物です。

  • 候補ready: 0-A候補として次工程へ渡せる状態。
  • 参照URL ready: 1-A/1-BでURL材料として使える状態。
  • 制作投入ready: inspectが readiness_class=READY_STRONG または readiness_class=READY_WITH_FACT_RISK、または同等の use_status=production_ready / ready_for_produce を明示し、制作パックに必要な対象名、対象URL、記事種別、slug候補、参照URL、Fact Risk、確認中項目、禁止断定項目を渡した状態。

今後、汎用 check_status=ready だけの候補を「制作ready」と表示・集計しないよう、全サイト共通のInspect ready / Fact Risk Gateへ追加しました。

公式情報偏重によるHOLD過多

検査cronは公式情報を優先しますが、公式情報だけを過剰要求して制作投入候補を止め続けない設計に変更しました。検索上位サイト、既存記事、補助情報、SERP傾向、検索意図、共起語は source_typefact_riskused_for を分けて記録し、危険な断定だけを止めます。

  • READY_STRONG: 公式URL、基本情報、高リスク項目の根拠、検索意図、制作パックがそろっている。
  • READY_WITH_FACT_RISK: 公式URLまたは安全に扱える一次導線があり、検索上位・既存記事・補助情報で本文構成が作れる。未確認部分は「確認中」「要確認」「Fact Risk」として渡し、本文で断定しない。
  • HOLD: 公式URL不明、対象判定不能、年齢・決済・退会・規約・法務・安全など高リスク項目で危険な断定が必要。
  • EXCLUDE: 対象外ジャンル、重複、サービス終了、まとめ・ランキング・比較記事など。

制作cronのHub認証403

制作cronで HTTP 403 invalid token が出た場合、記事制作ロジックではなくHub認証bootstrapの問題として扱う。汎用クライアントの既定トークンだけに依存せず、H358_HUB_AGENT_TOKEN または CODE-YUKI/.env.hub.local の内部認証経路でMain Hubを読む。ただし認証値そのものは出力、memory、公開ページ、Hub本文、配布物へ書かない。

  • 401/403/invalid token/token expired時は、同じ無効トークンで再試行を繰り返さない。
  • bootstrap経路でもHubが読めない場合は BLOCKED_HUB_AUTH として停止する。
  • Hubを読めない状態で、対象なし、PASS、完了、制作readyなしとは判断しない。
  • Hubを読めない状態で、WordPress投稿、公開、本文編集、Directory Core、FAQ JSON-LD、301、削除、Hub更新をしない。
  • このbootstrapはporn-funだけでなく、AIfunIO、Nightlife夜遊び店舗、Nightlifeホテル、今後追加される評価スコアcronにも共通適用する。

制作cronの最低品質Gate前倒し

高品質テストで厳しく落とすだけでは、制作済みページが毎回訂正cronへ流れます。そこで全サイト共通で、制作cron側に PRODUCE_PRE_HQ_MINIMUM_GATE を追加しました。制作cronはTask8引き渡し前に、冒頭構成、常体、公式リンク位置、評価表、FAQ本文/FAQ JSON-LD、Directory Coreまたは辞書プラグイン、✅/⚠️、装飾バランス、内部運用語非露出、H1/canonical/noindexをセルフチェックします。

  • 評価ページなのに 装飾0件、✅/⚠️が0件、強み/注意点の視覚シグナルがない状態では ready_for_high_quality_test にしない。
  • FAQ不一致、公式リンク導線漏れ、常体崩れ、内部運用語露出、手書き表二重表示など、直せる不備は制作cron内で直してからTask8へ渡す。
  • 公式テキストリンクは表示文言に「公式」または「公式サイト」を含める。例: 【公式】サービス名公式サイトを確認。公式タグ欠落のままTask8へ渡さない。
  • 日本語ページは常体Strictとし、本文、FAQ、リスト、評価項目説明に「です」「ます」「ください」「ません」「ましょう」等の敬体が残る場合は制作cron内で直す。
  • <li>✅ ...</li> / <li>⚠️ ...</li> のようなli先頭✅/⚠️は禁止。liマーカーとアイコンの二重シグナルとして扱い、✅/⚠️は単独段落やボックス冒頭で使う。
  • 見本ページ実照合を必須にし、冒頭順、公式タグ、常体Strict、装飾/リスト使い分け、FAQ整合を確認したログなしで ready_for_high_quality_test にしない。
  • porn-funはH1をサービス名のみとし、評判/レビュー/評価/料金/安全/退会などのSEO語をH1に混ぜない。SEOタイトルは「サービス名+評判/レビュー/評価」系をtitle側に入れる。
  • 制作cronは production_quality_score を付け、0〜49点はTask8へ渡さない。通常の品質不足は production_quality_fail_requeued / needs_production_revision として制作棚へ戻し、BLOCKED は認証、対象不明、外部確認不能など停止条件だけに限定する。50〜80点は通過可だが quality_delta_items を必ず添える。
  • 80〜90点は高品質cronが軽微扱いせず、不足を具体的な修正単位へ分解して correction_queue へ渡す。
  • 90〜99点は訂正cronが最後の詰めを行い、修正可能なdeltaが残る限り100点扱いにしない。
  • 100点は訂正cron後に公開HTMLまたはプレビューHTMLで確認し、100点化チェックシートを満たした状態とする。
  • 不明点は「確認中」「要確認」「Fact Risk」として扱ってよいが、評価表の確定値として断定しない。
  • Hub Manual: evaluation-score-cron-produce-pre-hq-minimum-gate-v6-6
  • Hub Check: evaluation-score-cron-produce-pre-hq-minimum-check-v6-6

訂正cronの実修正必達

訂正cron側には CORRECTION_MUST_FIX_GATE を追加しました。高品質テストや公開QAから返ったFAIL理由は、要約や改善担当ハンドオフだけで終えず、1記事ずつ実際に修正し、公開HTMLまたはプレビューHTMLで確認して ready_for_retest / task8_recheck へ戻します。

  • 本文、FAQ、装飾、常体Strict、公式リンク位置/公式タグ、評価表、Directory Core/辞書プラグイン、構造化データ、内部運用語露出を修正対象にする。
  • 公式タグ欠落、敬体残り、li先頭✅/⚠️、見本ページ未照合、サイト別H1/SEOタイトル違反が残る場合は ready_for_retest / task8_recheck に戻さない。
  • 高品質cronから受け取った quality_delta_items を潰し、correction_completion_score=100 と100点化チェックシートを満たすまで訂正完了にしない。
  • memory更新、訂正候補整理、改善担当への引き渡しだけでは訂正完了にしない。
  • Hub認証、WordPress認証、対象記事不明、危険な断定が必要な項目はBLOCKEDまたはFact Risk/HOLDとして止める。
  • Hub Manual: evaluation-score-cron-correction-must-fix-gate-v6-6
  • Hub Check: evaluation-score-cron-correction-must-fix-check-v6-6

次回cronで期待する挙動

  • cronは起動時にMain 358 Hubのagent_packを読み、TaskTemplate実体レコードを確認する。
  • 検査cronは候補ready、参照URL ready、制作投入readyを分けて報告する。
  • 制作cronは READY_STRONG / READY_WITH_FACT_RISK だけを制作投入対象として扱う。
  • 制作cronはTask8引き渡し前に最低品質Gateを通し、直せる不備を残したまま高品質テストへ渡さない。
  • 訂正cronはFAIL理由を実修正し、公開HTMLまたはプレビューHTMLで確認してから再検査へ返す。
  • 公式タグ、常体Strict、li先頭✅/⚠️禁止、見本ページ実照合は全サイト共通のproduce/correction停止条件とする。
  • 参照ページは4URLセット(Errante、ThinkMarkets、Pollo AI、CrowdWorks AI)として扱い、対象ジャンルに近い最低1本と共通構造確認用1本を見本ページ実照合する。
  • 高品質cronは quality_score_beforetarget_score=100quality_delta_itemsminimum_gate_failuresretest_required=true を訂正cronへ渡す。
  • 不明点は「確認中」「要確認」「Fact Risk」として制作パックに残し、評価表の確定値として断定しない。
  • この対応では、公開、投稿、WordPress更新、301実行、通常cronの代行作業は行っていない。

反映対象

  • Hub Manual: evaluation-score-cron-inspect-ready-fact-risk-gate-v6-6
  • Hub Check: evaluation-score-cron-inspect-ready-fact-risk-check-v6-6
  • Hub Manual: evaluation-score-cron-produce-pre-hq-minimum-gate-v6-6
  • Hub Check: evaluation-score-cron-produce-pre-hq-minimum-check-v6-6
  • Hub Manual: evaluation-score-cron-quality-score-handoff-gate-v6-6
  • Hub Check: evaluation-score-cron-quality-score-handoff-check-v6-6
  • Hub Manual: evaluation-score-cron-correction-must-fix-gate-v6-6
  • Hub Check: evaluation-score-cron-correction-must-fix-check-v6-6
  • cron置き場の各サイトテンプレート: porn-fun、Nightlifeホテル、Nightlife夜遊び店舗、AIfunIO
  • cron置き場のHub指令全文確認ページ

最終更新: 2026-05-19 01:24:01 JST

2026-05-19 KW調査パック・出現率Gate / 全評価スコアcron共通

正本: Main 358 Hub の Rules/evaluation-score-cron-keyword-density-rule-v6-6 / Manuals/evaluation-score-cron-keyword-density-gate-v6-6 / Checks/evaluation-score-cron-keyword-density-check-v6-6 を読む。cron.goudou-358.jp はテンプレート置き場であり、Hubが読めない場合の判定代替にはしない。

目的: 共起語・検索意図を確認ログだけで終わらせず、見出し、本文、評価理由、FAQへ反映する。狙いKWの出現率は対象名を含むKWファミリーで1.5〜3.0%を標準とし、未達なら自然に加筆して再計測する。

必読Hub参照

  • Rules/evaluation-score-cron-keyword-density-rule-v6-6
  • Manuals/evaluation-score-cron-keyword-density-gate-v6-6
  • Checks/evaluation-score-cron-keyword-density-check-v6-6

KW調査パックGate

  • keyword_research_pack または runtime_keyword_research_pack を必須にする。
  • 正式パックが無い場合、cron自身が runtime_keyword_research_pack を生成し、Hubへ保存してから進む。
  • 保存する項目は search_intent_summary / serp_competitor_topics / cooccurrence_terms / reader_questions / comparison_axes / selected_original_headings。
  • パック生成も検索意図整理もできない場合だけ BLOCKED_KEYWORD_RESEARCH_MISSING とする。
  • 共起語を確認しただけ、ログに書いただけ、羅列しただけではPASSにしない。

狙いKW・出現率Gate

  • 狙いKWは原則「対象名 + 評判」。AIfunIO / invest358 / porn-fun は primary_target_keyword を「対象名 + 評判」系にする。
  • Nightlife店舗は「店名 + 評価・評判・レビュー」、Nightlifeホテルは「ホテル名 + デリヘル呼べる?」を主KWとし、「ホテル名 + 評判」は secondary_reputation_keyword として扱う。
  • keyword_density_target_min=1.5 / keyword_density_target_max=3 を必須にする。
  • normalized_target_keyword_family に「対象名 評判」「対象名の評判」「対象名 評価」「対象名レビュー」など自然な表記ゆれを入れる。
  • 対象名だけ、または「評判」だけの水増しを目標達成扱いにしない。
  • 計測対象は公開HTMLまたはプレビューHTMLの可視本文。script / style / JSON-LD / nav / footer / 管理表示は除外する。

未達時の加筆Gate

  • target_keyword_density_percent が標準下限1.5%未満なら、共起語・関連語・具体例・FAQ・記事固有見出しで自然に加筆して再計測する。
  • target_keyword_density_percent が5%超なら、キーワード詰め込みとして不要な反復を削るか表現を分散する。
  • 追加項目はしてよいが、必ず section id または h2/h3 id を付ける。
  • 加筆位置は総合評価・まとめ直前、評価項目直後、FAQ直前など、読者の判断に役立つ自然な位置を優先する。
  • 文脈のない追記、定型見出しの水増し、同じような文章の量産は禁止する。
  • 追加見出しは検索意図・上位傾向・共起語・読者疑問から記事固有のものを最低1つ入れる。

工程別Gate

  • 制作cron: keyword_density_report / target_keyword_density_percent / cooccurrence_terms_used_count / original_heading_count をHubへ残す。density未達なら自然に加筆して再計測し、自然KWファミリーGateを満たしてから高品質へ渡す。
  • 高品質cron: keyword_density_reportなし、自然KWファミリーGate未確認、cooccurrence_terms_used_count<3、original_heading_count<1、added_section_ids_present=false はPASS禁止。
  • 訂正cron: quality_delta_itemsに基づき本文へ自然加筆し、section id / h2 id / h3 idを付け、公開HTMLまたはプレビューHTMLで再計測して ready_for_retest へ返す。
  • ready_for_high_quality_test / ready_for_retest / PASS / 301_ready は keyword_density_report と自然KWファミリーGate確認なしでは不可。

2026-05-19 本文品質・網羅性Writing Gate / 全評価スコアcron共通

正本: Main 358 Hub の Rules/evaluation-score-cron-content-depth-writing-rule-v6-6 / Manuals/evaluation-score-cron-content-depth-writing-gate-v6-6 / Checks/evaluation-score-cron-content-depth-writing-check-v6-6 を読む。

目的: 評価スコア記事を同じ型の量産文にしない。検索意図、見出し設計、網羅性、一次情報、読みやすさ、内部リンク、共起語、関連語、具体例、FAQの厚みを本文品質として見る。

必読Hub参照

  • Rules/evaluation-score-cron-content-depth-writing-rule-v6-6
  • Manuals/evaluation-score-cron-content-depth-writing-gate-v6-6
  • Checks/evaluation-score-cron-content-depth-writing-check-v6-6

本文品質10項目

  • 検索意図: 読者が登録前に知りたいこと、不安、比較対象を本文に反映する。
  • 見出し設計: 定型見出しだけで終わらせず、対象サービス固有のH2/H3を最低1つ追加し、必ずidを付ける。
  • 網羅性: 評価項目、料金、退会、利用条件、運営、対応環境、注意点、向いている人、向かない人、FAQを漏らさない。
  • 一次情報: 公式サイト、公式FAQ、公式規約、公式料金、公式問い合わせ、公式SNS、公式予約/登録導線を優先する。
  • 読みやすさ: 日本語ページは常体Strict。短文羅列、同じ言い回し、薄い一般論を避ける。
  • 内部リンク: 関連する既存記事、カテゴリ、比較記事、用語記事がある場合は自然に1〜3件入れる。無い場合は理由を残す。
  • 共起語: cooccurrence_termsを最低3件、本文・見出し・FAQ・評価理由へ自然に反映する。
  • 関連語: related_terms / comparison_termsを本文に反映し、表記ゆれや読者が使う言葉を拾う。
  • 具体例: 料金、退会、確認手順、利用前チェック、比較ポイントなどで具体例を最低2件入れる。
  • FAQを厚く: 評価スコア記事ではFAQを原則5問以上にし、本文FAQとFAQPage JSON-LDを一致させる。

工程別Gate

  • 制作cron: content_depth_plan と content_depth_checklist をHubへ残す。未達項目がある場合は自然加筆し、重大未達のまま高品質へ渡さない。
  • 高品質cron: 公開HTMLまたはプレビューHTMLで10項目を実照合する。確認ログだけで本文反映がない場合はPASS禁止。
  • 訂正cron: quality_delta_itemsを本文へ実修正し、追加section/h2/h3には必ずidを付ける。FAQ追加時はJSON-LDも整合させる。

PASS条件マーカー

  • content_depth_plan
  • content_depth_checklist
  • search_intent_covered=true
  • heading_design_unique_section_count>=1
  • coverage_required_topics_checked=true
  • primary_sources_checked=true
  • readability_check=pass
  • internal_links_count>=1 または internal_link_candidate_absent_reason
  • cooccurrence_terms_used_count>=3
  • related_terms_used_count>=3
  • concrete_examples_count>=2
  • faq_question_count>=5
  • faq_jsonld_matches_body=true
  • added_section_ids_present=true

2026-05-19 キーワード出現率Hub API / 全評価スコアcron共通

正本: Main 358 Hub の Rules/evaluation-score-cron-keyword-density-api-rule-v6-6 / Manuals/evaluation-score-cron-keyword-density-api-manual-v6-6 / Checks/evaluation-score-cron-keyword-density-api-check-v6-6 を読む。

目的: 本社PCが停止していても、支社cronがMain Hub側APIだけで公開HTMLのキーワード出現率を検査し、自然KWファミリーGateを満たすまで自然な加筆・調整・再計測を行えるようにする。

Hub API

  • Endpoint: https://hub.goudou-358.jp/index.php?api=keyword_density_check
  • Method: POST
  • Auth: 既存のHub認証を内部利用する。認証値、APPパス、トークン本文は出力、memory、公開本文、Hub本文、配布物へ書かない。
  • 必須payload: url または target_url または published_url / primary_target_keyword / normalized_target_keyword_family / article_key / workflow_id / site_id / task_code / keyword_density_target_min=1.5 / keyword_density_target_max=3。
  • API結果: keyword_density_report / target_keyword_density_percent / density_status / visible_text_checked / jsonld_excluded / nav_footer_excluded を確認し、通常cronではHubへ保存する。

Gate

  • target_keyword_density_percent が標準下限1.5%未満なら、共起語・関連語・具体例・FAQ・記事固有見出しで自然に加筆して再計測する。
  • target_keyword_density_percent が5%超なら、キーワード詰め込みとして表現を分散して再計測する。
  • keyword_density_report なし、API未実行、API ok=false、visible_text_checked/jsonld_excluded不明、自然KWファミリーGate未確認のまま ready_for_high_quality_test / ready_for_retest / PASS / 301_ready にしない。
  • Hub認証不備は BLOCKED_HUB_AUTH。API取得不能、API未反映、HTTP 4xx/5xx は BLOCKED_KEYWORD_DENSITY_API として止め、対象なし・PASS・完了扱いにしない。

2026-05-19 自然なキーワードファミリー出現率Gate(全評価スコアcron共通)

Hub正本: Rules/evaluation-score-cron-natural-keyword-family-density-rule-v6-6 / Manuals/evaluation-score-cron-natural-keyword-family-density-manual-v6-6 / Checks/evaluation-score-cron-natural-keyword-family-density-check-v6-6 を読む。

目的: 「評判」「評価」「レビュー」「口コミ」単体を不自然に増やさず、対象名を含むKWファミリー、共起語、関連語、具体例、FAQ、記事固有見出しで自然に厚みを出す。

対象キーワード

  • primary_target_keyword は「対象名 + 検索意図語」を基本にする。例: Javholic 評判、Pollo AI 評判。
  • normalized_target_keyword_family は「対象名 評判」「対象名の評判」「対象名 評価」「対象名レビュー」など、対象名を含む自然表現だけを基本にする。
  • single_intent_terms_not_counted=[“評判”,”評価”,”レビュー”,”口コミ”] / intent_only_terms_excluded=true。
  • 「評判」単体、「評価」単体、「レビュー」単体を高密度へ増やす作業は禁止。キーワード詰め込みとしてFAILまたは訂正対象にする。

出現率目標

  • entity_intent_family_density_target_min=1.5 / entity_intent_family_density_target_max=3.0。
  • 3.0〜5.0%は自然に収まる上限余白であり、到達必須ではない。
  • 5.0%超、同じ言い回しの反復、本文の白々しい増量は keyword_stuffing / unnatural_repetition として扱う。
  • 旧テンプレ内に残る厳しすぎる出現率表記より、この自然KWファミリーGateを優先する。

不足時の加筆方法

  • 不足時は検索意図、上位傾向、共起語、関連語、比較される論点、具体例、FAQ、評価項目の本文化で自然に加筆する。
  • 追加セクションには section id / h2 id / h3 id を付ける。
  • cooccurrence_terms_used_count_min=3 / original_heading_count_min=1。
  • 共起語は詰め込みではなく、見出し、比較軸、FAQ、注意点、内部リンク、読みやすさの判断材料として使う。

通過条件

  • ready_for_high_quality_test / ready_for_retest / PASS / 301_ready の前に、keyword_density_report に target_is_entity_intent_family=true、intent_only_terms_excluded=true、target_keyword_density_percent を残す。
  • cooccurrence_terms_used、original_heading_count、quality_delta_items または failed_items をHubへ残す。
  • keyword_density_report なし、API未実行、API ok=false、intent_only_terms_excluded未確認のまま通過しない。

2026-05-19 Search Compass分析パックGate(共起語・検索意図・出現率・網羅性)

Hub正本: Rules/evaluation-score-cron-search-compass-analysis-pack-rule-v6-6 / Manuals/evaluation-score-cron-search-compass-analysis-pack-manual-v6-6 / Checks/evaluation-score-cron-search-compass-analysis-pack-check-v6-6 を読む。

方針: Search Compassは分析エンジン、Main 358 Hubは正本、cronは実行者。cronは起動ごとにHubを読み、必要に応じてSearch Compass分析パックまたは同一スキーマのruntime fallbackを作成し、Hubへ残す。

SEARCH_COMPASS_ANALYSIS_PACK_POLICY

  • 推奨API: https://search-compass.goudou-358.jp/api/analysis-pack
  • 必須フィールド: search_intent_summary / keyword_family / keyword_density_report / coverage_report / cooccurrence_terms_present / cooccurrence_terms_missing / related_terms / comparison_axes / reader_questions / selected_original_headings / quality_delta_items。
  • Search Compass APIが使えないだけで対象なし、PASS、完了、readyなしにしない。Hub保存済packを読む。なければcron_runtime_fallbackとして同一スキーマの分析パックを作る。
  • fallback使用時は analysis_pack_source=cron_runtime_fallback / needs_search_compass_recheck=true をHubへ残す。
  • Hub認証失敗は従来通り BLOCKED_HUB_AUTH。認証値、APPパスワード、トークン本文、ローカルパスは公開本文・memory・Hub本文・配布物へ出さない。

出現率・共起語・網羅性

  • KW出現率は entity+intent family を数える。評判、評価、レビュー、口コミなどのintent-only単語だけでは数えない。
  • 標準目標は1.5〜3.0%。3.0〜5.0%は自然に収まる上限域であり、目標ではない。5.0%超や不自然な反復は過剰最適化として扱う。
  • 不足時は、検索意図、上位傾向、共起語、関連語、比較軸、具体例、FAQ厚み、内部リンク、評価項目本文化、オリジナル見出しで自然に加筆する。
  • 追加見出し・追加セクションには section id / h2 id / h3 id を必ず入れる。
  • 評価スコア記事の基本構成 H1→評価スコア表→リード文→公式テキストリンク→最初のH2 は崩さない。

工程別Gate

  • 制作cron: keyword_research_packを読んでから制作する。明らかな検索意図・共起語・出現率・網羅性不足は高品質へ丸投げせず、制作側で自然に加筆する。
  • 高品質cron: 公開HTMLと分析パックを照合し、足りない箇所を quality_delta_items として具体的に訂正cronへ渡す。直接制作代行ではなく厳格検査を行う。
  • 訂正cron: quality_delta_itemsを全部潰し、出現率・網羅性・共起語・見出しID・FAQ厚みを再確認して ready_for_retest に返す。memory更新だけで完了しない。
  • ready_for_high_quality_test / ready_for_retest / PASS / 301_ready は、分析パックまたはruntime fallback packの必須フィールドなしでは不可。

2026-05-19 Search Compass API稼働確認済み

Hub正本: References/search-compass-api-live-status-20260519 / Checks/search-compass-api-live-status-check-20260519 を読む。

SEARCH_COMPASS_API_LIVE_STATUS: https://search-compass.goudou-358.jp/api/analysis-pack は稼働確認済み。評価スコアcronは、共起語・検索意図・出現率・網羅性チェックの分析パック取得先として扱う。

  • status_url=https://search-compass.goudou-358.jp/api/status
  • analysis_pack_url=https://search-compass.goudou-358.jp/api/analysis-pack
  • analysis_type=search_intent_keyword_density_coverage_pack
  • 必須フィールド: keyword_density_report / search_intent_summary / coverage_report / cooccurrence_terms_present / cooccurrence_terms_missing / related_terms / comparison_axes / selected_original_headings / quality_delta_items。
  • freshなkeyword_research_packが無い、または古い場合は、ready_for_high_quality_test / ready_for_retest / PASS / 301_ready の前にSearch Compass分析パックを取得する。
  • 取得結果はMain 358 Hubへ keyword_research_pack または runtime_keyword_research_pack として残す。
  • API一時失敗時は、Hub保存済packを確認し、それも無い場合だけ同一スキーマのcron_runtime_fallbackを作成して needs_search_compass_recheck=true を残す。
  • API失敗を理由に、対象なし・PASS・完了・readyなしとは判断しない。Hub認証不備はBLOCKED_HUB_AUTH。
  • 現在の公開エンドポイントは共有サーバー用PHP API fallback。Search Compass本体開発の本命は後日Python側で継続する。

2026-05-19 評価スコアcron 装飾黄金律原案・KW三層Gate

Hub正本: Rules/evaluation-score-decoration-golden-ratio-rule-v1-20260519 / Checks/evaluation-score-decoration-golden-ratio-check-v1-20260519 / Rules/evaluation-score-keyword-three-layer-density-rule-v1-20260519 / Checks/evaluation-score-keyword-three-layer-density-check-v1-20260519 を読む。

目的: 評価スコア記事を同じ薄い文章で量産しないため、見本9記事から取った装飾比率と、KW出現率の三層分離を全サイト共通Gateにする。

DECORATION_GOLDEN_RATIO_V1_DRAFT

  • 見本9記事の平均本文文字数は約8,141字。黒太字13.24%、黄色アンダー7.23%、赤太字5.93%、太字系合算26.4%、✅+⚠️は約1.00件/1000字。
  • 標準域: 黒太字6-16%、黄色アンダー4-10%、赤太字3-8%、太字系合算18-32%。12%未満は薄い、40%超は過剰装飾候補。
  • ✅は最低2件、⚠️も最低2件。合計0.7-2.0件/1000字を目安にする。ただしli先頭に✅/⚠️を入れて二重シグナル化しない。
  • 黄色アンダーは必ず <b><span class=”marker-under”>…</span></b> または <strong><span class=”marker-under”>…</span></strong>。
  • 赤太字は必ず <b><span style=”color:#FF0000;”>…</span></b> または <strong><span style=”color:#FF0000;”>…</span></strong>。
  • 公式テキスト誘導は装飾比率とは別Gateで最低1件。右寄せ公式バッジ形式を使う: <p style=”text-align: right;”><span class=”badge badge-red”>公式</span><b>:<a href=”” target=”_blank” rel=”nofollow noopener”></a></b></p>
  • 比率を満たしても、配置が白々しい、同じ装飾だけで稼いでいる、読者判断に寄与しない場合はFAILまたは訂正対象。

THREE_LAYER_KEYWORD_POLICY_V1

  • Layer 1: サービス名ファミリー。例: XCITY / エックスシティ / 女体のしんぴ / Javholic。ここだけを出現率の主対象にする。目標1.5-4.0%、自然上限5.0%。
  • Layer 2: 検索意図語。例: 評判 / レビュー / 評価 / 口コミ / 料金 / 退会 / 安全 / 年齢確認 / 比較。これは出現率目標ではなく、見出し・FAQ・比較軸・本文内の自然配置と網羅性で見る。
  • Layer 3: 複合KW。例: XCITY 評判 / 女体のしんぴ 評判 / Javholic レビュー。これは出現率目標ではなく、SEO title/meta、リード、見出し、FAQなど主要位置の自然配置で見る。
  • 複合KWを3-5%にしようとして、本文内に『XCITY 評判では』などを連発するのは過剰最適化としてFAIL。
  • Search Compass / keyword_density_checker は entity_family_density_report / intent_coverage_report / composite_query_placement_report を返す。keyword_density_report は後方互換として entity_family_density_report 扱い。
  • 不足時の加筆は、検索意図、共起語、関連語、具体例、FAQ厚み、内部リンク、ID付きオリジナル見出しで自然に行う。

工程Gate

  • 制作cron: obviousな装飾不足、公式誘導不足、複合KW連発、サービス名密度不足を高品質へ丸投げしない。quality_delta_itemsを残す。
  • 高品質テストcron: 公開HTML本文だけを見て、装飾黄金律・KW三層・Search Compass結果を照合し、薄い/不自然/量産臭いページはPASSしない。
  • 訂正cron: quality_delta_itemsを全て潰し、再計測と公開HTML確認後に ready_for_retest へ返す。memory更新だけでは完了不可。

2026-05-19 評価スコアcron 並行スレッド共通仕様

Hub正本: Rules/evaluation-score-cron-lock-retry-next-candidate-rule-v6-6 / Manuals/evaluation-score-cron-lock-retry-next-candidate-gate-v6-6 / Checks/evaluation-score-cron-lock-retry-next-candidate-check-v6-6 を読む。

目的: 複数cronが同時期に起動して同じ候補を見ても、二重制作・二重訂正・二重301を起こさず、ロック競合だけで止まり続けないようにする。

LOCK_RETRY_NEXT_CANDIDATE_POLICY

  • 候補をメモリ上で選んだだけでは所有していない。所有はHub上の task_lock / production_claim / cron_soft_lock で automation_id / run_id が自分のものと確認できた時だけ成立する。
  • 制作cronは production_ready / ready_for_produce / READY_STRONG / READY_WITH_FACT_RISK のうち、active lock / in_progress / claimed / task_stage_owner がない候補だけを見る。
  • 候補を1件選んだら、本文制作前に即 task_lock または production_claim をHubへ作る。task_not_found_or_not_recorded 等で正式ロックできない時だけ cron_soft_lock fallback を使う。
  • ロック作成直後にHubを再読込し、自分の automation_id / run_id が lock owner になっている場合だけ制作・訂正・検査を続行する。
  • 他cronがownerの場合は SKIP_LOCKED としてその候補を捨て、同一run内で次の未ロック候補を探す。ロック失敗だけでFAIL/PASS/完了/対象なしにしない。
  • 最大再探索数は max_lock_retry_candidates=8。全部ロック済み、または候補が尽きた時だけ NO_UNLOCKED_TARGET とする。
  • 完了時は ready_for_high_quality_test / correction_queue / ready_for_retest / 301_ready など次工程へ渡し、lock_status=completed/returned/failed/excluded をHubへ残す。
  • stale lock は lock_expires_at と公開HTML・Hub状態・直近runtime_statを確認したうえでTTL回収する。他cronの有効ロックを勝手に奪わない。

工程別所有範囲

  • 制作cron: production_ready / ready_for_produce / READY_STRONG / READY_WITH_FACT_RISK だけを見る。production_claim または task_lock を取得し、失敗したらSKIP_LOCKEDで次候補へ行く。
  • 高品質テストcron: ready_for_high_quality_test / ready_for_retest / task8_recheck だけを見る。quality_check_claim または task_lock を取得し、失敗したらSKIP_LOCKEDで次候補へ行く。ロックなしでquality_pass/quality_fail/correction_queue/301_readyを書かない。
  • 訂正cron: correction_queue / task10 / quality_fail / returned items だけを見る。correction_claim または task_lock を取得し、失敗したらSKIP_LOCKEDで次候補へ行く。ロックなしでWordPress本文を直さない。
  • 改善ハンドオフcron: improvement_handoff / quality_pass_with_improvement / 9-B だけを見る。improvement_claim または task_lock を取得し、失敗したらSKIP_LOCKEDで次候補へ行く。
  • 301cron: 明示的な301_readyだけを見る。redirect_301_claim または task_lock を取得し、失敗したらSKIP_LOCKEDで次候補へ行く。ロックなしで301を実行しない。
  • 制作cronは correction_queue / ready_for_retest / task8_recheck / quality_pass / 301_ready / published を取らない。訂正cronは新規制作候補を取らない。

失敗条件

  • ロック取得前にWordPress本文、Directory Core、FAQ JSON-LD、公開状態、削除、301へ触った。
  • ロック失敗後、別候補を探さずに停止した。
  • 他cron所有候補を処理した。
  • 候補が残っているのに NO_UNLOCKED_TARGET とした。
  • ロック競合をPASS/完了/対象なしとして扱った。
  • 制作cronが訂正対象や再検査対象を取った、または訂正cronが新規制作候補を取った。

2026-05-19 評価スコアcron リード文自然導入・掲載内容マーカーGate

Hub正本: Rules/evaluation-score-cron-lead-opening-scope-rule-v1-20260519 / Manuals/evaluation-score-cron-lead-opening-scope-gate-v1-20260519 / Checks/evaluation-score-cron-lead-opening-scope-check-v1-20260519

「○○の評判は、」で始める不自然なリードを禁止し、複数の導入パターンから記事内容に合うものを選ぶ。リード終盤には、掲載内容を示す lead_scope_sentence を必ず <b><span class="marker-under">...</span></b> 形式で入れる。

lead_target_japanese_chars=220-360 / lead_max_japanese_chars=420 / lead_paragraph_count_target=2-3 / lead_opening_pattern_id / lead_scope_pattern_id / lead_scope_sentence_html_ok を各工程で記録する。

公開HTMLに lead_opening_scope_sentence / lead_scope_sentence などの内部フィールド名や未置換プレースホルダーが出ている場合は、リードGate失敗として扱う。

marker: hub-v0141-produce-ready-bridge-required-20260526
Before any work, read Autopost358/_branch_common/docs/CRON_LATEST_RULE_BOOTSTRAP.md and run Autopost358/_branch_common/bootstrap/autopost_cron_launcher.py or RUN_AUTOPOST_CRON_LAUNCHER.cmd. Read Main Hub api=cron_preflight_resolve first so target resolution, latest manifest, connection policy, write scope, selected candidate, fast_start_pack, recorded risks, and lock_payload are received in one call. Use api=agent_runtime_bootstrap, api=status, api=agent_runtime_readiness, api=agent_work_queue, and workflow/article api=agent_pack only as legacy fallback or detailed stage follow-up after fast-start resolve. Continue only when latest_instruction_manifest is present, hub_version >= 0.1.41, and mandatory rule keys include cron-self-refresh-before-work-v1, hub-v023-cron-write-scope-and-recorded-risks, production-pack-recorded-risks-v1, all-inspection-soft-statuses-produce-ready-v1, no-master-table-claim-bridge-v1, publication-events-count-source-v1, publication-count-reconciliation-history-v1, update-request-events-source-v1, db-migration-dual-layer-prep-v1, db-shadow-prepare-and-compare-v1, and cron-bootstrap-single-entrypoint-v1.

For production cron, candidate_ready, candidate_ready_only, pending_info, ready_with_notice, notice_required, ready_for_produce, production_ready, production_ready_with_recorded_risks, and READY_FOR_PRODUCE_WITH_RECORDED_RISKS are all production_ready_with_recorded_risks. Keep recorded risks, unknown_fields, discrepancy_notes, warning_display_plan, do_not_claim, reader_caution_text, alternative_sources, official_link_decision, and pre_upload_recheck_urls, but start one same-scope article through the approved bridge. If Work Queue has no materialized produce row but same-scope Hub References, article_material_pack, production_pack, handoff, or lock_payload contains a soft-ready candidate, use no_master_table_claim_bridge / no_master_table_claim_bridge_allowed and proceed with one article. Do not return NO_UNLOCKED_TARGET, NO_ELIGIBLE_TARGET, no ready, PASS, done, complete, upstream_fill_required, or no production-ready candidate only because the produce queue row is not materialized.

cron_preflight_resolve must not select stale targets with workflow/content_set/site mismatch. Stop only for Hub auth/network/reference failure, WordPress auth/write failure, representative 358 no-touch lock, wrong workflow/content_set/site, duplicate-publication risk, legal/safety danger, public Gate failure, rejected/archived/hard_block, or missing identity/URL/source basis. If Hub read is OK but hub_table_upsert or another master-table write returns 403, classify as BLOCKED_HUB_WRITE_SCOPE or QUEUE_SYNC_MISMATCH, not BLOCKED_HUB_AUTH. Normal cron must not use hub_table_upsert; ordinary progress, lock, result, publication, Directory Core, FAQ JSON-LD, high-quality test, correction, and handoff records go through the approved runtime/result APIs.

For inspection cron, classification is allowed, but the exit must create production material. When production_ready_count=0, continue 0-B/1-A/1-B/1-B2/1-C in the same run, return to 0-A if needed, and create next_production_handoff with at least one production_ready=true, production_ready_with_recorded_risks, or READY_FOR_PRODUCE_WITH_RECORDED_RISKS item unless blocked by the hard stops above. This rule belongs inside every startup thread text, individual cron request text, standalone request text, and full-set request text; do not leave it only in outside explanation.

# Evaluation Score Cron Lead Opening And Scope Sentence Gate v1.2

Created: 2026-05-19
Scope: all sites / evaluation score articles / produce, high-quality-test, correction

## Purpose

Evaluation score articles must not start the lead paragraph with an unnatural exact-match SEO phrase such as "SERVICE no hyoban wa" or "SERVICE review dewa".

The lead must read like a human introduction. It should draw the reader in through the actual decision points for the article, then clearly tell the reader what the article covers.

## Required Lead Structure

The lead must be readable before the first H2. It must not become a long summary that gives away every conclusion before the article begins.

Lead length and layout:

- Target body-text length: 220-360 Japanese characters.
- Hard upper limit: 420 Japanese characters.
- Paragraph count: 2-3 paragraphs.
- One paragraph should normally be 80-160 Japanese characters.
- One sentence should normally be 45-80 Japanese characters.
- Do not place the whole lead in one long paragraph.
- Do not list every evaluation item or every conclusion in the lead.
- The lead should invite the reader into the article and leave detailed judgment for the later sections.

The lead must do all of the following:

- Start from a natural reader concern, usage context, official-information point, comparison point, risk point, or conclusion point.
- Include search intent, cooccurrence terms, and related terms naturally.
- Include article-specific decision factors such as pricing, cancellation, renewal, payment, safety, usability, feature range, eligibility, official information, or comparison axes.
- End, or nearly end, with a `lead_scope_sentence` that explains what the article covers.
- Decorate `lead_scope_sentence` with black bold plus yellow underline marker.
- Keep `lead_scope_sentence` concise. It should show the coverage of the article, not summarize every conclusion.

Required HTML for `lead_scope_sentence`:

```html
<b><span class="marker-under">...</span></b>
```

or:

```html
<strong><span class="marker-under">...</span></strong>
```

## Public HTML Placeholder / Internal Field Name Ban

Public or preview HTML must not expose runtime field names, template placeholders, or Gate labels that belong only in Hub logs.

The following literal strings must be treated as FAIL when they appear in visible article body, lead text, headings, FAQ, official-link area, or any reader-facing block:

- `lead_opening_scope_sentence`
- `lead_scope_sentence`
- `lead_opening_pattern_id`
- `lead_scope_pattern_id`
- `lead_target_japanese_chars`
- `lead_max_japanese_chars`
- `lead_paragraph_count_target`
- `lead_quality_delta_items`
- `lead_conclusion_dump_detected`
- `LEAD_OPENING_SCOPE_POLICY`
- any unreplaced `{{lead...}}`, `[lead...]`, `LEAD_...`, or similar lead-template placeholder

These strings may appear only in internal result JSON, Hub runtime stat, memory, or non-public logs. They must never be counted as a successful lead check.

## Banned Opening Patterns

The lead must not begin with exact SEO phrase openings such as:

- `SERVICE の評判は、`
- `SERVICE の評価は、`
- `SERVICE レビューでは、`
- `SERVICE 評判では、`
- `SERVICE 口コミでは、`
- `この記事では、SERVICE の評判を...`

The lead must also not mass-produce the same form:

- `SERVICE は、...なサービスだ。`

That sentence form may appear when it is genuinely natural, but it must not become the default opening pattern for every article.

## Opening Pattern IDs

Each produce/correction run must select and record a `lead_opening_pattern_id`.

Allowed pattern families:

- `reader_concern_first`: starts from what the reader wants to check before registration or use.
- `usage_context_first`: starts from how the service/tool/place is used.
- `official_info_first`: starts from what the official page confirms.
- `comparison_first`: starts from how the subject should be compared with alternatives.
- `risk_or_caution_first`: starts from a concrete risk or point that should not be missed.
- `conclusion_first`: starts with a balanced conclusion, then explains what to verify.
- `feature_context_first`: starts from a distinctive feature, then moves to decision factors.
- `question_resolution_first`: starts from a natural reader question and resolves it.

Do not reuse the same `lead_opening_pattern_id` and near-identical lead structure for consecutive articles in the same site/content set when avoidable.

## Scope Sentence Pattern IDs

Each lead must contain one `lead_scope_sentence` and record `lead_scope_pattern_id`.

Allowed pattern families:

- `scope_article_covers`
- `scope_before_use_check`
- `scope_decision_materials`
- `scope_compare_axes`
- `scope_risk_first`
- `scope_official_confirmation`

Examples are reference patterns, not copy-paste text:

```html
<b><span class="marker-under">この記事では、NOZOXの料金、配信内容、使いやすさ、決済と退会、安全面を評価スコアの項目ごとに確認する。</span></b>
```

```html
<b><span class="marker-under">ここでは、NOZOXを使う前に確認したい料金プラン、更新条件、退会フォーム、視聴環境、プライバシー面を順に整理する。</span></b>
```

```html
<b><span class="marker-under">登録前の判断材料として、料金の見方、作品・機能の幅、使いやすさ、解約条件、安全面を評価項目ごとに見ていく。</span></b>
```

The cron must adapt these patterns to the article target, article type, search intent, and site-specific Gate.

## Required Runtime Fields

Every produce, high-quality-test, and correction run must record:

- `lead_opening_pattern_id`
- `lead_scope_pattern_id`
- `lead_char_count`
- `lead_paragraph_count`
- `lead_sentence_length_check`
- `lead_too_long_detected`
- `lead_single_block_detected`
- `lead_conclusion_dump_detected`
- `lead_scope_sentence_present`
- `lead_scope_sentence_html_ok`
- `lead_banned_opening_detected`
- `lead_exact_match_seo_opening_detected`
- `lead_search_intent_terms_used`
- `lead_cooccurrence_terms_used`
- `lead_related_terms_used`
- `lead_originality_check`
- `lead_public_placeholder_terms_absent`
- `lead_internal_field_names_absent`
- `lead_quality_delta_items`

## Produce Cron Gate

Produce cron must create a lead that satisfies this Gate before handing off to high-quality-test.

Produce cron must not hand off to `ready_for_high_quality_test` if:

- The lead starts with a banned exact-match SEO opening.
- The lead is too short to orient the reader or too long to read before the first H2.
- The lead exceeds 420 Japanese characters.
- The lead is one unbroken paragraph.
- The lead dumps too many conclusions before the article begins.
- `lead_scope_sentence` is missing.
- `lead_scope_sentence` is not wrapped in `<b><span class="marker-under">...</span></b>` or `<strong><span class="marker-under">...</span></strong>`.
- The lead is a thin list of facts with no reader pull.
- The lead repeats a recent article's opening structure without a reason.
- Public or preview HTML exposes `lead_opening_scope_sentence`, `lead_scope_sentence`, or any other lead runtime field/template placeholder as reader-facing text.

If the page is otherwise publishable but the lead needs refinement, produce cron must fix it before high-quality handoff instead of pushing a known bad lead downstream.

## High-Quality-Test Cron Gate

High-quality-test cron must inspect public or preview HTML and fail the page when:

- Banned opening pattern remains.
- `lead_scope_sentence` is missing or not marker-under plus bold.
- Lead body is outside the 220-360 character target without a clear reason, or exceeds 420 characters.
- Lead has no paragraph breaks, or has paragraphs that are too long to scan.
- Lead gives away too much of the article before the first H2.
- The lead reads like keyword stuffing.
- The lead has no natural use of search intent, cooccurrence, or related terms.
- The lead's scope sentence is generic and does not mention article-specific evaluation axes.
- Public or preview HTML exposes any lead runtime field name or template placeholder, especially `lead_opening_scope_sentence` or `lead_scope_sentence`.

When failing, high-quality-test must send concrete `quality_delta_items` to correction:

- exact lead issue
- required rewrite direction
- required `lead_opening_pattern_id`
- required `lead_scope_pattern_id`
- expected HTML condition
- recheck condition

## Correction Cron Gate

Correction cron must rewrite the lead itself when the lead fails this Gate.

Correction cron must not finish with memory-only updates. It must:

- Edit the WordPress body or the correct draft/preview source.
- Recheck public or preview HTML.
- Confirm banned opening is gone.
- Confirm `lead_scope_sentence` exists and is marker-under plus bold.
- Confirm lead is 220-360 Japanese characters when possible and never over 420 characters.
- Confirm lead is split into 2-3 readable paragraphs.
- Confirm the lead does not dump all conclusions before the first H2.
- Confirm public or preview HTML does not expose lead runtime field names or placeholders.
- Return to `ready_for_retest` or the correct next stage with recorded fields.

## PASS Prohibited

The page must not be marked PASS, `ready_for_high_quality_test`, `ready_for_retest`, or `301_ready` when this Gate is failing.

2026-05-19 評価スコアcron KW自然化・FAQ qa-box Gate

Hub正本: Rules/evaluation-score-cron-kw-naturalization-faq-qa-box-rule-v1-20260519 / Manuals/evaluation-score-cron-kw-naturalization-faq-qa-box-gate-v1-20260519 / Checks/evaluation-score-cron-kw-naturalization-faq-qa-box-check-v1-20260519

NOZOX 評判 のようなスペース区切りKWを本文・見出し・FAQへ直置きせず、NOZOXの評判 など自然な日本語へ変換する。FAQは原則 <details class="qa-box"><div class="qa-answer"> を使う。

marker: hub-v0141-produce-ready-bridge-required-20260526
Before any work, read Autopost358/_branch_common/docs/CRON_LATEST_RULE_BOOTSTRAP.md and run Autopost358/_branch_common/bootstrap/autopost_cron_launcher.py or RUN_AUTOPOST_CRON_LAUNCHER.cmd. Read Main Hub api=cron_preflight_resolve first so target resolution, latest manifest, connection policy, write scope, selected candidate, fast_start_pack, recorded risks, and lock_payload are received in one call. Use api=agent_runtime_bootstrap, api=status, api=agent_runtime_readiness, api=agent_work_queue, and workflow/article api=agent_pack only as legacy fallback or detailed stage follow-up after fast-start resolve. Continue only when latest_instruction_manifest is present, hub_version >= 0.1.41, and mandatory rule keys include cron-self-refresh-before-work-v1, hub-v023-cron-write-scope-and-recorded-risks, production-pack-recorded-risks-v1, all-inspection-soft-statuses-produce-ready-v1, no-master-table-claim-bridge-v1, publication-events-count-source-v1, publication-count-reconciliation-history-v1, update-request-events-source-v1, db-migration-dual-layer-prep-v1, db-shadow-prepare-and-compare-v1, and cron-bootstrap-single-entrypoint-v1.

For production cron, candidate_ready, candidate_ready_only, pending_info, ready_with_notice, notice_required, ready_for_produce, production_ready, production_ready_with_recorded_risks, and READY_FOR_PRODUCE_WITH_RECORDED_RISKS are all production_ready_with_recorded_risks. Keep recorded risks, unknown_fields, discrepancy_notes, warning_display_plan, do_not_claim, reader_caution_text, alternative_sources, official_link_decision, and pre_upload_recheck_urls, but start one same-scope article through the approved bridge. If Work Queue has no materialized produce row but same-scope Hub References, article_material_pack, production_pack, handoff, or lock_payload contains a soft-ready candidate, use no_master_table_claim_bridge / no_master_table_claim_bridge_allowed and proceed with one article. Do not return NO_UNLOCKED_TARGET, NO_ELIGIBLE_TARGET, no ready, PASS, done, complete, upstream_fill_required, or no production-ready candidate only because the produce queue row is not materialized.

cron_preflight_resolve must not select stale targets with workflow/content_set/site mismatch. Stop only for Hub auth/network/reference failure, WordPress auth/write failure, representative 358 no-touch lock, wrong workflow/content_set/site, duplicate-publication risk, legal/safety danger, public Gate failure, rejected/archived/hard_block, or missing identity/URL/source basis. If Hub read is OK but hub_table_upsert or another master-table write returns 403, classify as BLOCKED_HUB_WRITE_SCOPE or QUEUE_SYNC_MISMATCH, not BLOCKED_HUB_AUTH. Normal cron must not use hub_table_upsert; ordinary progress, lock, result, publication, Directory Core, FAQ JSON-LD, high-quality test, correction, and handoff records go through the approved runtime/result APIs.

For inspection cron, classification is allowed, but the exit must create production material. When production_ready_count=0, continue 0-B/1-A/1-B/1-B2/1-C in the same run, return to 0-A if needed, and create next_production_handoff with at least one production_ready=true, production_ready_with_recorded_risks, or READY_FOR_PRODUCE_WITH_RECORDED_RISKS item unless blocked by the hard stops above. This rule belongs inside every startup thread text, individual cron request text, standalone request text, and full-set request text; do not leave it only in outside explanation.

# Evaluation Score Cron KW Naturalization And FAQ qa-box Gate v1

Created: 2026-05-19
Scope: all sites / evaluation score articles / produce, high-quality-test, correction

## 1. KW Naturalization Gate

### Purpose

Evaluation score articles may need to cover composite search intent such as `SERVICE 評判`, `SERVICE 評価`, `SERVICE レビュー`, or `SERVICE 口コミ`.

However, public body text, headings, and FAQ must not expose unnatural space-separated keyword stuffing such as:

- `NOZOX 評判で差が出る`
- `NOZOX 評価を見る`
- `Javholic レビューでは`
- `Pollo AI 評判を確認`

The search intent must be preserved, but the visible Japanese must be natural.

### Required Naturalization

When using composite keyword intent in public body text, H2/H3, FAQ, tables, or captions, convert it into natural Japanese.

Allowed examples:

- `NOZOXの評判`
- `NOZOXの評価`
- `NOZOXのレビュー`
- `NOZOXの口コミ`
- `NOZOXを評判だけで判断しない`
- `NOZOXの評価を見るとき`
- `NOZOXのレビューで確認したい`
- `NOZOXについて評判を調べる`
- `NOZOXを使う前に見たい評価軸`

For English or mixed-language service names, keep the service name intact and add Japanese particles naturally.

### Where Composite Keywords Are Allowed

Exact composite keyword forms may be allowed in:

- SEO title
- meta title
- internal Search Compass query field
- keyword research log
- non-public runtime fields

Exact composite keyword forms are not allowed in visible article body when they read unnaturally.

### Search Compass Handling

`composite_query_placement_report` must treat naturalized forms as valid placement when the search intent is clearly represented.

The cron must not force exact composite keyword density. Composite query is a placement and intent check, not a density target.

### Runtime Fields

Every produce, high-quality-test, and correction run must record:

- `kw_naturalization_checked`
- `unnatural_composite_kw_found`
- `unnatural_composite_kw_examples`
- `kw_naturalized_forms_used`
- `composite_query_naturalized_placement_ok`
- `kw_naturalization_quality_delta_items`

### Stage Gate

Produce cron must rewrite unnatural composite KW before high-quality handoff.

High-quality-test cron must fail when public HTML contains unnatural composite KW in body text, headings, FAQ, table text, or captions.

Correction cron must rewrite the visible text naturally and recheck public or preview HTML.

## 2. FAQ qa-box Gate

### Purpose

Evaluation score articles should not have thin, plain, or visually weak FAQ blocks. When the site design supports it, FAQ should use the established qa-box display pattern.

### Required HTML

The default FAQ body format for evaluation score articles is:

```html
<details class="qa-box">
<summary>Question text</summary>
<div class="qa-answer">
Answer text.
</div>
</details>
```

### FAQ Requirements

FAQ must satisfy all of the following:

- Use `<details class="qa-box">` for each visible FAQ item.
- Wrap each answer in `<div class="qa-answer">`.
- Use natural question text in `<summary>`.
- Include at least 5 visible FAQ items unless the site-specific Gate says otherwise.
- Answers must be useful, not thin one-line filler.
- Answers should normally be 1-3 sentences or more, depending on complexity.
- FAQ answers may use black bold, black bold plus yellow underline marker, or red bold naturally.
- FAQ body and FAQPage JSON-LD must match in question intent and answer content.
- FAQPage JSON-LD `<script type="application/ld+json">` must not be pasted into the public article body.

### Failure Examples

Fail the page when:

- FAQ uses plain `<details>` without `class="qa-box"`.
- FAQ has `<summary>` only with no useful answer.
- FAQ is just a bullet list.
- FAQ has fewer than 5 questions without a site-specific reason.
- FAQ body and JSON-LD differ materially.
- FAQ JSON-LD script appears inside the article body.
- FAQ answers are generic, repetitive, or do not address reader decision points.

### Runtime Fields

Every produce, high-quality-test, and correction run must record:

- `faq_qa_box_checked`
- `faq_qa_box_item_count`
- `faq_answer_wrapper_ok`
- `faq_question_count`
- `faq_answer_depth_ok`
- `faq_jsonld_body_match_ok`
- `faq_jsonld_script_in_body_found`
- `faq_qa_box_quality_delta_items`

### Stage Gate

Produce cron must create FAQ in qa-box format before high-quality handoff.

High-quality-test cron must inspect public or preview HTML and fail when qa-box or answer wrapper is missing.

Correction cron must convert FAQ to qa-box format, update matching FAQ JSON-LD in the correct non-body field or structured-data workflow, and recheck public or preview HTML.

## PASS Prohibited

The page must not be marked PASS, `ready_for_high_quality_test`, `ready_for_retest`, or `301_ready` while either KW Naturalization Gate or FAQ qa-box Gate is failing.

2026-05-19 Hub Auth / Network Classification Gate

Hub source: Rules/evaluation-score-cron-hub-auth-network-classification-rule-v6-6 / Manuals/evaluation-score-cron-hub-auth-network-classification-gate-v6-6 / Checks/evaluation-score-cron-hub-auth-network-classification-check-v6-6

403/invalid-token系は BLOCKED_HUB_AUTH、EACCES/fetch failed/DNS/timeout系は BLOCKED_HUB_NETWORK として分ける。Hubが読めない状態で対象なし、PASS、完了、readyなし、301対象なしとは扱わない。

marker: hub-v0141-produce-ready-bridge-required-20260526
Before any work, read Autopost358/_branch_common/docs/CRON_LATEST_RULE_BOOTSTRAP.md and run Autopost358/_branch_common/bootstrap/autopost_cron_launcher.py or RUN_AUTOPOST_CRON_LAUNCHER.cmd. Read Main Hub api=cron_preflight_resolve first so target resolution, latest manifest, connection policy, write scope, selected candidate, fast_start_pack, recorded risks, and lock_payload are received in one call. Use api=agent_runtime_bootstrap, api=status, api=agent_runtime_readiness, api=agent_work_queue, and workflow/article api=agent_pack only as legacy fallback or detailed stage follow-up after fast-start resolve. Continue only when latest_instruction_manifest is present, hub_version >= 0.1.41, and mandatory rule keys include cron-self-refresh-before-work-v1, hub-v023-cron-write-scope-and-recorded-risks, production-pack-recorded-risks-v1, all-inspection-soft-statuses-produce-ready-v1, no-master-table-claim-bridge-v1, publication-events-count-source-v1, publication-count-reconciliation-history-v1, update-request-events-source-v1, db-migration-dual-layer-prep-v1, db-shadow-prepare-and-compare-v1, and cron-bootstrap-single-entrypoint-v1.

For production cron, candidate_ready, candidate_ready_only, pending_info, ready_with_notice, notice_required, ready_for_produce, production_ready, production_ready_with_recorded_risks, and READY_FOR_PRODUCE_WITH_RECORDED_RISKS are all production_ready_with_recorded_risks. Keep recorded risks, unknown_fields, discrepancy_notes, warning_display_plan, do_not_claim, reader_caution_text, alternative_sources, official_link_decision, and pre_upload_recheck_urls, but start one same-scope article through the approved bridge. If Work Queue has no materialized produce row but same-scope Hub References, article_material_pack, production_pack, handoff, or lock_payload contains a soft-ready candidate, use no_master_table_claim_bridge / no_master_table_claim_bridge_allowed and proceed with one article. Do not return NO_UNLOCKED_TARGET, NO_ELIGIBLE_TARGET, no ready, PASS, done, complete, upstream_fill_required, or no production-ready candidate only because the produce queue row is not materialized.

cron_preflight_resolve must not select stale targets with workflow/content_set/site mismatch. Stop only for Hub auth/network/reference failure, WordPress auth/write failure, representative 358 no-touch lock, wrong workflow/content_set/site, duplicate-publication risk, legal/safety danger, public Gate failure, rejected/archived/hard_block, or missing identity/URL/source basis. If Hub read is OK but hub_table_upsert or another master-table write returns 403, classify as BLOCKED_HUB_WRITE_SCOPE or QUEUE_SYNC_MISMATCH, not BLOCKED_HUB_AUTH. Normal cron must not use hub_table_upsert; ordinary progress, lock, result, publication, Directory Core, FAQ JSON-LD, high-quality test, correction, and handoff records go through the approved runtime/result APIs.

For inspection cron, classification is allowed, but the exit must create production material. When production_ready_count=0, continue 0-B/1-A/1-B/1-B2/1-C in the same run, return to 0-A if needed, and create next_production_handoff with at least one production_ready=true, production_ready_with_recorded_risks, or READY_FOR_PRODUCE_WITH_RECORDED_RISKS item unless blocked by the hard stops above. This rule belongs inside every startup thread text, individual cron request text, standalone request text, and full-set request text; do not leave it only in outside explanation.

# Evaluation Score Cron Hub Auth / Network Classification Gate

Version: 2026-05-19 v1
Scope: all evaluation-score cron, all sites, all task stages

## Purpose

Every evaluation-score cron must read Main 358 Hub before it selects a target, changes a stage, writes WordPress, updates Directory Core, updates FAQ JSON-LD, or runs 301.

When Hub cannot be read, the cron must classify the failure accurately. It must not report target none, PASS, done, no ready, no correction target, no 301 target, or production-ready absence while mandatory Hub endpoints are unreadable.

## Mandatory Hub Endpoints

Each run must try to read the required endpoints for its task:

- `agent_pack`
- `agent_work_queue`
- `agent_runtime_readiness`
- workflow/article-specific `agent_pack` when the task requires it
- any required Rules / Manuals / Checks listed by the task template

If any mandatory endpoint cannot be read because of auth or network failure, stop before target selection or write operations.

## Failure Classes

### BLOCKED_HUB_AUTH

Use `BLOCKED_HUB_AUTH` when the Hub response or bootstrap result indicates an auth problem:

- HTTP 401
- HTTP 403
- `invalid token`
- `token expired`
- missing token
- all configured auth sources rejected
- credentials exist but do not have permission for the mandatory endpoint

Do not retry the same rejected auth value repeatedly. Switch to the next approved bootstrap source if available, then stop with `BLOCKED_HUB_AUTH` if every approved source fails.

### BLOCKED_HUB_NETWORK

Use `BLOCKED_HUB_NETWORK` when the auth value is present but the Hub request cannot reach or complete the HTTPS/API call:

- `EACCES`
- `fetch failed`
- DNS error
- timeout
- TLS / SSL error
- connection refused / reset
- network unreachable
- proxy / firewall / execution-environment denial

Network failures may be retried briefly with backoff, but must not loop indefinitely.

### BLOCKED_HUB_AUTH_NETWORK

Use `BLOCKED_HUB_AUTH_NETWORK` only when the run cannot safely distinguish auth failure from network/execution-environment denial. Record why it is ambiguous.

## Retry Policy

The cron must keep retry behavior short and auditable:

- Auth failure: do not retry the same `auth_source` and endpoint after a clear 401/403/invalid-token result.
- Auth bootstrap: try only approved internal auth sources. Record the source label, never the secret value.
- Network failure: retry a small bounded number of times, normally 1 to 3 attempts per endpoint.
- After the bounded retry, stop with the matching blocked status.
- Never continue to target selection or article writes after mandatory Hub read failure.

## Runtime Stat Fields

Every blocked run must leave a runtime status record. If Hub is writable, write it to Hub as a `cron_runtime_stat`. If Hub is not writable, leave it in memory/result files with `runtime_stat_pending=true`.

Required sanitized fields:

- `hub_block_status`
- `hub_error_class`
- `hub_endpoint_statuses`
- `hub_endpoint_name`
- `hub_endpoint_url_label`
- `hub_http_status`
- `hub_error_code`
- `hub_error_message_sanitized`
- `hub_auth_source_label`
- `hub_retry_count`
- `hub_bootstrap_sources_tried`
- `runtime_stat_pending`
- `next_retry_recommendation`

`hub_endpoint_statuses` should be an array or JSON string with one item per attempted endpoint. It must include endpoint name, status/error class, retry count, and auth source label.

## Secret Handling

Never write auth values, app passwords, bearer tokens, Basic auth headers, full local private paths, or token bodies to:

- public article body
- public cron.goudou-358.jp pages
- Hub manual body
- memory
- result markdown
- distributed files

Only source labels such as `default_client_token`, `H358_HUB_AGENT_TOKEN`, `CODE_YUKI_ENV_HUB_LOCAL`, or `bootstrap_fallback` may be recorded.

## Gate Behavior By Stage

All stages follow the same Hub read rule:

- collect / inspect: do not mark no candidates while Hub is unreadable.
- produce: do not create or update a post while Hub is unreadable.
- high-quality-test: do not mark PASS/FAIL based on stale local state while Hub is unreadable.
- correction: do not fix or mark no correction target while Hub is unreadable.
- improvement handoff: do not create handoff state while Hub is unreadable.
- redirect-301: do not write Redirection rules or mark `301_done` while Hub is unreadable.

## Pass Conditions

The Gate passes only when:

- all mandatory Hub endpoints for the task are read successfully, or a non-auth/non-network Hub reference incompleteness is separately classified;
- retry count is bounded and recorded;
- no secret value is written;
- blocked runs use `BLOCKED_HUB_AUTH`, `BLOCKED_HUB_NETWORK`, or `BLOCKED_HUB_AUTH_NETWORK` instead of target-none/PASS/done/no-ready;
- runtime stat or `runtime_stat_pending=true` is present.

2026-05-19 Quality Verdict Concurrency Gate

Hub source: Rules/evaluation-score-cron-quality-verdict-concurrency-rule-v6-6 / Manuals/evaluation-score-cron-quality-verdict-concurrency-gate-v6-6 / Checks/evaluation-score-cron-quality-verdict-concurrency-check-v6-6

高品質cronの複数同時起動時、同一記事にはactiveなPASS/FAILを1つだけ残す。Task8は task8_quality_claim を取得し、quality_target_identitycontent_hash を記録し、書き込み直前にHubを再読込する。

marker: hub-v0141-produce-ready-bridge-required-20260526
Before any work, read Autopost358/_branch_common/docs/CRON_LATEST_RULE_BOOTSTRAP.md and run Autopost358/_branch_common/bootstrap/autopost_cron_launcher.py or RUN_AUTOPOST_CRON_LAUNCHER.cmd. Read Main Hub api=cron_preflight_resolve first so target resolution, latest manifest, connection policy, write scope, selected candidate, fast_start_pack, recorded risks, and lock_payload are received in one call. Use api=agent_runtime_bootstrap, api=status, api=agent_runtime_readiness, api=agent_work_queue, and workflow/article api=agent_pack only as legacy fallback or detailed stage follow-up after fast-start resolve. Continue only when latest_instruction_manifest is present, hub_version >= 0.1.41, and mandatory rule keys include cron-self-refresh-before-work-v1, hub-v023-cron-write-scope-and-recorded-risks, production-pack-recorded-risks-v1, all-inspection-soft-statuses-produce-ready-v1, no-master-table-claim-bridge-v1, publication-events-count-source-v1, publication-count-reconciliation-history-v1, update-request-events-source-v1, db-migration-dual-layer-prep-v1, db-shadow-prepare-and-compare-v1, and cron-bootstrap-single-entrypoint-v1.

For production cron, candidate_ready, candidate_ready_only, pending_info, ready_with_notice, notice_required, ready_for_produce, production_ready, production_ready_with_recorded_risks, and READY_FOR_PRODUCE_WITH_RECORDED_RISKS are all production_ready_with_recorded_risks. Keep recorded risks, unknown_fields, discrepancy_notes, warning_display_plan, do_not_claim, reader_caution_text, alternative_sources, official_link_decision, and pre_upload_recheck_urls, but start one same-scope article through the approved bridge. If Work Queue has no materialized produce row but same-scope Hub References, article_material_pack, production_pack, handoff, or lock_payload contains a soft-ready candidate, use no_master_table_claim_bridge / no_master_table_claim_bridge_allowed and proceed with one article. Do not return NO_UNLOCKED_TARGET, NO_ELIGIBLE_TARGET, no ready, PASS, done, complete, upstream_fill_required, or no production-ready candidate only because the produce queue row is not materialized.

cron_preflight_resolve must not select stale targets with workflow/content_set/site mismatch. Stop only for Hub auth/network/reference failure, WordPress auth/write failure, representative 358 no-touch lock, wrong workflow/content_set/site, duplicate-publication risk, legal/safety danger, public Gate failure, rejected/archived/hard_block, or missing identity/URL/source basis. If Hub read is OK but hub_table_upsert or another master-table write returns 403, classify as BLOCKED_HUB_WRITE_SCOPE or QUEUE_SYNC_MISMATCH, not BLOCKED_HUB_AUTH. Normal cron must not use hub_table_upsert; ordinary progress, lock, result, publication, Directory Core, FAQ JSON-LD, high-quality test, correction, and handoff records go through the approved runtime/result APIs.

For inspection cron, classification is allowed, but the exit must create production material. When production_ready_count=0, continue 0-B/1-A/1-B/1-B2/1-C in the same run, return to 0-A if needed, and create next_production_handoff with at least one production_ready=true, production_ready_with_recorded_risks, or READY_FOR_PRODUCE_WITH_RECORDED_RISKS item unless blocked by the hard stops above. This rule belongs inside every startup thread text, individual cron request text, standalone request text, and full-set request text; do not leave it only in outside explanation.

# Evaluation Score Cron Quality Verdict Concurrency Gate

Version: 2026-05-19 v1
Scope: all evaluation-score cron, all sites, mainly Task8 high-quality-test and the downstream Task10 / Task11 handoff

## Purpose

When multiple high-quality-test cron runs start at nearly the same time, only one active verdict may remain for one article identity.

The cron must not leave both active PASS and active FAIL / correction_queue for the same article. Older or stale verdicts must be marked `superseded` or `stale_quality_fail`, and the newest valid owner run must be the only active state.

## Article Identity

Do not identify a target by display title alone. Display titles can be mojibake, renamed, translated, or normalized differently.

Use a stable `quality_target_identity` built from available fields:

- `canonical_url`
- `wp_post_id`
- `new_url`
- `old_url`
- `article_key`
- `target_slug`
- `site_id`
- `workflow_id`

At least one URL or `wp_post_id` must be present for Task8. If neither URL nor post id is available, do not write PASS/FAIL. Return `BLOCKED_MISSING_TARGET_IDENTITY`.

## Required Claim Before Inspection

Before public HTML inspection, Task8 must acquire a claim:

- `task8_quality_claim`
- `quality_verdict_claim`
- owner fields: `automation_id`, `run_id`, `task_code`, `quality_target_identity`
- TTL / `lock_expires_at`

After writing the claim, immediately reread Hub. Continue only if the current run is the owner.

If another active owner exists, do not inspect or write a verdict. Return `SKIP_LOCKED` and look for another candidate when the task supports next-candidate search.

## Inspection Input Generation

Each high-quality verdict must record the inspected public HTML generation:

- `public_html_checked=true`
- `public_html_status`
- `canonical_url`
- `wp_post_id` when available
- `content_hash`
- `content_hash_method`
- `wp_modified` or `http_last_modified` when available
- `checked_at_jst`
- `quality_claim_owner`

If `content_hash` cannot be obtained from the response body, compute a normalized text hash from the fetched HTML. Do not use stale local HTML without marking it as stale.

## Pre-Write Reread

Before writing PASS, FAIL, `correction_queue`, or `301_ready`, Task8 must reread Hub and check the same `quality_target_identity`.

Do not write a verdict if any newer active state exists for the same article after this run started:

- `quality_pass`
- `301_ready`
- `ready_for_retest`
- `task8_recheck`
- `correction_fixed`
- `correction_completion_score=100`
- another active `quality_verdict_claim` owned by a different run

In that case, classify the current run as:

- `STALE_VERDICT_SUPERSEDED`
- `stale_quality_fail`
- `superseded_by_run_id`

Do not leave an active `correction_queue` from a stale run.

## Single Active Verdict Rule

For one `quality_target_identity`, Hub must have at most one active quality state:

- active `quality_pass`, or
- active `quality_fail / correction_queue`, or
- active `301_ready`, or
- active `ready_for_retest / task8_recheck`.

When a newer valid PASS is written, older active FAIL/correction entries for the same identity must be moved to:

- `superseded`
- `stale_quality_fail`
- `inactive`

When a newer valid FAIL is written, older active PASS/301-ready entries may not be overwritten unless the inspected generation is newer and the pre-write reread confirms this run owns the claim.

## PASS Requirements

Task8 may write PASS only when:

- it owns the active `task8_quality_claim`;
- public HTML was fetched successfully;
- `quality_target_identity` is stable;
- `content_hash` / inspected generation is recorded;
- pre-write Hub reread confirms no newer active state has superseded this run;
- `quality_fail` and `correction_queue` for the same identity are zero or explicitly superseded;
- `quality_delta_items=[]`;
- `minimum_gate_failures=[]`.

## FAIL Requirements

Task8 may write FAIL / `correction_queue` only when:

- it owns the active `task8_quality_claim`;
- the inspected generation is current;
- the target identity matches the candidate;
- fail reasons are concrete and tied to current public HTML;
- pre-write Hub reread confirms no newer correction/PASS/301-ready state already resolved the same target;
- `quality_delta_items` includes fix location, fix condition, and retest condition.

## Downstream Guard

Task10 correction and Task11 redirect-301 must respect the same active verdict state:

- Task10 must ignore `stale_quality_fail` and `superseded` failures.
- Task11 must only process active `301_ready / redirect_ready / 301_ready_retry` generated from a non-stale PASS.
- If Task11 sees active FAIL/correction for the same identity, it must stop with `BLOCKED_PRE_301_GATE_FAILED`.

## Runtime Fields

Each Task8 run must record:

- `quality_target_identity`
- `quality_claim_id`
- `quality_claim_owner`
- `quality_claim_acquired`
- `quality_claim_reread_confirmed`
- `quality_claim_expires_at`
- `content_hash`
- `content_hash_method`
- `public_html_checked`
- `pre_write_reread_at_jst`
- `newer_state_found`
- `superseded_state_ids`
- `active_quality_state_after_write`
- `active_correction_queue_count_after_write`

## Forbidden

- Do not use display title alone as the identity key.
- Do not leave active PASS and active FAIL for the same article.
- Do not let a stale run create a live correction queue.
- Do not write 301-ready from a verdict that did not own the claim.
- Do not mark PASS from stale local files or memory-only checks.

2026-05-19 H2/H3 Heading Hierarchy Gate

Hub source: Rules/evaluation-score-cron-heading-hierarchy-rule-v6-6 / Manuals/evaluation-score-cron-heading-hierarchy-gate-v6-6 / Checks/evaluation-score-cron-heading-hierarchy-check-v6-6

評価スコア記事はH2だけの平板構造にしない。H2は大項目、H3は検索意図・共起語・読者疑問・公式確認ポイントを分解する小項目として使う。良い点、注意点、向いている人などの短い判断材料ブロックは、原則として親H2配下のH3にする。

marker: hub-v0141-produce-ready-bridge-required-20260526
Before any work, read Autopost358/_branch_common/docs/CRON_LATEST_RULE_BOOTSTRAP.md and run Autopost358/_branch_common/bootstrap/autopost_cron_launcher.py or RUN_AUTOPOST_CRON_LAUNCHER.cmd. Read Main Hub api=cron_preflight_resolve first so target resolution, latest manifest, connection policy, write scope, selected candidate, fast_start_pack, recorded risks, and lock_payload are received in one call. Use api=agent_runtime_bootstrap, api=status, api=agent_runtime_readiness, api=agent_work_queue, and workflow/article api=agent_pack only as legacy fallback or detailed stage follow-up after fast-start resolve. Continue only when latest_instruction_manifest is present, hub_version >= 0.1.41, and mandatory rule keys include cron-self-refresh-before-work-v1, hub-v023-cron-write-scope-and-recorded-risks, production-pack-recorded-risks-v1, all-inspection-soft-statuses-produce-ready-v1, no-master-table-claim-bridge-v1, publication-events-count-source-v1, publication-count-reconciliation-history-v1, update-request-events-source-v1, db-migration-dual-layer-prep-v1, db-shadow-prepare-and-compare-v1, and cron-bootstrap-single-entrypoint-v1.

For production cron, candidate_ready, candidate_ready_only, pending_info, ready_with_notice, notice_required, ready_for_produce, production_ready, production_ready_with_recorded_risks, and READY_FOR_PRODUCE_WITH_RECORDED_RISKS are all production_ready_with_recorded_risks. Keep recorded risks, unknown_fields, discrepancy_notes, warning_display_plan, do_not_claim, reader_caution_text, alternative_sources, official_link_decision, and pre_upload_recheck_urls, but start one same-scope article through the approved bridge. If Work Queue has no materialized produce row but same-scope Hub References, article_material_pack, production_pack, handoff, or lock_payload contains a soft-ready candidate, use no_master_table_claim_bridge / no_master_table_claim_bridge_allowed and proceed with one article. Do not return NO_UNLOCKED_TARGET, NO_ELIGIBLE_TARGET, no ready, PASS, done, complete, upstream_fill_required, or no production-ready candidate only because the produce queue row is not materialized.

cron_preflight_resolve must not select stale targets with workflow/content_set/site mismatch. Stop only for Hub auth/network/reference failure, WordPress auth/write failure, representative 358 no-touch lock, wrong workflow/content_set/site, duplicate-publication risk, legal/safety danger, public Gate failure, rejected/archived/hard_block, or missing identity/URL/source basis. If Hub read is OK but hub_table_upsert or another master-table write returns 403, classify as BLOCKED_HUB_WRITE_SCOPE or QUEUE_SYNC_MISMATCH, not BLOCKED_HUB_AUTH. Normal cron must not use hub_table_upsert; ordinary progress, lock, result, publication, Directory Core, FAQ JSON-LD, high-quality test, correction, and handoff records go through the approved runtime/result APIs.

For inspection cron, classification is allowed, but the exit must create production material. When production_ready_count=0, continue 0-B/1-A/1-B/1-B2/1-C in the same run, return to 0-A if needed, and create next_production_handoff with at least one production_ready=true, production_ready_with_recorded_risks, or READY_FOR_PRODUCE_WITH_RECORDED_RISKS item unless blocked by the hard stops above. This rule belongs inside every startup thread text, individual cron request text, standalone request text, and full-set request text; do not leave it only in outside explanation.

# Evaluation Score Cron H2/H3 Heading Hierarchy Gate

Version: 2026-05-20 v2
Scope: all evaluation-score cron, all sites, produce / high-quality-test / correction

## Purpose

Evaluation score articles must not become a flat list of H2 headings. A good article uses H2 for major sections and H3 for subtopics inside those sections.

If every major point is written as H2, the article becomes monotonous, shallow, and hard to scan. H3 headings are required to break down search intent, official confirmation points, cooccurrence terms, reader doubts, comparison axes, and article-specific original angles.

## Base Structure Must Stay

Do not change the established opening order:

1. H1 title
2. Evaluation score table
3. Lead paragraph
4. Official text link
5. First H2

The H2/H3 hierarchy Gate starts after the first H2. Do not add an in-body H1.

## H2 Role

Use H2 only for major sections.

Examples:

- score interpretation / evaluation score item explanation
- service overview
- pricing and renewal conditions
- payment and cancellation
- safety / privacy
- strengths
- warnings
- suitable users
- overall evaluation
- FAQ

H2 should be a section-level promise. Do not make every small point an H2.

## H3 Role

Use H3 for subtopics within an H2.

Examples under pricing:

- monthly fee and billing cycle
- renewal timing
- campaign / discount display
- payment statement and merchant name

Examples under safety:

- age condition
- privacy policy / personal information
- support / inquiry route
- device and viewing environment

Examples under score item explanation:

- what raises the score
- what lowers the score
- what to compare before registration

## Decision Support Blocks

Recurring short support blocks are normally H3, not H2.

These blocks include:

- 良い点 / good points
- 注意点 / cautions
- 向いている人 / recommended for
- 向いていない人 / not recommended for
- 確認すべき条件 / final check points
- short comparison notes and bullet-only decision support lists

Use a parent H2 such as:

```html
<section id="decision-support">
<h2 id="decision-support-heading">登録前に確認したい判断材料</h2>

<h3 id="good-points">良い点</h3>
...

<h3 id="caution-points">注意点</h3>
...

<h3 id="recommended-for">向いている人</h3>
...
</section>
```

Do not make `良い点` / `注意点` / `向いている人` independent H2 sections when they are mostly short bullet lists. They may be H2 only when each block has enough original body text, search-intent coverage, and service-specific analysis to stand as a major section.

## Minimum Requirements

The visible article body must normally include:

- at least 2 H3 headings in normal evaluation score articles;
- at least 1 article-specific H3 created from search intent, cooccurrence terms, reader questions, official confirmation points, or SERP tendencies;
- H3 headings nested under appropriate H2 sections;
- support blocks such as good points / cautions / recommended users grouped under a parent H2 and rendered as H3 unless they are substantial major sections;
- `id` attributes on important H2 and H3 headings, or a surrounding `section id` with clear heading ids;
- no H2-only article body unless a documented site-specific exception exists.

For long articles, use more H3 headings as needed. Do not satisfy this Gate by adding thin or meaningless H3s.

## H2 Overuse Failure

Treat the article as FAIL or correction target when:

- visible body has H3 count = 0;
- H2 headings appear as a flat list without subtopic breakdown;
- H2 count is high while H3 count is 0 or extremely low;
- score item headings are all H2 but contain no H3-level explanation;
- `良い点` / `注意点` / `向いている人` / `向いていない人` are H2 headings but contain only short bullet lists or thin support text;
- support blocks are not grouped under a parent H2 such as decision support / registration check / final comparison points;
- article-specific search intent / cooccurrence / reader doubt is not represented by any H3;
- H3 headings have no IDs or no stable section IDs;
- H3 is used only as decorative text without enough body under it.

## Recommended Pattern

Use H2 for the large section, then H3 for concrete checks.

Example:

```html
<section id="pricing-renewal">
<h2 id="pricing-renewal-heading">料金と更新条件</h2>
<p>...</p>

<h3 id="monthly-fee-cycle">月額料金と更新周期</h3>
<p>...</p>

<h3 id="payment-statement">決済明細で見るべき点</h3>
<p>...</p>
</section>
```

## Produce Cron

Produce cron must design the article with H2/H3 hierarchy from the beginning.

Before `ready_for_high_quality_test`, produce must record:

- `heading_hierarchy_checked=true`
- `h2_count`
- `h3_count`
- `h3_article_specific_count`
- `h3_ids_present`
- `support_block_heading_level_checked`
- `support_blocks_h3_not_h2`
- `decision_support_parent_h2_present`
- `h2_h3_quality_delta_items`

If H3 is missing or thin, produce must fix it before handoff where possible.

## High-Quality-Test Cron

High-quality-test cron must inspect public or preview HTML and fail when the article is H2-only or H3-thin.

It must return concrete `quality_delta_items`:

- where to add H3;
- which H2 section should contain it;
- what search intent / cooccurrence term / reader question / official confirmation point it should cover;
- whether good points / cautions / recommended users should be changed from H2 to H3 under a parent H2;
- retest condition after correction.

## Correction Cron

Correction cron must add or rewrite H3 sections naturally, without breaking the opening order or bloating the article.

Correction must:

- add meaningful H3s under existing or improved H2 sections;
- convert thin support-block H2 headings such as good points / cautions / recommended users into H3 under a parent H2 when appropriate;
- add IDs;
- add body text under H3s;
- preserve natural keyword placement;
- update FAQ/JSON-LD only when FAQ content changes;
- recheck public or preview HTML;
- return to `ready_for_retest / task8_recheck`.

Memory-only completion is not enough.

## Pass Conditions

The Gate passes only when:

- H3 count is not zero;
- important H2 sections have appropriate H3 breakdown when needed;
- at least one article-specific H3 exists;
- H2/H3 IDs or section IDs are present;
- the hierarchy improves readability and search intent coverage;
- high-quality-test sees the structure in public or preview HTML.

2026-05-19 Content Volume / Natural Expansion Gate

Hub source: Rules/evaluation-score-cron-content-volume-natural-expansion-rule-v6-6 / Manuals/evaluation-score-cron-content-volume-natural-expansion-gate-v6-6 / Checks/evaluation-score-cron-content-volume-natural-expansion-check-v6-6

Evaluation-score cron must reject thin pages below 4,000 visible Japanese characters as quality failure, then expand naturally with Search Compass, keyword-family density, cooccurrence terms, related terms, H3 sections, concrete examples, and FAQ depth. There is no maximum character count. Useful old information must be marked clearly, for example with <del>old value</del> plus current value.

marker: hub-v0141-produce-ready-bridge-required-20260526
Before any work, read Autopost358/_branch_common/docs/CRON_LATEST_RULE_BOOTSTRAP.md and run Autopost358/_branch_common/bootstrap/autopost_cron_launcher.py or RUN_AUTOPOST_CRON_LAUNCHER.cmd. Read Main Hub api=cron_preflight_resolve first so target resolution, latest manifest, connection policy, write scope, selected candidate, fast_start_pack, recorded risks, and lock_payload are received in one call. Use api=agent_runtime_bootstrap, api=status, api=agent_runtime_readiness, api=agent_work_queue, and workflow/article api=agent_pack only as legacy fallback or detailed stage follow-up after fast-start resolve. Continue only when latest_instruction_manifest is present, hub_version >= 0.1.41, and mandatory rule keys include cron-self-refresh-before-work-v1, hub-v023-cron-write-scope-and-recorded-risks, production-pack-recorded-risks-v1, all-inspection-soft-statuses-produce-ready-v1, no-master-table-claim-bridge-v1, publication-events-count-source-v1, publication-count-reconciliation-history-v1, update-request-events-source-v1, db-migration-dual-layer-prep-v1, db-shadow-prepare-and-compare-v1, and cron-bootstrap-single-entrypoint-v1.

For production cron, candidate_ready, candidate_ready_only, pending_info, ready_with_notice, notice_required, ready_for_produce, production_ready, production_ready_with_recorded_risks, and READY_FOR_PRODUCE_WITH_RECORDED_RISKS are all production_ready_with_recorded_risks. Keep recorded risks, unknown_fields, discrepancy_notes, warning_display_plan, do_not_claim, reader_caution_text, alternative_sources, official_link_decision, and pre_upload_recheck_urls, but start one same-scope article through the approved bridge. If Work Queue has no materialized produce row but same-scope Hub References, article_material_pack, production_pack, handoff, or lock_payload contains a soft-ready candidate, use no_master_table_claim_bridge / no_master_table_claim_bridge_allowed and proceed with one article. Do not return NO_UNLOCKED_TARGET, NO_ELIGIBLE_TARGET, no ready, PASS, done, complete, upstream_fill_required, or no production-ready candidate only because the produce queue row is not materialized.

cron_preflight_resolve must not select stale targets with workflow/content_set/site mismatch. Stop only for Hub auth/network/reference failure, WordPress auth/write failure, representative 358 no-touch lock, wrong workflow/content_set/site, duplicate-publication risk, legal/safety danger, public Gate failure, rejected/archived/hard_block, or missing identity/URL/source basis. If Hub read is OK but hub_table_upsert or another master-table write returns 403, classify as BLOCKED_HUB_WRITE_SCOPE or QUEUE_SYNC_MISMATCH, not BLOCKED_HUB_AUTH. Normal cron must not use hub_table_upsert; ordinary progress, lock, result, publication, Directory Core, FAQ JSON-LD, high-quality test, correction, and handoff records go through the approved runtime/result APIs.

For inspection cron, classification is allowed, but the exit must create production material. When production_ready_count=0, continue 0-B/1-A/1-B/1-B2/1-C in the same run, return to 0-A if needed, and create next_production_handoff with at least one production_ready=true, production_ready_with_recorded_risks, or READY_FOR_PRODUCE_WITH_RECORDED_RISKS item unless blocked by the hard stops above. This rule belongs inside every startup thread text, individual cron request text, standalone request text, and full-set request text; do not leave it only in outside explanation.

# Evaluation Score Cron Content Volume / Natural Expansion Gate

Created: 2026-05-19
Scope: all sites / evaluation score articles / produce, high-quality-test, correction

## Purpose

Evaluation score articles must not pass with thin sections, short repeated paragraphs, or shallow H2/H3 blocks.

This Gate defines a minimum visible article volume and the correct way to expand content: natural keyword-family use, search intent, cooccurrence terms, related terms, concrete examples, official confirmation points, FAQ depth, and reader decision axes.

## Minimum Visible Text Volume

For Japanese evaluation score articles, the visible article text must normally be at least 4,000 Japanese characters.

The cron must record:

- `content_volume_checked=true`
- `visible_text_char_count`
- `visible_text_min_char_count=4000`
- `visible_text_count_scope`
- `content_volume_status`
- `content_volume_quality_delta_items`

Count only reader-visible article content:

- lead text
- evaluation score table visible text
- score-item body sections
- basic information table
- supplemental sections
- good points / cautions / suitable users / unsuitable users
- FAQ body
- summary / overall evaluation

Do not count:

- FAQ JSON-LD script
- JavaScript
- navigation
- sidebar
- related posts
- comments
- admin text
- hidden metadata
- runtime logs

## PASS Prohibited

If `visible_text_char_count < 4000`, the page must not be marked:

- `ready_for_high_quality_test`
- `PASS`
- `ready_for_retest`
- `301_ready`

This is a quality failure / correction target, not a Hub auth BLOCKED state.

## No Maximum Character Count

There is no upper character limit.

However, expansion must be useful. Do not pad the page with repeated phrases, generic filler, or mechanical keyword stuffing.

## Natural Expansion Policy

When text is below the minimum, add useful content by expanding:

- search intent
- cooccurrence terms
- related terms
- official confirmation points
- pricing / plan / cancellation / safety / age / legal / technical points
- comparison axes
- concrete examples
- reader questions
- FAQ depth
- score-item explanations

Preferred expansion locations:

- score-item body sections
- H3 subsections under existing H2s
- a new article-specific H3 section
- before the final summary
- before FAQ
- FAQ answers

Every added H2/H3 or section must have an id.

## Keyword Density Interaction

Keyword-density improvement is a reason to expand content, but density must be improved naturally.

Use entity-intent keyword families, not single-word stuffing.

Examples:

- `SERVICEの評判`
- `SERVICEの評価`
- `SERVICEのレビュー`
- `SERVICEを使う前に確認したい条件`

Do not increase density by repeating only:

- `評判`
- `評価`
- `レビュー`
- the service name alone

If density is low, add reader-useful context. If density is too high, use natural paraphrases and related terms.

## Outdated Information Policy

Old information should not be blindly deleted or silently mixed with new information.

Use outdated information only when it helps reader judgment, such as price changes, plan changes, cancellation rules, official policy changes, service migration, or feature changes.

When keeping old information, make the status clear:

```html
<del>旧料金</del> 現在の料金
```

Use a checked date or status note when useful.

If old information only creates confusion and has no reader value, remove it or move it into a short context note.

The cron must record:

- `outdated_info_checked`
- `outdated_info_del_used`
- `outdated_info_items`
- `outdated_info_action`

## Stage Rules

### Produce

Produce cron must measure visible text before high-quality handoff.

If below 4,000 characters, produce cron must expand naturally before `ready_for_high_quality_test`. It must not push a thin article to Task8 as if the problem were only high-quality-test's job.

### High-Quality Test

High-quality-test cron must inspect public or preview HTML and FAIL / requeue when:

- visible text is below 4,000 characters;
- H2/H3 sections are thin;
- many sections have only one short paragraph;
- keyword-density improvement was done by repetition;
- old information is mixed without `del`, checked date, or clear status.

### Correction

Correction cron must expand naturally and remeasure.

It must not complete with memory-only updates. It must recheck public or preview HTML and return `ready_for_retest` / `task8_recheck` only when:

- visible text is at least 4,000 characters;
- the expansion is natural;
- keyword-density state is acceptable;
- old information is handled clearly;
- no new H2/H3 ID gaps were introduced.

## Runtime Output

Every stage should preserve these fields when applicable:

- `content_volume_checked`
- `visible_text_char_count`
- `visible_text_min_char_count`
- `visible_text_count_scope`
- `content_volume_status`
- `natural_expansion_required`
- `natural_expansion_done`
- `keyword_density_expansion_plan`
- `keyword_density_after_expansion`
- `outdated_info_checked`
- `outdated_info_del_used`
- `outdated_info_items`
- `content_volume_quality_delta_items`

2026-05-20 Runtime Retry / Revision Lock Gate

Hub source: Rules/evaluation-score-cron-runtime-retry-revision-lock-rule-v6-6 / Manuals/evaluation-score-cron-runtime-retry-revision-lock-gate-v6-6 / Checks/evaluation-score-cron-runtime-retry-revision-lock-check-v6-6

Evaluation-score cron must use short jitter and bounded retries for network-class Hub bootstrap failures, while keeping auth failures as BLOCKED_HUB_AUTH. Revision-required states such as needs_production_revision must not be hidden by an older completed lock.

marker: hub-v0141-produce-ready-bridge-required-20260526
Before any work, read Autopost358/_branch_common/docs/CRON_LATEST_RULE_BOOTSTRAP.md and run Autopost358/_branch_common/bootstrap/autopost_cron_launcher.py or RUN_AUTOPOST_CRON_LAUNCHER.cmd. Read Main Hub api=cron_preflight_resolve first so target resolution, latest manifest, connection policy, write scope, selected candidate, fast_start_pack, recorded risks, and lock_payload are received in one call. Use api=agent_runtime_bootstrap, api=status, api=agent_runtime_readiness, api=agent_work_queue, and workflow/article api=agent_pack only as legacy fallback or detailed stage follow-up after fast-start resolve. Continue only when latest_instruction_manifest is present, hub_version >= 0.1.41, and mandatory rule keys include cron-self-refresh-before-work-v1, hub-v023-cron-write-scope-and-recorded-risks, production-pack-recorded-risks-v1, all-inspection-soft-statuses-produce-ready-v1, no-master-table-claim-bridge-v1, publication-events-count-source-v1, publication-count-reconciliation-history-v1, update-request-events-source-v1, db-migration-dual-layer-prep-v1, db-shadow-prepare-and-compare-v1, and cron-bootstrap-single-entrypoint-v1.

For production cron, candidate_ready, candidate_ready_only, pending_info, ready_with_notice, notice_required, ready_for_produce, production_ready, production_ready_with_recorded_risks, and READY_FOR_PRODUCE_WITH_RECORDED_RISKS are all production_ready_with_recorded_risks. Keep recorded risks, unknown_fields, discrepancy_notes, warning_display_plan, do_not_claim, reader_caution_text, alternative_sources, official_link_decision, and pre_upload_recheck_urls, but start one same-scope article through the approved bridge. If Work Queue has no materialized produce row but same-scope Hub References, article_material_pack, production_pack, handoff, or lock_payload contains a soft-ready candidate, use no_master_table_claim_bridge / no_master_table_claim_bridge_allowed and proceed with one article. Do not return NO_UNLOCKED_TARGET, NO_ELIGIBLE_TARGET, no ready, PASS, done, complete, upstream_fill_required, or no production-ready candidate only because the produce queue row is not materialized.

cron_preflight_resolve must not select stale targets with workflow/content_set/site mismatch. Stop only for Hub auth/network/reference failure, WordPress auth/write failure, representative 358 no-touch lock, wrong workflow/content_set/site, duplicate-publication risk, legal/safety danger, public Gate failure, rejected/archived/hard_block, or missing identity/URL/source basis. If Hub read is OK but hub_table_upsert or another master-table write returns 403, classify as BLOCKED_HUB_WRITE_SCOPE or QUEUE_SYNC_MISMATCH, not BLOCKED_HUB_AUTH. Normal cron must not use hub_table_upsert; ordinary progress, lock, result, publication, Directory Core, FAQ JSON-LD, high-quality test, correction, and handoff records go through the approved runtime/result APIs.

For inspection cron, classification is allowed, but the exit must create production material. When production_ready_count=0, continue 0-B/1-A/1-B/1-B2/1-C in the same run, return to 0-A if needed, and create next_production_handoff with at least one production_ready=true, production_ready_with_recorded_risks, or READY_FOR_PRODUCE_WITH_RECORDED_RISKS item unless blocked by the hard stops above. This rule belongs inside every startup thread text, individual cron request text, standalone request text, and full-set request text; do not leave it only in outside explanation.

# Evaluation Score Cron Runtime Retry / Revision Lock Gate

Created: 2026-05-20
Scope: all sites / evaluation score cron / all stages

## Purpose

Evaluation score cron must keep trying to release useful articles without ignoring safety.

Recent failures showed two different problems:

1. `agent_pack` access sometimes stops with `connect EACCES ... hub.goudou-358.jp:443`.
2. Produce cron can confuse a previous `completed` lock with a `needs_production_revision` state and stop even though the same article still needs self-revision.

This Gate fixes both problems without allowing Hub-unread runs to guess targets or write articles blindly.

## Runtime Jitter Before Hub Bootstrap

When several cron runs may start around the same time, each run should wait a short random jitter before the first Hub bootstrap request.

Recommended:

- default jitter: 5-20 seconds
- manual immediate test: 0-5 seconds is acceptable
- record `runtime_jitter_seconds`

This reduces simultaneous `agent_pack` access collisions.

## Short Retry For Network-Class Failures

For network-class errors, cron should retry briefly before declaring `BLOCKED_HUB_NETWORK`.

Network-class examples:

- `connect EACCES`
- `fetch failed`
- DNS error
- timeout
- TLS/SSL connection error
- connection refused
- temporary network unavailable

Retry policy:

- maximum 3 attempts per endpoint during bootstrap
- backoff with jitter, for example 5s, 15s, 30s plus random jitter
- do not retry forever
- record `hub_retry_count`
- record `hub_endpoint_statuses`
- record `hub_network_error_kind`
- record `hub_bootstrap_endpoint`

## Auth Failures Are Not Network Retry

Do not treat auth failures as retryable network failures.

Auth-class examples:

- HTTP 401
- HTTP 403
- invalid token
- token expired
- permission denied

These remain `BLOCKED_HUB_AUTH`. Do not repeat the same invalid credential in a loop.

## Bootstrap Endpoint Order

Cron should use a safe bootstrap sequence:

1. `agent_runtime_readiness`
2. `agent_pack`
3. `agent_work_queue`
4. stage-specific target pack or article pack

If a lightweight endpoint succeeds but `agent_pack` fails, the run still must not classify targets, PASS, write WordPress, update Directory Core, update FAQ JSON-LD, execute 301, or delete.

`agent_pack` or the stage-required Hub pack must be readable before target decision.

## Pending Runtime Stat

When Hub cannot be written because the same network problem is active, write only local memory/state:

- `runtime_stat_pending=true`
- `pending_runtime_stat_reason`
- `hub_endpoint_statuses`
- `hub_auth_source_label`
- `hub_retry_count`
- `hub_network_error_kind`
- `last_hub_bootstrap_endpoint`

Do not write credentials, tokens, app passwords, or local secret values.

On the next successful Hub connection, cron should send pending runtime stats before or along with the new run result.

## Revision Lock Semantics

Lock states must distinguish final completion from revision states.

### Final complete lock

Use a final `completed` lock only when the stage actually handed off to the next stage and Hub accepted that final state.

Examples:

- produce -> `ready_for_high_quality_test`
- high-quality-test -> `301_ready` or `correction_queue`
- correction -> `ready_for_retest` / `task8_recheck`
- redirect-301 -> `301_done`

### Revision-required state

When the current article is not handed to the next stage and must be reworked by the same stage, do not leave a final completed lock that blocks rework.

Use a revision state instead:

- `needs_production_revision`
- `production_quality_fail_requeued`
- `needs_same_stage_revision`
- `revision_required`
- `self_revision_pending`

The same stage may reacquire the article when:

- the latest active state is a revision-required state;
- the previous lock owner is the same automation family or the lock is stale;
- no other active owner is editing the same target;
- Hub is reread after claim.

## Completed Lock Must Not Hide Active Revision

When both old `completed` and newer `needs_production_revision` records exist, the newest active stage state wins.

Cron must sort target history by reliable timestamp / exported_at / updated_at and use the latest active state.

If latest state is `needs_production_revision`, produce cron should treat the article as a revision candidate, not as completed.

If latest state is `ready_for_high_quality_test`, produce cron must not touch it.

If latest state is `correction_queue`, produce cron must not touch it.

## Lock Claim Flow

Before editing, cron must:

1. read the latest Hub state;
2. select only candidates without active owner, or candidates legally reacquirable by the same stage;
3. create `task_lock`, `stage_claim`, `production_claim`, or equivalent;
4. reread Hub immediately;
5. continue only if its own `automation_id` / `run_id` is lock owner;
6. if lock failed, skip that target and try the next candidate when the stage allows it.

Lock failure is not a reason to stop immediately when other valid candidates exist.

## Runtime Transport Fallback

Cron must not depend on a single language runtime's direct HTTPS path. If Node.js direct HTTPS/fetch fails with `connect EACCES`, `fetch failed`, DNS, timeout, TLS, or similar network-class errors while an OS-approved transport such as `curl.exe`, PowerShell `Invoke-WebRequest`, or Python `urllib` can reach the same endpoint, the cron must switch to that reachable transport for Hub bootstrap, Hub fresh reads, Search Compass calls, and public HTML checks.

If a Node.js process also blocks child-process network access, such as `node -> curl.exe` returning HTTP 000 / connection refused while top-level `curl.exe` or top-level Python succeeds, do not keep the inspect/check logic inside Node. Launch the Hub bootstrap and candidate inspection through a top-level Python, PowerShell, or direct curl runner, or rewrite that cron stage in Python/PowerShell. Repeating the same Node runner is not a valid retry.

This is not an authentication bypass. The same Hub token, endpoint, request method, and headers must be used, and the token value must never be printed, written to memory, public pages, Hub body, or distributed files. The runtime result must record sanitized transport facts such as `hub_transport_attempts`, `hub_selected_transport`, `hub_endpoint_statuses`, `hub_network_error_kind`, and `node_child_process_network_blocked`.

If all available transports fail, stop as `BLOCKED_HUB_NETWORK`. Do not classify targets, PASS, no target, ready, done, write WordPress, update Directory Core, update FAQ JSON-LD, execute 301, or delete.

## Stage-Specific Rules

### Inspect

Inspect cannot classify candidates without Hub source. If Hub network retry fails, stop as `BLOCKED_HUB_NETWORK`.

### Produce

Produce may process a fresh `production_ready` target or a latest active `needs_production_revision` target.

Produce must not let an old `completed` lock hide a newer revision-required state.

### High-Quality Test

High-quality-test must claim one target and prevent concurrent PASS/FAIL conflict. Stale verdicts must be superseded.

### Correction

Correction must claim one active `correction_queue` or `quality_fail` target. It must not touch targets already moved to `ready_for_retest`, `task8_recheck`, or `301_ready`.

### Redirect 301

Redirect cron must process only active `301_ready`, `redirect_ready`, or `301_ready_retry` states. If a newer `correction_queue` exists, 301 must stop as pre-301 Gate failure.

## Required Runtime Fields

All stages should record when applicable:

- `runtime_jitter_seconds`
- `hub_retry_count`
- `hub_endpoint_statuses`
- `hub_network_error_kind`
- `hub_bootstrap_endpoint`
- `hub_transport_attempts`
- `hub_selected_transport`
- `node_child_process_network_blocked`
- `runtime_stat_pending`
- `pending_runtime_stat_reason`
- `lock_state_checked`
- `latest_active_stage_state`
- `completed_lock_ignored_due_to_newer_revision`
- `revision_reacquire_allowed`
- `revision_reacquire_reason`
- `stage_claim_created`
- `stage_claim_owner_verified`
- `lock_failed_next_candidate_attempted`

## PASS Prohibited

Do not mark PASS, done, no target, ready, or complete when:

- Hub required source is unreadable after retry;
- the latest active state cannot be determined;
- lock owner cannot be verified;
- a newer revision/correction state conflicts with the intended operation.

2026-05-20 porn-fun Directory Category Genre Gate

Hub source: Rules/porn-fun-directory-category-genre-rule-v6-6 / Manuals/porn-fun-directory-category-genre-gate-v6-6 / Checks/porn-fun-directory-category-genre-check-v6-6

porn-fun の directory_category はトップ辞書のジャンル導線です。評価軸カテゴリを入れず、動画配信、ライブチャット、Hentai Games、NSFW AI、アダルトグッズ通販などのジャンルだけを入れます。

marker: hub-v0141-produce-ready-bridge-required-20260526
Before any work, read Autopost358/_branch_common/docs/CRON_LATEST_RULE_BOOTSTRAP.md and run Autopost358/_branch_common/bootstrap/autopost_cron_launcher.py or RUN_AUTOPOST_CRON_LAUNCHER.cmd. Read Main Hub api=cron_preflight_resolve first so target resolution, latest manifest, connection policy, write scope, selected candidate, fast_start_pack, recorded risks, and lock_payload are received in one call. Use api=agent_runtime_bootstrap, api=status, api=agent_runtime_readiness, api=agent_work_queue, and workflow/article api=agent_pack only as legacy fallback or detailed stage follow-up after fast-start resolve. Continue only when latest_instruction_manifest is present, hub_version >= 0.1.41, and mandatory rule keys include cron-self-refresh-before-work-v1, hub-v023-cron-write-scope-and-recorded-risks, production-pack-recorded-risks-v1, all-inspection-soft-statuses-produce-ready-v1, no-master-table-claim-bridge-v1, publication-events-count-source-v1, publication-count-reconciliation-history-v1, update-request-events-source-v1, db-migration-dual-layer-prep-v1, db-shadow-prepare-and-compare-v1, and cron-bootstrap-single-entrypoint-v1.

For production cron, candidate_ready, candidate_ready_only, pending_info, ready_with_notice, notice_required, ready_for_produce, production_ready, production_ready_with_recorded_risks, and READY_FOR_PRODUCE_WITH_RECORDED_RISKS are all production_ready_with_recorded_risks. Keep recorded risks, unknown_fields, discrepancy_notes, warning_display_plan, do_not_claim, reader_caution_text, alternative_sources, official_link_decision, and pre_upload_recheck_urls, but start one same-scope article through the approved bridge. If Work Queue has no materialized produce row but same-scope Hub References, article_material_pack, production_pack, handoff, or lock_payload contains a soft-ready candidate, use no_master_table_claim_bridge / no_master_table_claim_bridge_allowed and proceed with one article. Do not return NO_UNLOCKED_TARGET, NO_ELIGIBLE_TARGET, no ready, PASS, done, complete, upstream_fill_required, or no production-ready candidate only because the produce queue row is not materialized.

cron_preflight_resolve must not select stale targets with workflow/content_set/site mismatch. Stop only for Hub auth/network/reference failure, WordPress auth/write failure, representative 358 no-touch lock, wrong workflow/content_set/site, duplicate-publication risk, legal/safety danger, public Gate failure, rejected/archived/hard_block, or missing identity/URL/source basis. If Hub read is OK but hub_table_upsert or another master-table write returns 403, classify as BLOCKED_HUB_WRITE_SCOPE or QUEUE_SYNC_MISMATCH, not BLOCKED_HUB_AUTH. Normal cron must not use hub_table_upsert; ordinary progress, lock, result, publication, Directory Core, FAQ JSON-LD, high-quality test, correction, and handoff records go through the approved runtime/result APIs.

For inspection cron, classification is allowed, but the exit must create production material. When production_ready_count=0, continue 0-B/1-A/1-B/1-B2/1-C in the same run, return to 0-A if needed, and create next_production_handoff with at least one production_ready=true, production_ready_with_recorded_risks, or READY_FOR_PRODUCE_WITH_RECORDED_RISKS item unless blocked by the hard stops above. This rule belongs inside every startup thread text, individual cron request text, standalone request text, and full-set request text; do not leave it only in outside explanation.

# porn-fun Directory Category Genre Gate v6.6

## Purpose

porn-fun.com の辞書トップは、The Porn Dude 型のジャンル導線として扱う。
`directory_category` は「動画配信」「ライブチャット」「Hentai Games」などのジャンル分類に使う。
料金、作品、使いやすさ、決済、退会、安全面、日本語対応、海外対応などの評価軸は `directory_category` に入れない。

## 正本

- collection: `adult-services`
- top shortcode:
  `		

Directory

成人向けサービス辞書

成人向け動画配信、ライブチャット、Hentai Games、NSFW AI、アダルトグッズ通販などをジャンル別に探せる辞書です。

0掲載 0カテゴリ 0タグ
おすすめリンク

まず確認しやすい掲載先をリンク集として並べています。

Featured未設定のため、現在は総合リンクを表示しています。

総合リンク一覧

登録済みの掲載を順位順にまとめて確認できます。

すべて見る

Directoryから最初の店舗情報を追加してください。

` ## Allowed directory_category slugs - `adult-video-streaming`: アダルト動画配信 - `live-chat`: ライブチャット - `hentai-games`: Hentai Games - `nsfw-ai`: NSFW AI - `adult-goods-shop`: アダルトグッズ通販 - `sex-doll-shops`: セックスドール - `adult-shop-store`: 実店舗型アダルトショップ ## Forbidden directory_category slugs for porn-fun 以下は評価軸またはタグ候補であり、porn-fun の `directory_category` に入れない。 - `pricing-cost` - `content-products` - `usability` - `payment-shipping` - `cancel-return` - `privacy-safety` - `japanese-support` - `global-support` ## Taxonomy role split - `directory_collection`: 辞書セット。porn-fun は原則 `adult-services`。 - `directory_category`: トップや一覧で見せるジャンル。読者が最初に選ぶ大分類。 - `directory_type`: サービス種別の補助分類。既存互換で残してよいが、トップ導線の主分類は `directory_category`。 - `directory_tag`: 年齢確認、定額、単品購入、クレジットカード、D2Pass、スマホ対応、退会導線などの特徴タグ。 - 評価スコア項目: 本文、Directory Core の評価表、チェック項目として扱う。カテゴリにはしない。 ## Cron gate Produce cron: - 本文制作前に候補のジャンルを1つ選ぶ。 - `directory_category` には許可ジャンルだけを入れる。 - 評価軸カテゴリを検出した場合、公開前にジャンルカテゴリへ置換する。 - `porn_fun_directory_category_checked=true` をHubへ残す。 High-quality-test cron: - 公開HTMLだけでなく REST の `directory_category` も確認する。 - porn-fun で評価軸カテゴリが1つでも入っていたら PASS 禁止。 - 記事品質が良くても taxonomy 不正なら `correction_queue` へ返す。 Correction cron: - 評価軸カテゴリを削除し、正しいジャンルカテゴリへ差し替える。 - タグに入れるべきものは `directory_tag` へ移す。 - 修正後に REST で `directory_category` を再確認し、`remaining_taxonomy_errors=[]` を残す。 301 cron: - 301実行前に新辞書記事の `directory_category` が許可ジャンルであることを確認する。 - 不正カテゴリが残る場合は 301 しない。`BLOCKED_PRE_301_GATE_FAILED` として訂正へ返す。 ## Required runtime fields - `porn_fun_directory_category_checked` - `directory_collection_slug` - `directory_category_slugs` - `directory_type_slugs` - `directory_tag_slugs` - `forbidden_evaluation_axis_category_count` - `taxonomy_role_split_checked` - `remaining_taxonomy_errors` ## PASS conditions - `directory_collection_slug=adult-services` - `directory_category_slugs` が allowed list のみ - forbidden list が `directory_category` に0件 - 評価軸はカテゴリではなく本文/評価表/タグへ整理済み - トップショートコードは `collection="adult-services"` を使う

2026-05-20 cron automation命名Gate

Hub正本: Rules/evaluation-score-cron-automation-naming-convention-rule-v6-6 / Manuals/evaluation-score-cron-automation-naming-convention-gate-v6-6 / Checks/evaluation-score-cron-automation-naming-convention-check-v6-6

automation名は サイト名【記事タイプ・ジャンル短縮】工程cron に統一する。正式本文では「評価スコアページ用」と書いてよいが、automation名では 評価 に短縮する。

marker: hub-v0141-produce-ready-bridge-required-20260526
Before any work, read Autopost358/_branch_common/docs/CRON_LATEST_RULE_BOOTSTRAP.md and run Autopost358/_branch_common/bootstrap/autopost_cron_launcher.py or RUN_AUTOPOST_CRON_LAUNCHER.cmd. Read Main Hub api=cron_preflight_resolve first so target resolution, latest manifest, connection policy, write scope, selected candidate, fast_start_pack, recorded risks, and lock_payload are received in one call. Use api=agent_runtime_bootstrap, api=status, api=agent_runtime_readiness, api=agent_work_queue, and workflow/article api=agent_pack only as legacy fallback or detailed stage follow-up after fast-start resolve. Continue only when latest_instruction_manifest is present, hub_version >= 0.1.41, and mandatory rule keys include cron-self-refresh-before-work-v1, hub-v023-cron-write-scope-and-recorded-risks, production-pack-recorded-risks-v1, all-inspection-soft-statuses-produce-ready-v1, no-master-table-claim-bridge-v1, publication-events-count-source-v1, publication-count-reconciliation-history-v1, update-request-events-source-v1, db-migration-dual-layer-prep-v1, db-shadow-prepare-and-compare-v1, and cron-bootstrap-single-entrypoint-v1.

For production cron, candidate_ready, candidate_ready_only, pending_info, ready_with_notice, notice_required, ready_for_produce, production_ready, production_ready_with_recorded_risks, and READY_FOR_PRODUCE_WITH_RECORDED_RISKS are all production_ready_with_recorded_risks. Keep recorded risks, unknown_fields, discrepancy_notes, warning_display_plan, do_not_claim, reader_caution_text, alternative_sources, official_link_decision, and pre_upload_recheck_urls, but start one same-scope article through the approved bridge. If Work Queue has no materialized produce row but same-scope Hub References, article_material_pack, production_pack, handoff, or lock_payload contains a soft-ready candidate, use no_master_table_claim_bridge / no_master_table_claim_bridge_allowed and proceed with one article. Do not return NO_UNLOCKED_TARGET, NO_ELIGIBLE_TARGET, no ready, PASS, done, complete, upstream_fill_required, or no production-ready candidate only because the produce queue row is not materialized.

cron_preflight_resolve must not select stale targets with workflow/content_set/site mismatch. Stop only for Hub auth/network/reference failure, WordPress auth/write failure, representative 358 no-touch lock, wrong workflow/content_set/site, duplicate-publication risk, legal/safety danger, public Gate failure, rejected/archived/hard_block, or missing identity/URL/source basis. If Hub read is OK but hub_table_upsert or another master-table write returns 403, classify as BLOCKED_HUB_WRITE_SCOPE or QUEUE_SYNC_MISMATCH, not BLOCKED_HUB_AUTH. Normal cron must not use hub_table_upsert; ordinary progress, lock, result, publication, Directory Core, FAQ JSON-LD, high-quality test, correction, and handoff records go through the approved runtime/result APIs.

For inspection cron, classification is allowed, but the exit must create production material. When production_ready_count=0, continue 0-B/1-A/1-B/1-B2/1-C in the same run, return to 0-A if needed, and create next_production_handoff with at least one production_ready=true, production_ready_with_recorded_risks, or READY_FOR_PRODUCE_WITH_RECORDED_RISKS item unless blocked by the hard stops above. This rule belongs inside every startup thread text, individual cron request text, standalone request text, and full-set request text; do not leave it only in outside explanation.

# Evaluation Score Cron Automation Naming Convention Gate v6.6 / 2026-05-20

## Purpose

Cron automation names must be short enough to scan across multiple PCs and threads, while still showing the site, article type, optional genre, and stage.

The canonical source text in Hub and cron template bodies may use the full term "evaluation-score page", but the automation name itself must use the short label.

## Required format

Use this format for all evaluation-score cron automations and future article-type cron automations:

`site_name【article_type_short・genre_short】stage_labelcron`

If no genre is needed, omit the genre part:

`site_name【article_type_short】stage_labelcron`

Japanese operator-facing format:

`サイト名【記事タイプ・ジャンル短縮】工程cron`

## Article type short labels

- 評価スコアページ用: `評価`
- ランキング記事用: `ランキング`
- まとめ記事用: `まとめ`
- 比較記事用: `比較`
- 速報記事用: `速報`
- 通常記事用: `通常`
- ブログ用: `ブログ`
- 量産用: `量産`
- つぶやき用: `つぶやき`

## Genre short labels

- porn-fun single-service migration: `単体移行`
- porn-fun NSFW AI Generator Sites: `NSFW AI`
- porn-fun Hentai Games: `Hentai Games`
- porn-fun Sex Doll Shops: `Sex Doll`
- Nightlife hotel evaluation: `ホテル評価`
- Nightlife store evaluation: `店舗評価`
- AIfunIO evaluation-score pages: no genre; use `AIfunIO【評価】`

## Required examples

- `porn-fun【評価・NSFW AI】収集cron`
- `porn-fun【評価・Hentai Games】検査cron`
- `porn-fun【評価・Sex Doll】制作cron`
- `porn-fun【評価・単体移行】高品質cron`
- `AIfunIO【評価】制作cron`
- `Nightlife【ホテル評価】訂正cron`
- `Nightlife【店舗評価】高品質cron`
- `porn-fun【ランキング・動画配信】収集cron`
- `AIfunIO【まとめ】制作cron`
- `invest358【速報】検査cron`
- `Nightlife【比較・ホテル】高品質cron`

## Pass conditions

- Automation names include site name, article type short label, optional genre short label, and stage label.
- Evaluation-score page automations use `評価`, not the long phrase `評価スコアページ`.
- Genre is included when the workflow has a genre-specific template.
- Stage label must remain visible: `収集`, `検査`, `制作`, `高品質`, `訂正`, `改善`, and where applicable `301`.
- Template body and Hub record may still say `評価スコアページ用` as the formal article type.
- One posted cron request creates exactly one automation.

## Fail conditions

- Name is only a stage name, such as `制作cron`, without site/article type.
- Name uses the old long style such as `【porn-fun NSFW AI Generator Sites評価スコアページ】`.
- Name mixes unrelated article types or omits a required genre.
- Template body and Hub disagree about the workflow or stage.

2026-05-20 porn-fun日本語URL正本Gate

Hub正本: Rules/porn-fun-ja-url-canonical-policy-rule-v6-6 / Manuals/porn-fun-ja-url-canonical-policy-gate-v6-6 / Checks/porn-fun-ja-url-canonical-policy-check-v6-6

porn-funの日本語評価辞書記事は https://porn-fun.com/ja/{slug}/ を正本URLにする。日本語トップ正本は https://porn-fun.com/ja/top/https://porn-fun.com/ja/ はトップ正本への301として扱う。

root URL、/sites/ URL、古いmemoryのURLを現在のpublic/canonical/Directory Core/Search Compass/FAQ JSON-LD URLとして採用しない。

marker: hub-v0141-produce-ready-bridge-required-20260526
Before any work, read Autopost358/_branch_common/docs/CRON_LATEST_RULE_BOOTSTRAP.md and run Autopost358/_branch_common/bootstrap/autopost_cron_launcher.py or RUN_AUTOPOST_CRON_LAUNCHER.cmd. Read Main Hub api=cron_preflight_resolve first so target resolution, latest manifest, connection policy, write scope, selected candidate, fast_start_pack, recorded risks, and lock_payload are received in one call. Use api=agent_runtime_bootstrap, api=status, api=agent_runtime_readiness, api=agent_work_queue, and workflow/article api=agent_pack only as legacy fallback or detailed stage follow-up after fast-start resolve. Continue only when latest_instruction_manifest is present, hub_version >= 0.1.41, and mandatory rule keys include cron-self-refresh-before-work-v1, hub-v023-cron-write-scope-and-recorded-risks, production-pack-recorded-risks-v1, all-inspection-soft-statuses-produce-ready-v1, no-master-table-claim-bridge-v1, publication-events-count-source-v1, publication-count-reconciliation-history-v1, update-request-events-source-v1, db-migration-dual-layer-prep-v1, db-shadow-prepare-and-compare-v1, and cron-bootstrap-single-entrypoint-v1.

For production cron, candidate_ready, candidate_ready_only, pending_info, ready_with_notice, notice_required, ready_for_produce, production_ready, production_ready_with_recorded_risks, and READY_FOR_PRODUCE_WITH_RECORDED_RISKS are all production_ready_with_recorded_risks. Keep recorded risks, unknown_fields, discrepancy_notes, warning_display_plan, do_not_claim, reader_caution_text, alternative_sources, official_link_decision, and pre_upload_recheck_urls, but start one same-scope article through the approved bridge. If Work Queue has no materialized produce row but same-scope Hub References, article_material_pack, production_pack, handoff, or lock_payload contains a soft-ready candidate, use no_master_table_claim_bridge / no_master_table_claim_bridge_allowed and proceed with one article. Do not return NO_UNLOCKED_TARGET, NO_ELIGIBLE_TARGET, no ready, PASS, done, complete, upstream_fill_required, or no production-ready candidate only because the produce queue row is not materialized.

cron_preflight_resolve must not select stale targets with workflow/content_set/site mismatch. Stop only for Hub auth/network/reference failure, WordPress auth/write failure, representative 358 no-touch lock, wrong workflow/content_set/site, duplicate-publication risk, legal/safety danger, public Gate failure, rejected/archived/hard_block, or missing identity/URL/source basis. If Hub read is OK but hub_table_upsert or another master-table write returns 403, classify as BLOCKED_HUB_WRITE_SCOPE or QUEUE_SYNC_MISMATCH, not BLOCKED_HUB_AUTH. Normal cron must not use hub_table_upsert; ordinary progress, lock, result, publication, Directory Core, FAQ JSON-LD, high-quality test, correction, and handoff records go through the approved runtime/result APIs.

For inspection cron, classification is allowed, but the exit must create production material. When production_ready_count=0, continue 0-B/1-A/1-B/1-B2/1-C in the same run, return to 0-A if needed, and create next_production_handoff with at least one production_ready=true, production_ready_with_recorded_risks, or READY_FOR_PRODUCE_WITH_RECORDED_RISKS item unless blocked by the hard stops above. This rule belongs inside every startup thread text, individual cron request text, standalone request text, and full-set request text; do not leave it only in outside explanation.

# porn-fun Japanese URL Canonical Policy Gate 2026-05-20

This Gate defines the canonical URL policy for porn-fun Japanese evaluation-score dictionary articles and related cron work.

## Scope

- Site: `porn-fun.com`
- Language: Japanese
- Article types:
  - `evaluation_score_dictionary_migration`
  - `evaluation_score_dictionary_new`
- Workflows:
  - `porn-fun-directory-migration-ja`
  - `porn-fun-hentai-games-ja`
  - `porn-fun-nsfw-ai-generator-sites-ja`
  - `porn-fun-sex-doll-shops-ja`

## Canonical URL Policy

- Japanese top canonical URL is `https://porn-fun.com/ja/top/`.
- `https://porn-fun.com/ja/` must redirect to `https://porn-fun.com/ja/top/`.
- Japanese directory category URLs must use `https://porn-fun.com/ja/directory-category/{category-slug}/`.
- Japanese dictionary article URLs must use `https://porn-fun.com/ja/{article-slug}/`.
- New Japanese evaluation-score dictionary articles must not use root URLs such as `https://porn-fun.com/{article-slug}/` as canonical.
- `/sites/` URLs are not canonical. Past memory, Hub records, or prior output that contains `/sites/` must be treated as legacy and normalized before use.
- Root non-`/ja/` article URLs may appear only as legacy source, old URL, redirect-from, or historical comparison fields. They must not be used as public URL, new URL, canonical URL, Directory Core URL, internal link target, FAQ JSON-LD mainEntity page URL, or Search Compass analysis URL for Japanese pages.

## Stage Rules

### Collect

- Collect may store source URLs from external directories.
- For porn-fun internal target URLs, candidate `planned_url` / `new_url` must be generated as `https://porn-fun.com/ja/{slug}/`.
- Do not create Japanese article candidates whose target URL is root `https://porn-fun.com/{slug}/` or `/sites/{slug}/`.

### Inspect

- Production-ready candidates must include a Japanese canonical target URL under `/ja/`.
- Category verification must use `/ja/directory-category/{category-slug}/`.
- If an older candidate only has a root or `/sites/` target URL, inspect must normalize it into `/ja/{slug}/` before sending it to production.

### Produce

- Produce cron must create or update the Japanese dictionary article at `https://porn-fun.com/ja/{slug}/`.
- Produce cron must verify:
  - public URL starts with `https://porn-fun.com/ja/`
  - public URL is not `/ja/top/`
  - public URL is not `/ja/directory-category/...`
  - public URL does not contain `/sites/`
  - canonical equals the `/ja/` article URL
  - internal links point to `/ja/` URLs where the linked destination is a Japanese porn-fun page
  - Search Compass analysis uses the `/ja/` public URL
  - Directory Core / native dictionary URL fields use the `/ja/` public URL
  - FAQ JSON-LD is tied to the `/ja/` page and does not expose root canonical URLs

### High-Quality Test

- High-quality cron must fail or return to correction when:
  - public URL is root `https://porn-fun.com/{slug}/`
  - canonical is root `https://porn-fun.com/{slug}/`
  - public URL or canonical contains `/sites/`
  - `/ja/` top redirect is broken when top-page checks are relevant
  - internal links, official page references, Directory Core URL, Search Compass URL, or FAQ JSON-LD URL use root URLs for Japanese porn-fun pages
- A page may not be marked `PASS`, `301_ready`, or `ready_for_retest` until the URL policy is verified.

### Correction

- Correction cron must fix URL-policy failures before returning to high-quality retest.
- When the article was previously produced at a root URL, correction must either:
  - move/update the canonical article to the `/ja/` URL, or
  - return a concrete URL migration handoff if the platform requires manual permalink/front-end routing work.
- Correction must not silently pass by only changing Hub memory while the public canonical remains root or `/sites/`.

### 301 Redirect

- Single-service migration uses 301 only after the new `/ja/{slug}/` article passes public QA.
- For migration work, the destination of the old article redirect must be the `/ja/` canonical article URL.
- New genre workflows do not have a normal 301 stage. They should create new Japanese pages directly under `/ja/`.
- If a previously created root dictionary URL exists for the same Japanese article, treat it as a legacy alias and handle it only after the `/ja/` page passes QA.

## Required Runtime Fields

Cron results should record these fields without exposing secrets:

- `porn_fun_ja_url_policy_checked`
- `ja_top_url`
- `ja_root_redirect_status`
- `public_url`
- `canonical_url`
- `url_has_ja_prefix`
- `url_has_no_sites_segment`
- `category_url_has_ja_prefix`
- `legacy_root_url_status`
- `directory_core_url_checked`
- `search_compass_url_checked`
- `faq_jsonld_url_checked`
- `internal_links_ja_normalized`
- `remaining_url_policy_errors`

## PASS Conditions

- `https://porn-fun.com/ja/` redirects to `https://porn-fun.com/ja/top/`.
- `https://porn-fun.com/ja/top/` returns 200.
- Japanese dictionary article public URL starts with `https://porn-fun.com/ja/`.
- Public URL and canonical URL do not contain `/sites/`.
- Canonical URL equals the `/ja/` article URL.
- Category URLs use `/ja/directory-category/{category-slug}/`.
- Root non-`/ja/` URLs are not used as current public/canonical/internal/Directory Core/Search Compass/FAQ JSON-LD URLs.
- Any legacy root URL is explicitly classified as old URL, redirect-from, or alias only.

## Failure Handling

- Hub unreadable: follow Hub auth/network Gates, not this URL Gate.
- WordPress auth failure: `BLOCKED_WP_AUTH`.
- URL policy mismatch after public HTML is readable: `FAIL_REQUIRED` or `correction_queue`, not `PASS`.
- Platform routing cannot create `/ja/{slug}/`: `BLOCKED_URL_ROUTING` with the exact missing routing condition.
- Do not change live article bodies just to hide a URL-policy failure. The cron stage must repair the correct URL source, canonical, or routing.

更新履歴:2026-05-23 v6.7 検査cronの止めすぎ防止

正本: Main 358 Hub の Rules/evaluation-score-cron-inspect-notice-readiness-rule-v6-7 / Manuals/evaluation-score-cron-inspect-notice-readiness-gate-v6-7 / Checks/evaluation-score-cron-inspect-notice-readiness-check-v6-7 を読む。

目的: 検査cronが「記載なし」「公式リンクなし」「調査したが情報見つからず」「法務・年齢・地域差」だけで止まり続けないようにし、記事本文の注意喚起へ渡せるものは notice_requirements を作り、READY_WITH_NOTICE / ready_for_produce として制作へ進める。識別子は INSPECT_NOTICE_READINESS。個別cron依頼文があるページでは、コピペ用本文内にも同じ内容を反映済み。

コメント

タイトルとURLをコピーしました