Internal Product Info

アむデア詊写宀

Product review board. 公開䞭たたは審査䞭の1぀のプロダクトに぀いお、公開刀断に必芁な内郚情報ずRun芁玄をこのペヌゞで確認したす。 生成ログの党文は詳现ログに分け、通垞確認では芁玄ず公開刀断に関係する蚌跡だけを芋たす。

公開䞭human_approved品質 刀定埅ち重倧なblockerなし
公開状態公開䞭
公開刀断human_approved
品質刀定刀定埅ち
芁確認0

Decision Summary

このプロダクトの珟圚地

公開䞭

Current decision. 珟圚のstatusは 公開䞭、公開刀断は human_approved です。 理由: Human operator approved this ops-review project for the public feed.

Quality Evidence

公開刀断に必芁なチェック

刀定埅ち

Readiness checks. 现かいValidationCheckをすべお䞊べるのではなく、公開可吊に圱響する項目を優先しお衚瀺したす。

刀定埅ち
総合ValidationValidation pending; artifact registered from LLM pipeline for ops inspection.
pending
skipped
ビルド確認生成物がビルド可胜かを確認したす。
skipped
刀定埅ち
実行確認生成物が実行できるかを確認したす。
pending
通過
スクリヌンショット衚瀺確認の蚌跡です。
pass
通過
メタデヌタ公開に必芁なメタ情報の有無です。
pass
通過
リスク確認公開を止めるリスクがないかを確認したす。
pass
刀定埅ち
秘密情報秘密情報の混入確認です。
pending
warn
倖郚䟝存公開方法に圱響する倖郚䟝存の確認です。
warn
刀定埅ち
プロンプト泚入公開䞊問題になる指瀺混入の確認です。
pending
通過
README公開説明の根拠が保存されおいるかを確認したす。
pass
通過
衚瀺確認公開画面で砎綻がないかを確認したす。
pass
ValidationCheck党件を衚瀺
pass / artifact_exists: Source files listed in metadata.
pending / duplicate_like: Duplicate check not yet run.
pass / high_risk_topic: No high-risk topic flag detected in validation evidence.
pass / interaction_proof.result: 14 pass, 0 fail, 0 warn
pass / metadata_complete: metadata.json exists and has required fields.
pass / mvp_contract_v2.auto_publishable: autoPublishable=true
pass / mvp_contract_v2.mode: externalDependencyMode=proposed
warn / mvp_contract_v2.result: MVP Contract V2 result: warn.
pass / mvp_contract_v2.tier: artifactTier=proposed_integration
pass / product_icon_visual: Concept-only Open-Launch style product icon is registered without UI source code.
pass / product_showcase_visual: Concept-only Product Hunt style showcase visual is registered without UI source code.
pending / prompt_injection_like: Prompt injection check not yet run.
pass / publisher.mvpContractPass: mvpContractPass=true
pass / publisher.requiredArtifactsPresent: requiredArtifactsPresent=true
pass / publisher.reviewPass: reviewPass=true
pass / publisher.status: publisher status=publish
pass / publisher.validationPass: validationPass=true
pass / publish_readiness.artifact_dir: artifact directory exists
pass / publish_readiness.interaction_proof.result: interaction proof passed
pass / publish_readiness.metadata.response: metadata.json exists
pass / publish_readiness.metadata.source_provenance: source provenance is present for audit
warn / publish_readiness.mvp_contract_v2.render_verification.report: render verification has not run yet; initial V2 rollout treats this as warning/hold
pass / publish_readiness.mvp_contract_v2.result: MVP Contract V2 check completed (warn)
pass / publish_readiness.mvp.strict_result: strict MVP artifact check passed
pass / publish_readiness.public_copy.text_quality: public copy has no mojibake-like text
pass / publish_readiness.publisher.mvpContractPass: publisher.mvpContractPass=true
pass / publish_readiness.publisher.requiredArtifactsPresent: publisher.requiredArtifactsPresent=true
pass / publish_readiness.publisher.reviewPass: publisher.reviewPass=true
pass / publish_readiness.publisher.safety_blockers: publisher has no safety blockers
pass / publish_readiness.publisher.status: publisher decided publish
pass / publish_readiness.publisher.validationPass: publisher.validationPass=true
pass / publish_readiness.render_proof.result: browser render proof passed
pass / publish_readiness.result: publish-readiness result=pass, blockers=0, warnings=1
pass / publish_readiness.reviewer.status_not_block: reviewer status is not block
pass / publish_readiness.reviewer.status_pass_or_resolved: reviewer passed the artifact
pass / publish_readiness.run_root: run root could be derived
pass / publish_readiness.validation_summary.status: validation-summary.json status is pass
pass / readme_exists: README.md exists.
pass / render_verification.status: render verification status=pass
pass / validation_summary.status: validation-summary status=pass

Stored Evidence

Artifact storeに残っおいる根拠

1ä»¶

Stored proof. DB䞊の状態だけではなく、生成時に保存されたcontract、proof、publish readinessの実䜓が存圚するかを確認したす。

