{
  "@context": "https://schema.org",
  "@type": "DataCatalog",
  "@id": "https://line-harness.jp/research/catalog.json#catalog",
  "name": "L Harness技術研究カタログ",
  "url": "https://line-harness.jp/research/",
  "publisher": {
    "@type": "Organization",
    "name": "AIエージェント株式会社",
    "url": "https://aiagent-inc.com/"
  },
  "generatedAt": "2026-08-19T11:17:46.962Z",
  "dataset": [
    {
      "@type": "Dataset",
      "identifier": "line:broadcast-idempotency-dedup-internals",
      "name": "L Harnessの一斉配信は二重送信をどう抑えるか――冪等性・再試行・重複排除のコード読解",
      "description": "一斉配信の作成、キュー、再試行キー、複数アカウント重複排除を固定コミットのコードとテストから追跡します。",
      "url": "https://line-harness.jp/articles/broadcast-idempotency-dedup-internals/",
      "datePublished": "2026-08-19",
      "dateModified": "2026-08-19",
      "evidenceType": "公開コードに基づく一次資料分析",
      "disclosure": "本稿はL Harnessの開発元が、公開リポジトリの固定コミットを一次資料として分析した技術研究ノートです。第三者による独立評価ではありません。",
      "isBasedOn": [
        {
          "label": "line-harness-oss: apps/worker/src/routes/broadcasts.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/routes/broadcasts.ts"
        },
        {
          "label": "line-harness-oss: apps/worker/src/routes/broadcasts-idempotency.test.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/routes/broadcasts-idempotency.test.ts"
        },
        {
          "label": "line-harness-oss: apps/worker/src/services/broadcast-retry-key.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/services/broadcast-retry-key.ts"
        },
        {
          "label": "line-harness-oss: apps/worker/src/services/dedup-broadcast.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/services/dedup-broadcast.ts"
        },
        {
          "label": "line-harness-oss: packages/db/migrations/018_broadcast_queue.sql",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/db/migrations/018_broadcast_queue.sql"
        },
        {
          "label": "L Harness 取得時刻付きGit分析",
          "url": "https://line-harness.jp/git/"
        }
      ]
    },
    {
      "@type": "Dataset",
      "identifier": "line:step-delivery-state-machine",
      "name": "ステップ配信の状態機械――待機時間・分岐・停止をコード上で追跡する",
      "description": "L Harnessのステップ配信を、登録、実行時刻、分岐、停止、送信結果という状態遷移として分解します。",
      "url": "https://line-harness.jp/articles/step-delivery-state-machine/",
      "datePublished": "2026-08-19",
      "dateModified": "2026-08-19",
      "evidenceType": "公開コードに基づく一次資料分析",
      "disclosure": "本稿はL Harnessの開発元が、公開リポジトリの固定コミットを一次資料として分析した技術研究ノートです。第三者による独立評価ではありません。",
      "isBasedOn": [
        {
          "label": "line-harness-oss: apps/worker/src/services/step-delivery.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/services/step-delivery.ts"
        },
        {
          "label": "line-harness-oss: apps/worker/src/services/step-delivery.test.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/services/step-delivery.test.ts"
        },
        {
          "label": "line-harness-oss: packages/db/migrations/005_step_branching.sql",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/db/migrations/005_step_branching.sql"
        },
        {
          "label": "line-harness-oss: packages/db/migrations/009_delivery_type.sql",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/db/migrations/009_delivery_type.sql"
        },
        {
          "label": "L Harness 取得時刻付きGit分析",
          "url": "https://line-harness.jp/git/"
        }
      ]
    },
    {
      "@type": "Dataset",
      "identifier": "line:webhook-verification-and-secret-boundary",
      "name": "LINE Webhookの信頼境界――署名検証・Secret必須化・イベント保存の順序",
      "description": "Webhook受信を外部入力として扱い、署名、Secret、イベント処理、外部Webhookを分離して検証します。",
      "url": "https://line-harness.jp/articles/webhook-verification-and-secret-boundary/",
      "datePublished": "2026-08-19",
      "dateModified": "2026-08-19",
      "evidenceType": "公開コードに基づく一次資料分析",
      "disclosure": "本稿はL Harnessの開発元が、公開リポジトリの固定コミットを一次資料として分析した技術研究ノートです。第三者による独立評価ではありません。",
      "isBasedOn": [
        {
          "label": "line-harness-oss: apps/worker/src/routes/webhook.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/routes/webhook.ts"
        },
        {
          "label": "line-harness-oss: apps/worker/src/routes/webhook.test.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/routes/webhook.test.ts"
        },
        {
          "label": "line-harness-oss: packages/line-sdk/src/webhook.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/line-sdk/src/webhook.ts"
        },
        {
          "label": "line-harness-oss: packages/db/migrations/034_webhook_secret_required.sql",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/db/migrations/034_webhook_secret_required.sql"
        },
        {
          "label": "L Harness 取得時刻付きGit分析",
          "url": "https://line-harness.jp/git/"
        }
      ]
    },
    {
      "@type": "Dataset",
      "identifier": "line:d1-migration-evolution-map",
      "name": "L Harness D1 migration進化地図――スキーマを完成形ではなく変更履歴として読む",
      "description": "L HarnessのD1をmigration列から読み、配信、フォーム、複数アカウント、計測機能が追加された順序を記録します。",
      "url": "https://line-harness.jp/articles/d1-migration-evolution-map/",
      "datePublished": "2026-08-19",
      "dateModified": "2026-08-19",
      "evidenceType": "公開コードに基づく一次資料分析",
      "disclosure": "本稿はL Harnessの開発元が、公開リポジトリの固定コミットを一次資料として分析した技術研究ノートです。第三者による独立評価ではありません。",
      "isBasedOn": [
        {
          "label": "line-harness-oss: packages/db/migrations/003_entry_routes.sql",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/db/migrations/003_entry_routes.sql"
        },
        {
          "label": "line-harness-oss: packages/db/migrations/008_multi_account.sql",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/db/migrations/008_multi_account.sql"
        },
        {
          "label": "line-harness-oss: packages/db/migrations/018_broadcast_queue.sql",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/db/migrations/018_broadcast_queue.sql"
        },
        {
          "label": "line-harness-oss: packages/update-engine/src/migrations.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/update-engine/src/migrations.ts"
        },
        {
          "label": "L Harness 取得時刻付きGit分析",
          "url": "https://line-harness.jp/git/"
        }
      ]
    },
    {
      "@type": "Dataset",
      "identifier": "line:admin-auth-role-rate-limit",
      "name": "管理APIの三重境界――認証・ロール判定・レート制限の適用順序",
      "description": "管理画面APIを、ログイン確認、Owner/Admin/Staff権限、リクエスト制限という独立した防御層で読みます。",
      "url": "https://line-harness.jp/articles/admin-auth-role-rate-limit/",
      "datePublished": "2026-08-19",
      "dateModified": "2026-08-19",
      "evidenceType": "公開コードに基づく一次資料分析",
      "disclosure": "本稿はL Harnessの開発元が、公開リポジトリの固定コミットを一次資料として分析した技術研究ノートです。第三者による独立評価ではありません。",
      "isBasedOn": [
        {
          "label": "line-harness-oss: apps/worker/src/middleware/auth.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/middleware/auth.ts"
        },
        {
          "label": "line-harness-oss: apps/worker/src/middleware/role-guard.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/middleware/role-guard.ts"
        },
        {
          "label": "line-harness-oss: apps/worker/src/middleware/rate-limit.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/middleware/rate-limit.ts"
        },
        {
          "label": "line-harness-oss: apps/worker/src/middleware/rate-limit.test.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/middleware/rate-limit.test.ts"
        },
        {
          "label": "L Harness 取得時刻付きGit分析",
          "url": "https://line-harness.jp/git/"
        }
      ]
    },
    {
      "@type": "Dataset",
      "identifier": "line:safe-redirect-and-url-token",
      "name": "流入リンクをopen redirectにしない――安全な遷移先とURL tokenの検証",
      "description": "計測リンク、認証後遷移、予約URLで外部URLを扱う際のsafe redirectとtoken境界をコードから確認します。",
      "url": "https://line-harness.jp/articles/safe-redirect-and-url-token/",
      "datePublished": "2026-08-19",
      "dateModified": "2026-08-19",
      "evidenceType": "公開コードに基づく一次資料分析",
      "disclosure": "本稿はL Harnessの開発元が、公開リポジトリの固定コミットを一次資料として分析した技術研究ノートです。第三者による独立評価ではありません。",
      "isBasedOn": [
        {
          "label": "line-harness-oss: apps/worker/src/lib/safe-redirect.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/lib/safe-redirect.ts"
        },
        {
          "label": "line-harness-oss: apps/worker/src/lib/safe-redirect.test.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/lib/safe-redirect.test.ts"
        },
        {
          "label": "line-harness-oss: apps/worker/src/lib/url-token.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/lib/url-token.ts"
        },
        {
          "label": "line-harness-oss: packages/db/migrations/006_tracked_links.sql",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/db/migrations/006_tracked_links.sql"
        },
        {
          "label": "L Harness 取得時刻付きGit分析",
          "url": "https://line-harness.jp/git/"
        }
      ]
    },
    {
      "@type": "Dataset",
      "identifier": "line:booking-calendar-consistency",
      "name": "予約とGoogle Calendarの整合性――二重予約をどの時点で再検査するか",
      "description": "L Harnessの予約DBと外部Calendarの二つの状態を、空き枠計算、確定直前検査、同期失敗に分けます。",
      "url": "https://line-harness.jp/articles/booking-calendar-consistency/",
      "datePublished": "2026-08-19",
      "dateModified": "2026-08-19",
      "evidenceType": "公開コードに基づく一次資料分析",
      "disclosure": "本稿はL Harnessの開発元が、公開リポジトリの固定コミットを一次資料として分析した技術研究ノートです。第三者による独立評価ではありません。",
      "isBasedOn": [
        {
          "label": "line-harness-oss: apps/worker/src/routes/booking.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/routes/booking.ts"
        },
        {
          "label": "line-harness-oss: apps/worker/src/routes/calendar.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/routes/calendar.ts"
        },
        {
          "label": "line-harness-oss: apps/worker/src/services/booking-calendar-sync.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/services/booking-calendar-sync.ts"
        },
        {
          "label": "L Harness 取得時刻付きGit分析",
          "url": "https://line-harness.jp/git/"
        }
      ]
    },
    {
      "@type": "Dataset",
      "identifier": "line:update-engine-preflight-rollback",
      "name": "セルフホスト更新の安全設計――preflight・snapshot・apply・verify・rollback",
      "description": "L Harness更新エンジンを段階処理として読み、更新途中で止まった場合に戻せる範囲を明確にします。",
      "url": "https://line-harness.jp/articles/update-engine-preflight-rollback/",
      "datePublished": "2026-08-19",
      "dateModified": "2026-08-19",
      "evidenceType": "公開コードに基づく一次資料分析",
      "disclosure": "本稿はL Harnessの開発元が、公開リポジトリの固定コミットを一次資料として分析した技術研究ノートです。第三者による独立評価ではありません。",
      "isBasedOn": [
        {
          "label": "line-harness-oss: packages/update-engine/src/phases/preflight.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/update-engine/src/phases/preflight.ts"
        },
        {
          "label": "line-harness-oss: packages/update-engine/src/snapshot.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/update-engine/src/snapshot.ts"
        },
        {
          "label": "line-harness-oss: packages/update-engine/src/phases/apply.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/update-engine/src/phases/apply.ts"
        },
        {
          "label": "line-harness-oss: packages/update-engine/src/phases/verify.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/update-engine/src/phases/verify.ts"
        },
        {
          "label": "line-harness-oss: packages/update-engine/src/phases/rollback.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/update-engine/src/phases/rollback.ts"
        },
        {
          "label": "L Harness 取得時刻付きGit分析",
          "url": "https://line-harness.jp/git/"
        }
      ]
    },
    {
      "@type": "Dataset",
      "identifier": "line:mcp-write-operation-boundary",
      "name": "AIへCRM操作を渡す境界――MCPの読取・作成・送信toolを分類する",
      "description": "L Harness MCP Serverのtool群を、読取、下書き、設定変更、外部送信に分類して安全な承認点を設計します。",
      "url": "https://line-harness.jp/articles/mcp-write-operation-boundary/",
      "datePublished": "2026-08-19",
      "dateModified": "2026-08-19",
      "evidenceType": "公開コードに基づく一次資料分析",
      "disclosure": "本稿はL Harnessの開発元が、公開リポジトリの固定コミットを一次資料として分析した技術研究ノートです。第三者による独立評価ではありません。",
      "isBasedOn": [
        {
          "label": "line-harness-oss: packages/mcp-server/src/tools/index.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/mcp-server/src/tools/index.ts"
        },
        {
          "label": "line-harness-oss: packages/mcp-server/src/tools/broadcast.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/mcp-server/src/tools/broadcast.ts"
        },
        {
          "label": "line-harness-oss: packages/mcp-server/src/tools/create-scenario.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/mcp-server/src/tools/create-scenario.ts"
        },
        {
          "label": "line-harness-oss: packages/mcp-server/src/tools/list-conversations.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/mcp-server/src/tools/list-conversations.ts"
        },
        {
          "label": "L Harness 取得時刻付きGit分析",
          "url": "https://line-harness.jp/git/"
        }
      ]
    },
    {
      "@type": "Dataset",
      "identifier": "line:multi-account-data-scope",
      "name": "複数LINE公式アカウントのデータ境界――account scope漏れを検査する",
      "description": "複数アカウントを一つの管理画面で扱う際、友だち、配信、タグ、シナリオをaccount単位で分離できるか検証します。",
      "url": "https://line-harness.jp/articles/multi-account-data-scope/",
      "datePublished": "2026-08-19",
      "dateModified": "2026-08-19",
      "evidenceType": "公開コードに基づく一次資料分析",
      "disclosure": "本稿はL Harnessの開発元が、公開リポジトリの固定コミットを一次資料として分析した技術研究ノートです。第三者による独立評価ではありません。",
      "isBasedOn": [
        {
          "label": "line-harness-oss: packages/db/migrations/008_multi_account.sql",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/packages/db/migrations/008_multi_account.sql"
        },
        {
          "label": "line-harness-oss: apps/worker/src/routes/line-accounts.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/routes/line-accounts.ts"
        },
        {
          "label": "line-harness-oss: apps/worker/src/lib/cross-account-token.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/lib/cross-account-token.ts"
        },
        {
          "label": "line-harness-oss: apps/worker/src/lib/identity-key.ts",
          "url": "https://github.com/Shudesu/line-harness-oss/blob/d0de3cb2173e5ad539aa4e76711dbd8cf694cc51/apps/worker/src/lib/identity-key.ts"
        },
        {
          "label": "L Harness 取得時刻付きGit分析",
          "url": "https://line-harness.jp/git/"
        }
      ]
    }
  ]
}