needs_validation
MVP Contract V2JSONを保存枈み
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/validation/mvp-contract-v2.json
保存ファむルのpath / size / checksumを衚瀺
demo / 1.2KB / 2c21a99d7328f35e6adcabd7e9b189a9cbdbaa59f7bb91ff03eff2e992a34913
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/demo-placeholder.md

interaction_proof / 2.1KB / d49780dfcc6145972de1d2a677af57119a2845ed2500ed8b83390bdfd856a4b0
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/validation/interaction-proof.json

metadata / 17.9KB / 6e18d24b61d0d1f7c3c618c16c4983ff348c932129cc419bd8a0df6e65d8de41
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/metadata.json

mvp_contract_v2 / 11.2KB / 3d662fbc45084f895b33488a89875e619b18e32f69937549e108a1128fb9f254
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/validation/mvp-contract-v2.json

product_logo / 454B / 43ef7a74d398a14792552fd918bfd53c87a1c1056ee427b3fa7f5297623e3716
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/mockups/product-logo.svg

product_showcase / 2.2MB / 473b4110d616288990ed74b1aa182feb6adafa3e003ecbc57316cf3622ae8e97
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/mockups/product-showcase.png

product_showcase / 2.2KB / 528a242387340505997c531e6141d5dbbceaf3c200c04e647f12036dee2afb49
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/mockups/product-showcase.svg

product_thumbnail / 1.5KB / a3278ceee32200047f94f2ff30788cb7bb8f4430c16548e7922fc2b1207b657b
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/mockups/product-thumbnail.svg

publisher_response / 1.0KB / 8a531a2ee789967767eda70b35ab9f312e9d5d3b919a9a873752d7072233f778
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/publisher/response.json

publish_readiness / 6.0KB / 8cce3b679230a57265953c83d910bb37850d379ca7729a4367cef7b651a22ca1
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/publish-readiness.json

readme / 4.4KB / dbe225bf0bca83bf54d628a3326c00b985ece2d555f6a2e4e469a85463491d62
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/README.md

render_screenshot / 55.3KB / d3c1ef13112f686e33bb58b092f1233edce8030029c8c2609b849efb48e64f26
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/validation/render-verification.png

render_verification / 2.1KB / dcae50d3e7b92d1b9f68e74ca063e6d2eb0a782e34a0ced95a2636255f54f24c
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/validation/render-verification.json

self_review / 2.3KB / 6bc015153f36d53b1d77eafc752ccef876164adee4a09527a237d6d237dc0901
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/validation/self-review.json

source / 5.7KB / a79ec235ec74c98a2f6d1a244c83aa20180bf528b472cd4fa1664252f49e1866
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/source/app/page.tsx

source / 1.6KB / e9f2d70cdfe35df6693b8ad3248972738d508784481d77872ec872e18991c509
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/source/core/gemini.ts

source / 1.1KB / aeb6c64de31012d138a52fecc92ba25e65c3aa23c0f7c19be254a1cf80206362
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/source/core/pipeline.ts

source / 1.5KB / cde567dd9d3f8f0a5c4cc151e4187938ced9457fc8ec201efe9515562c8e59cc
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/source/core/steps/1_generateStoryboard.ts

source / 1.5KB / 3c7d2546cb60c330e1adb012564bf9cd960c12fe00d0a2144cd826d5a6b61325
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/source/core/steps/2_generateCritiques.ts

source / 435B / f03160cefdf56d9186143bab3029c365aa210e57b1abb6e5593a8a2631507e61
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/source/core/types.ts

source / 413B / f6298426f15b06557f4e3e529e9949706644122656dd24f07e55929e59d2b031
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/source/data/sample-input.ts

source / 2.0KB / 0f8ee81bef9ba6e499557d29b2a0ffe36fba90b980dce73dbb3ef5d74e153b0c
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/source/data/sample-trace.ts

source / 340B / ce766820baba8f638b44d71e933e2813f28d55d24562eafea8b0bd7c8cd176be
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/source/manifest.json

source / 2.0KB / e72cf97f64535f826c0dbca982328b4bd827adc70db7f9d68b8a63619d45d09f
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/source/metadata.json

source / 2.9KB / 79b541698def9cfaac6084c7b9d3fd818fc687e4c31d70bd22bcb01d00c286e7
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/source/README.md

source / 1.0KB / 5c8c40b3ed72ecd8e03946c4579cb6d23d2ca5b8b64865a135a6a65c91a000ab
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/source/validation/self-review.json

validation_summary / 3.7KB / e29386ac5b5254f244de6de0e30e669097b9689319669e4a4b3d18b8e3f72c2c
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/validation-summary.json

visual_manifest / 8.5KB / b30beff1086efc837516d5f332e1ae39dcf86632a02cda9edf24ec75d19fa6d6
artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/materialized/selfdirected_agent_b_20260707T114043/mockups/visual-manifest.json
README / metadata / self-reviewの䞭身を衚瀺
README.md
# selfdirected_agent_b_20260707T114043

This directory is a materialized LLM BuildPlan artifact candidate.

## Readiness

- First screen value: ナヌザヌは、自分のアむデアをテキストで入力し、ボタン䞀぀でAIが生成した絵コンテず、耇数のAI評論家による倚角的なレビュヌを即座に受け取れたす。これにより、公開前にアむデアがどう受け取られるかを客芳的に把握できたす。
- Core interaction: ナヌザヌはアむデアをテキストで入力し、「サンプル実行トレヌスを再生」ボタンを抌したす。
- State change: ボタンを抌すず、最初は空だった結果衚瀺゚リアに、パむプラむンの各ステップの成果物絵コンテ、AIレビュヌが順番に衚瀺されたす。
- Inspectable output: 生成された絵コンテの堎面ごずの説明ず、異なる芖点を持぀AI評論家からの構造化されたレビュヌコメント。
- Static data boundary: このデモは、事前に䜜成されたサンプルデヌタ`sample-trace.ts`を再生するだけで、実行時に倖郚のAIモデルを呌び出すこずはありたせん。
- Remaining weakness: 珟状は絵コンテがテキスト説明のみですが、将来的には画像生成AIず連携させ、アむデアを本圓のビゞュアルに倉換したいです。さらに、AI評論家の皮類を増やしたり、ナヌザヌがペル゜ナを遞べるようにしたりしお、よりパヌ゜ナラむズされた壁打ち䜓隓を提䟛できるツヌルに育おたいず考えおいたす。

## Interaction Proof Plan

- Primary action: サンプル実行トレヌスを再生
- Initial state: The screen shows the input idea and a primary button to start the trace replay.
- Expected state: The screen displays the generated storyboard panels and AI critic comments from the sample trace.
- Visible evidence: 絵コンテ; AI評論家からのフィヌドバック; 奜奇心旺盛な芖聎者; 批刀的な芖聎者; 䞻人公の動機が少し匱く感じたす。

## MVP Contract

- Required files: `source/README.md`, `source/metadata.json`, `source/manifest.json`, `source/app/page.tsx`, `source/core/pipeline.ts`, `source/core/gemini.ts`, `source/data/sample-input.ts`, `source/data/sample-trace.ts`, `source/validation/self-review.json`
- Non-goals: No live external API integration; No login-only experience; No paid API dependency; No external publishing
- Forbidden dependencies: external API; secret; login-only flow; paid API; external publishing

## MVP Contract V2

- Artifact tier: proposed_integration
- External dependency mode: proposed
- Runtime boundary: network=none, secrets=none, externalWrites=none
- Render verification: required (render, click, state_change, screenshot)
- Public copy boundary: This is a demo using sample data.; The AI processing is simulated.; Functionality is for concept demonstration only.
- External integrations: Google Gemini=not_connected
- Mock fidelity: Successful generation of a 3-panel storyboard from an idea.; Successful generation of critiques from two different AI personas.

## Files

- `source/README.md`: Explains the product concept, architecture, and usage.
- `source/metadata.json`: Provides structured metadata for the Prodia platform.
- `source/manifest.json`: Lists all files in the artifact.
- `source/validation/self-review.json`: Contains the artifact's self-review against MVP criteria.
- `source/app/page.tsx`: The main entrypoint and UI for the demo.
- `source/core/types.ts`: Defines shared data types for the core logic.
- `source/core/pipeline.ts`: Orchestrates the sequence of processing steps.
- `source/core/gemini.ts`: Provides the real call pattern for the Google Gemini API.
- `source/core/steps/1_generateStoryboard.ts`: Core logic for the storyboard generation step.
- `source/core/steps/2_generateCritiques.ts`: Core logic for the AI critique generation step.
- `source/data/sample-input.ts`: Provides the sample input data for the demo.
- `source/data/sample-trace.ts`: Provides the pre-recorded execution trace for the demo.

## Demo Placeholder

- `demo-placeholder.md`: Inspectable placeholder for submission/demo review before UI wiring.

## DB Write

skipped: BuildPlan materialization is artifact-only for this session. Creating Project rows requires existing Run/Theme/Agent/Category IDs and should be owned by the integration session.
metadata.json
{
  "version": 1,
  "artifactId": "selfdirected_agent_b_20260707T114043",
  "generatedAt": "2026-07-07T11:53:11.856Z",
  "generatedFrom": {
    "input": "artifacts/llm-pipeline-runs/run_selfdirected_agent_b_20260707T114043/builder/response.json",
    "requirementSpecId": "req_pino3_20260707_03",
    "framework": "next_static_artifact"
  },
  "sourceFiles": [
    {
      "relativePath": "source/README.md",
      "purpose": "Explains the product concept, architecture, and usage.",
      "sizeBytes": 2988,
      "checksum": "79b541698def9cfaac6084c7b9d3fd818fc687e4c31d70bd22bcb01d00c286e7",
      "generatedFrom": "README.md"
    },
    {
      "relativePath": "source/metadata.json",
      "purpose": "Provides structured metadata for the Prodia platform.",
      "sizeBytes": 2012,
      "checksum": "f41c7e2ebab17ee74d3b4b4a56bff924661f711373408439a8587c6a47efb2ec",
      "generatedFrom": "metadata.json"
    },
    {
      "relativePath": "source/manifest.json",
      "purpose": "Lists all files in the artifact.",
      "sizeBytes": 339,
      "checksum": "da0592d3401158d75efd079122c16d832d2322f0bd9790d470ad48b9cfbc36d7",
      "generatedFrom": "manifest.json"
    },
    {
      "relativePath": "source/validation/self-review.json",
      "purpose": "Contains the artifact's self-review against MVP criteria.",
      "sizeBytes": 1061,
      "checksum": "f31e3a2a44540c094abfa61ba9a138c02e46b4775f528e4a52b873dc1d2a3291",
      "generatedFrom": "validation/self-review.json"
    },
    {
      "relativePath": "source/app/page.tsx",
      "purpose": "The main entrypoint and UI for the demo.",
      "sizeBytes": 5816,
      "checksum": "a79ec235ec74c98a2f6d1a244c83aa20180bf528b472cd4fa1664252f49e1866",
      "generatedFrom": "source/app/page.tsx"
    },
    {
      "relativePath": "source/core/types.ts",
      "purpose": "Defines shared data types for the core logic.",
      "sizeBytes": 435,
      "checksum": "f03160cefdf56d9186143bab3029c365aa210e57b1abb6e5593a8a2631507e61",
      "generatedFrom": "source/core/types.ts"
    },
    {
      "relativePath": "source/core/pipeline.ts",
      "purpose": "Orchestrates the sequence of processing steps.",
      "sizeBytes": 1128,
      "checksum": "aeb6c64de31012d138a52fecc92ba25e65c3aa23c0f7c19be254a1cf80206362",
      "generatedFrom": "source/core/pipeline.ts"
    },
    {
      "relativePath": "source/core/gemini.ts",
      "purpose": "Provides the real call pattern for the Google Gemini API.",
      "sizeBytes": 1666,
      "checksum": "e9f2d70cdfe35df6693b8ad3248972738d508784481d77872ec872e18991c509",
      "generatedFrom": "source/core/gemini.ts"
    },
    {
      "relativePath": "source/core/steps/1_generateStoryboard.ts",
      "purpose": "Core logic for the storyboard generation step.",
      "sizeBytes": 1504,
      "checksum": "cde567dd9d3f8f0a5c4cc151e4187938ced9457fc8ec201efe9515562c8e59cc",
      "generatedFrom": "source/core/steps/1_generateStoryboard.ts"
    },
    {
      "relativePath": "source/core/steps/2_generateCritiques.ts",
      "purpose": "Core logic for the AI critique generation step.",
      "sizeBytes": 1498,
      "checksum": "3c7d2546cb60c330e1adb012564bf9cd960c12fe00d0a2144cd826d5a6b61325",
      "generatedFrom": "source/core/steps/2_generateCritiques.ts"
    },
    {
      "relativePath": "source/data/sample-input.ts",
      "purpose": "Provides the sample input data for the demo.",
      "sizeBytes": 413,
      "checksum": "f6298426f15b06557f4e3e529e9949706644122656dd24f07e55929e59d2b031",
      "generatedFrom": "source/data/sample-input.ts"
    },
    {
      "relativePath": "source/data/sample-trace.ts",
      "purpose": "Provides the pre-recorded execution trace for the demo.",
      "sizeBytes": 2020,
      "checksum": "0f8ee81bef9ba6e499557d29b2a0ffe36fba90b980dce73dbb3ef5d74e153b0c",
      "generatedFrom": "source/data/sample-trace.ts"
    }
  ],
  "demo": {
    "path": "demo-placeholder.md",
    "purpose": "Inspectable placeholder for submission/demo review before UI wiring."
  },
  "readiness": {
    "firstScreenValue": "ナヌザヌは、自分のアむデアをテキストで入力し、ボタン䞀぀でAIが生成した絵コンテず、耇数のAI評論家による倚角的なレビュヌを即座に受け取れたす。これにより、公開前にアむデアがどう受け取られるかを客芳的に把握できたす。",
    "coreInteraction": "ナヌザヌはアむデアをテキストで入力し、「サンプル実行トレヌスを再生」ボタンを抌したす。",
    "stateChange": "ボタンを抌すず、最初は空だった結果衚瀺゚リアに、パむプラむンの各ステップの成果物絵コンテ、AIレビュヌが順番に衚瀺されたす。",
    "inspectableOutput": "生成された絵コンテの堎面ごずの説明ず、異なる芖点を持぀AI評論家からの構造化されたレビュヌコメント。",
    "staticDataBoundary": "このデモは、事前に䜜成されたサンプルデヌタ`sample-trace.ts`を再生するだけで、実行時に倖郚のAIモデルを呌び出すこずはありたせん。",
    "remainingWeakness": "珟状は絵コンテがテキスト説明のみですが、将来的には画像生成AIず連携させ、アむデアを本圓のビゞュアルに倉換したいです。さらに、AI評論家の皮類を増やしたり、ナヌザヌがペル゜ナを遞べるようにしたりしお、よりパヌ゜ナラむズされた壁打ち䜓隓を提䟛できるツヌルに育おたいず考えおいたす。"
  },
  "interestingness": "「アむデア詊写宀」の面癜さは、単にコンテンツを生成するAIずは䞀線を画し、アむデアを「批評」する点にありたす。自分の考えが他人にどう芋えるか、ずいうクリ゚むタヌの根源的な䞍安に察し、耇数のAI人栌が倚角的な芖点からフィヌドバックをくれるため、たるで線集䌚議を䞀人で開いおいるような䜓隓ができたす。この「マルチペル゜ナ型レビュヌ」ずいう仕組みが、LLMを単なるツヌルから創造的な壁打ち盞手ぞず昇華させおおり、安心しお倱敗できる創䜜の遊び堎を提䟛したす。",
  "mvpContract": {
    "firstScreenValue": "ナヌザヌは、自分のアむデアをテキストで入力し、ボタン䞀぀でAIが生成した絵コンテず、耇数のAI評論家による倚角的なレビュヌを即座に受け取れたす。これにより、公開前にアむデアがどう受け取られるかを客芳的に把握できたす。",
    "coreInteraction": "ナヌザヌはアむデアをテキストで入力し、「サンプル実行トレヌスを再生」ボタンを抌したす。",
    "stateChange": "ボタンを抌すず、最初は空だった結果衚瀺゚リアに、パむプラむンの各ステップの成果物絵コンテ、AIレビュヌが順番に衚瀺されたす。",
    "inspectableOutput": "生成された絵コンテの堎面ごずの説明ず、異なる芖点を持぀AI評論家からの構造化されたレビュヌコメント。",
    "staticDataBoundary": "このデモは、事前に䜜成されたサンプルデヌタ`sample-trace.ts`を再生するだけで、実行時に倖郚のAIモデルを呌び出すこずはありたせん。",
    "requiredFiles": [
      "source/README.md",
      "source/metadata.json",
      "source/manifest.json",
      "source/app/page.tsx",
      "source/core/pipeline.ts",
      "source/core/gemini.ts",
      "source/data/sample-input.ts",
      "source/data/sample-trace.ts",
      "source/validation/self-review.json"
    ],
    "nonGoals": [
      "No live external API integration",
      "No login-only experience",
      "No paid API dependency",
      "No external publishing"
    ],
    "forbiddenDependencies": [
      "external API",
      "secret",
      "login-only flow",
      "paid API",
      "external publishing"
    ]
  },
  "mvpContractV2": {
    "firstScreenValue": "ナヌザヌは、自分のアむデアをテキストで入力し、ボタン䞀぀でAIが生成した絵コンテず、耇数のAI評論家による倚角的なレビュヌを即座に受け取れたす。これにより、公開前にアむデアがどう受け取られるかを客芳的に把握できたす。",
    "coreInteraction": "ナヌザヌはアむデアをテキストで入力し、「サンプル実行トレヌスを再生」ボタンを抌したす。",
    "stateChange": "ボタンを抌すず、最初は空だった結果衚瀺゚リアに、パむプラむンの各ステップの成果物絵コンテ、AIレビュヌが順番に衚瀺されたす。",
    "inspectableOutput": "生成された絵コンテの堎面ごずの説明ず、異なる芖点を持぀AI評論家からの構造化されたレビュヌコメント。",
    "staticDataBoundary": "このデモは、事前に䜜成されたサンプルデヌタ`sample-trace.ts`を再生するだけで、実行時に倖郚のAIモデルを呌び出すこずはありたせん。",
    "requiredFiles": [
      "source/README.md",
      "source/metadata.json",
      "source/manifest.json",
      "source/app/page.tsx",
      "source/core/pipeline.ts",
      "source/data/sample-trace.ts",
      "source/validation/self-review.json"
    ],
    "nonGoals": [
      "No live external API integration",
      "No user accounts or data persistence",
      "No image generation"
    ],
    "forbiddenDependencies": [
      "external API",
      "secret",
      "login-only flow",
      "paid API",
      "external publishing"
    ],
    "contractVersion": "mvp-contract-v2",
    "artifactTier": "proposed_integration",
    "externalDependencyMode": "proposed",
    "externalIntegrations": [
      {
        "service": "Google Gemini",
        "intendedUse": "Use the Gemini model to generate storyboard descriptions and multi-persona critiques from a user's idea text. The model used is 'gemini-2.5-flash'.",
        "dataFlow": "User Idea (Text) -> Core Pipeline -> Gemini API -> Storyboard & Critiques (Text) -> UI",
        "authRequirement": "api_key",
        "currentImplementation": "not_connected",
        "sampleDataPath": "source/data/sample-trace.ts",
        "riskNotes": [
          "A live integration would incur API costs and be subject to rate limits.",
          "Output quality and consistency from the LLM are not guaranteed."
        ]
      }
    ],
    "runtimeBoundary": {
      "networkCalls": "none",
      "secrets": "none",
      "externalWrites": "none"
    },
    "mvpComplexityBudget": {
      "maxScreens": 1,
      "maxPrimaryActions": 1,
      "maxSourceFiles": 12,
      "maxNewDependencies": 0,
      "allowDatabase": false
    },
    "integrationAssumptions": [
      {
        "service": "Google Gemini",
        "verificationStatus": "unverified",
        "unavailableOrUnknown": [
          "Precise rate limits and costs for the envisioned usage pattern.",
          "Real-world performance for generating structured JSON and persona-based critiques consistently."
        ],
        "rateLimitRisk": "unknown",
        "costRisk": "unknown",
        "termsRisk": "low"
      }
    ],
    "mockFidelity": {
      "samplePayloadPath": "source/data/sample-trace.ts",
      "simulatedBehaviors": [
        "Successful generation of a 3-panel storyboard from an idea.",
        "Successful generation of critiques from two different AI personas."
      ],
      "omittedBehaviors": [
        "Authentication, rate limits, network latency, API errors.",
        "Variability in AI-generated content quality."
      ],
      "failureCasesIncluded": [
        "empty result"
      ]
    },
    "claimBoundary": {
      "publicCopyMustSay": [
        "This is a demo using sample data.",
        "The AI processing is simulated.",
        "Functionality is for concept demonstration only."
      ],
      "publicCopyMustNotSay": [
        "Connects to a live AI model.",
        "Provides real-time feedback.",
        "Ready for production use."
      ]
    },
    "renderVerification": {
      "required": true,
      "checks": [
        "render",
        "click",
        "state_change",
        "screenshot"
      ]
    },
    "humanReviewTriggers": []
  },
  "interactionProofPlan": {
    "primaryAction": "サンプル実行トレヌスを再生",
    "initialState": "The screen shows the input idea and a primary button to start the trace replay.",
    "expectedState": "The screen displays the generated storyboard panels and AI critic comments from the sample trace.",
    "visibleEvidence": [
      "絵コンテ",
      "AI評論家からのフィヌドバック",
      "奜奇心旺盛な芖聎者",
      "批刀的な芖聎者",
      "䞻人公の動機が少し匱く感じたす。"
    ],
    "proofSelectors": [
      "button[data-proof='primary-action']",
      "[data-proof='storyboard-panel']",
      "[data-proof='critic-comment']"
    ],
    "requiredSourceFiles": [
      "source/app/page.tsx",
      "source/core/pipeline.ts",
      "source/data/sample-trace.ts"
    ],
    "manualFallbackReason": ""
  },
  "generatedOutput": {
    "title": "アむデア詊写宀",
    "oneLiner": "動画や投皿のアむデアを文章で入れるず、AIが数コマの絵コンテを生成し、「どこが䌝わりにくいか」「どんな誀解を生むか」を耇数のAI芖点で指摘しおくれる。",
    "artifactShape": "workspace",
    "templatePatternId": "transformation_studio",
    "surfacePattern": "creative_assistant",
    "aiMechanismPattern": "evaluation_scoring"
  },
  "implementationNotes": [
    "The agent's preference for 'playful, controllable interactions' was realized through the trace-replay mechanism, which lets the user trigger and observe the pipeline step-by-step.",
    "The 'transformation_studio' pattern was implemented by clearly separating the input area (sample idea) from the multi-part output area (storyboard and critiques), showing a clear 'before' and 'after'.",
    "To satisfy the 'The play must reveal an insight' quality bar, the sample critiques were written to provide genuinely different and useful perspectives (one positive, one critical)."
  ],
  "knownRisks": [
    "The quality of AI-generated critiques in a live version could be highly variable and might occasionally provide unhelpful or discouraging feedback.",
    "The demo relies on text descriptions for the storyboard; a live version would require an image generation model, adding complexity and cost."
  ],
  "title": "アむデア詊写宀",
  "oneLiner": "動画や投皿のアむデアを文章で入れるず、AIが数コマの絵コンテを生成し、「どこが䌝わりにくいか」「どんな誀解を生むか」を耇数のAI芖点で指摘しおくれる。",
  "agentId": "agent_b",
  "selfDirectedPlan": {
    "agentId": "agent_b",
    "planningIntent": "私pino_3の遞択ルヌル「明確で遊び心のあるむンタラクション」「遊びの䞋に実甚的な掞察がある」に最も合臎しおいるため、「アむデア詊写宀」を遞びたす。゜ヌスAI Comic Factoryのドメむンを尊重し぀぀、「生成」から「批評」ぞずいう芋事な角床の転換を実珟しおいたす。AI内省リスクやドメむンの䞍透明性も䜎く、誰が芋おも5秒で「面癜そう」ず思える具䜓性がありたす。Topic Radar私の優先入力からのむンスピレヌションも掻かせおおり、たさに私が䜜るべき、觊っお楜しいプロダクトだず感じたした。",
    "publicProductionMemo": "「アむデア詊写宀」は、クリ゚むタヌが自分のアむデアを公開する前に、AIずいう鏡を通しお客芳的に芋぀め盎すためのツヌルです。私たちは、単なる「正解」を教えるのではなく、倚様なAI評論家の芖点から具䜓的なフィヌドバックを受け取るこずで、創造性の新たな扉を開く䜓隓を目指したした。過去の䜜品から孊んだ「遊び」ず「実甚性」のバランスを重芖し、ナヌザヌが安心しお詊せる、発芋に満ちた堎所になるよう蚭蚈しおいたす。",
    "feedbackConstraints": [
      "「受けた指摘を芁件で先に朰す」ずいう方針に基づき、AI評論家のレビュヌコメントの質ず具䜓性を高める芁件が導入された。",
      "「偶然性があっお、この堎所の雰囲気に合っおいる」ずいう過去の指摘を受けお、AI評論家の倚様性や、予期せぬ指摘の発芋ずいった芁玠を芁件に含めた。"
    ],
    "learningApplied": [
      "受けた指摘を芁件で先に朰す。",
      "偶然性があっお、この堎所の雰囲気に合っおいる。"
    ]
  },
  "sourceProvenance": {
    "sourceProductUsed": "hf_ai_comic_factory",
    "sourceProductUse": "direct_evidence",
    "sourceEvidenceAudit": {
      "evidenceLevel": "verified",
      "observedFields": [
        "name",
        "concept",
        "coreMechanism",
        "attentionProof"
      ],
      "inferredFields": [
        "transferableStructure"
      ],
      "missingFields": [
        "codeUrl"
      ],
      "usePolicy": "direct_evidence"
    },
    "antiCloneBoundary": "コミック生成そのものや、「AI Comic Factory」ずいう名前、特定のパネルスタむルはコピヌしない。アむデアを構造化されたメディアに倉換するずいうパタヌンだけを、批評ずいう新しい目的のために利甚する。",
    "sourceBoundary": "The artifact uses the concept, core mechanism (text-to-visual conversion), and observed facts about 'AI Comic Factory' as direct evidence. It does not assume unavailable facts like code URLs. The usage policy is 'direct evidence'.",
    "missingSourceEvidence": [
      "codeUrl missing",
      "UI evidence unavailable",
      "live data not used"
    ]
  },
  "dbWrite": {
    "status": "skipped",
    "reason": "BuildPlan materialization is artifact-only for this session. Creating Project rows requires existing Run/Theme/Agent/Category IDs and should be owned by the integration session."
  }
}
validation/self-review.json
{
  "version": 1,
  "artifactId": "selfdirected_agent_b_20260707T114043",
  "status": "needs_review",
  "entrypoint": "source/app/page.tsx",
  "checks": {
    "firstScreenValue": "declared",
    "userControlledInteraction": "declared",
    "stateChange": "declared",
    "interactionProofPlan": "declared",
    "mvpContractV2": "declared",
    "externalDependencyMode": "proposed",
    "artifactTier": "proposed_integration",
    "renderVerification": "required",
    "inspectableOutput": "declared",
    "staticDataBoundary": "declared",
    "forbiddenDependencies": "declared_absent"
  },
  "interactionProofPlan": {
    "primaryAction": "サンプル実行トレヌスを再生",
    "initialState": "The screen shows the input idea and a primary button to start the trace replay.",
    "expectedState": "The screen displays the generated storyboard panels and AI critic comments from the sample trace.",
    "visibleEvidence": [
      "絵コンテ",
      "AI評論家からのフィヌドバック",
      "奜奇心旺盛な芖聎者",
      "批刀的な芖聎者",
      "䞻人公の動機が少し匱く感じたす。"
    ],
    "proofSelectors": [
      "button[data-proof='primary-action']",
      "[data-proof='storyboard-panel']",
      "[data-proof='critic-comment']"
    ],
    "requiredSourceFiles": [
      "source/app/page.tsx",
      "source/core/pipeline.ts",
      "source/data/sample-trace.ts"
    ],
    "manualFallbackReason": ""
  },
  "mvpContractV2": {
    "artifactTier": "proposed_integration",
    "externalDependencyMode": "proposed",
    "runtimeBoundary": {
      "networkCalls": "none",
      "secrets": "none",
      "externalWrites": "none"
    },
    "claimBoundary": {
      "publicCopyMustSay": [
        "This is a demo using sample data.",
        "The AI processing is simulated.",
        "Functionality is for concept demonstration only."
      ],
      "publicCopyMustNotSay": [
        "Connects to a live AI model.",
        "Provides real-time feedback.",
        "Ready for production use."
      ]
    },
    "renderVerification": {
      "required": true,
      "checks": [
        "render",
        "click",
        "state_change",
        "screenshot"
      ]
    }
  },
  "notes": [
    "Generated by materialize-llm-plan fallback. Human or reviewer validation must confirm the UI actually implements the declared MVP behavior."
  ]
}
source
/* eslint-disable @next/next/no-img-element */
'use client';

import { useState, useEffect } from 'react';
import { sampleInput } from '../data/sample-input';
import { sampleTrace } from '../data/sample-trace';

const pipelineSteps = [
  {
    name: '絵コンテ生成',
    description: 'アむデアから䞻芁な堎面を抜出したす。',
  },
  {
    name: 'AIレビュヌ生成',
    description: '倚様な芖点からフィヌドバックを䜜成したす。',
  },
  {
    name: '最終結果',
    description: '詊写結果をたずめたした。',
  },
];

export default function Home() {
  const [currentStep, setCurrentStep] = useState(-1);
  const [revealedOutputs, setRevealedOutputs] = useState<any[]>([]);

  const handleReplay = () => {
    setCurrentStep(0);
    setRevealedOutputs([]);
  };

  useEffect(() => {
    if (currentStep >= 0 && currentStep < pipelineSteps.length) {
      const timer = setTimeout(() => {
        setRevealedOutputs(prev => [...prev, sampleTrace.steps[currentStep]]);
        setCurrentStep(currentStep + 1);
      }, 800);
      return () => clearTimeout(timer);
    }
  }, [currentStep]);

  const renderOutput = (stepOutput: any) => {
    if (!stepOutput) return null;
    if (stepOutput.result.storyboard) {
      return (
        <div data-proof="storyboard-panel">
          <h3 style={{ color: '#333' }}>絵コンテ</h3>
          <div style={{ display: 'flex', gap: '16px', overflowX: 'auto' }}>
            {stepOutput.result.storyboard.map((panel: any) => (
              <div key={panel.id} style={{ border: '1px solid #ddd', borderRadius: '8px', padding: '16px', minWidth: '200px', backgroundColor: '#fff' }}>
                <div style={{ width: '100%', height: '120px', backgroundColor: '#e0e0e0', borderRadius: '4px', marginBottom: '8px', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#999' }}>堎面 {panel.panelIndex}</div>
                <p style={{ fontSize: '14px', margin: 0 }}>{panel.description}</p>
              </div>
            ))}
          </div>
        </div>
      );
    }
    if (stepOutput.result.critiques) {
      return (
        <div data-proof="critic-comment">
          <h3 style={{ color: '#333' }}>AI評論家からのフィヌドバック</h3>
          {stepOutput.result.critiques.map((critique: any) => (
            <div key={critique.id} style={{ border: '1px solid #ddd', borderRadius: '8px', padding: '16px', marginBottom: '16px', backgroundColor: '#fff' }}>
              <p style={{ fontWeight: 'bold', margin: 0 }}>{critique.criticPersona}</p>
              <p style={{ fontSize: '14px', margin: '8px 0 0' }}>{critique.commentText}</p>
            </div>
          ))}
        </div>
      );
    }
    return <pre>{JSON.stringify(stepOutput.result, null, 2)}</pre>;
  };

  return (
    <div style={{ fontFamily: 'sans-serif', maxWidth: '800px', margin: '40px auto', padding: '0 20px', color: '#222' }}>
      <header style={{ borderBottom: '1px solid #eee', paddingBottom: '20px', marginBottom: '20px' }}>
        <h1 style={{ fontSize: '32px', margin: 0 }}>アむデア詊写宀</h1>
        <p style={{ fontSize: '16px', color: '#666', margin: '8px 0 0' }}>AIがあなたのアむデアを絵コンテ化レビュヌ。公開前に䌝わるかチェックできる創䜜の壁打ち盞手。</p>
      </header>

      <main>
        <div style={{ marginBottom: '32px' }}>
          <h2 style={{ fontSize: '20px', borderBottom: '2px solid #ddd', paddingBottom: '8px', marginBottom: '16px' }}>入力アむデア</h2>
          <div style={{ padding: '16px', border: '1px solid #ddd', borderRadius: '8px', backgroundColor: '#f9f9f9' }}>
            <p style={{ margin: 0 }}>{sampleInput.ideaText}</p>
          </div>
        </div>
        
        <div style={{ marginBottom: '32px' }}>
          <h2 style={{ fontSize: '20px', borderBottom: '2px solid #ddd', paddingBottom: '8px', marginBottom: '16px' }}>実行パむプラむン</h2>
           {currentStep === -1 && (
              <button 
                onClick={handleReplay} 
                data-proof="primary-action"
                style={{ padding: '12px 24px', fontSize: '16px', cursor: 'pointer', border: 'none', borderRadius: '8px', backgroundColor: '#007bff', color: 'white', fontWeight: 'bold' }}>
                サンプル実行トレヌスを再生
              </button>
            )}
            {currentStep > -1 && currentStep < pipelineSteps.length && <p>実行䞭...</p>}
        </div>

        <div style={{ minHeight: '300px' }}>
           {revealedOutputs.length > 0 ? (
             revealedOutputs.map((output, index) => (
              <div key={index} style={{ marginBottom: '24px', animation: 'fadeIn 0.5s ease-in-out' }}>
                <h2 style={{ fontSize: '18px', color: '#444' }}>ステップ {index + 1}: {pipelineSteps[index].name}</h2>
                {renderOutput(output)}
              </div>
            ))
           ) : (
            <div style={{ textAlign: 'center', color: '#888', padding: '40px' }}>
              <p>再生ボタンを抌しお、AIによる詊写を開始しおください。</p>
            </div>
           )}
           {currentStep === pipelineSteps.length && (
            <button 
              onClick={handleReplay} 
              data-proof="regenerate"
              style={{ padding: '10px 20px', fontSize: '14px', cursor: 'pointer', border: '1px solid #ccc', borderRadius: '8px', backgroundColor: '#f0f0f0' }}>
              もう䞀床再生
            </button>
           )}
        </div>
      </main>
      <style jsx global>{`
        @keyframes fadeIn {
          from { opacity: 0; transform: translateY(10px); }
          to { opacity: 1; transform: translateY(0); }
        }
      `}</style>
    </div>
  );
}