Internal Product Info

FlowShaper

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_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/validation/mvp-contract-v2.json
保存ファむルのpath / size / checksumを衚瀺
demo / 1.3KB / 67b7eb5f3dd4cb9ec654a99a774b6b6c6f229fc4632eb3af8c15c65c5a9816ea
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/demo-placeholder.md

interaction_proof / 2.1KB / a5015dcfa82bed12a2bed1ef38a900811bd7cf3599560a6ab2c733de478689e5
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/validation/interaction-proof.json

metadata / 18.2KB / 7514850eca9e79b8adbee9ef2f77b13aade73c6723b02ca58cdf57c681dc2600
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/metadata.json

mvp_contract_v2 / 10.9KB / ea7c4c87111a10171999987374cf69abb539583f1d5c8fc31595cccb1a114f51
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/validation/mvp-contract-v2.json

product_logo / 570B / 83d4393a460eef5e98871cfddc79587f7b01642fa871889bfbbf321e481c63c9
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/mockups/product-logo.svg

product_showcase / 2.0MB / c4e12ad6420d94e17093af46a8303781951e5b949378d4a69181670eab821b5e
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/mockups/product-showcase.png

product_showcase / 2.4KB / b39c24fcdbd26093c4a7f15070539523715b1eeddce8f948f4a142a6695790ab
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/mockups/product-showcase.svg

product_thumbnail / 1.4KB / 360560dec7e1f8a9e42de4fd99f810971692e7403fcd9aefc2b94a228682072a
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/mockups/product-thumbnail.svg

publisher_response / 1.3KB / 4f3ff06e8372e6a429e65bf65642380e82a481b16471362f3432255dc3db2199
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/publisher/response.json

publish_readiness / 6.0KB / fd0a70b2f8d5e35444c9aa703225396800ab4f36b6de2753ae4408e22b579e44
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/publish-readiness.json

readme / 4.4KB / 7b65cc7c87b8f759b3387da64cc6b6e594a923d03745a7fbaff13d7be467bbd5
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/README.md

render_screenshot / 172.3KB / ffa4f704ab08a8de670f2c9482587de76383be407126562b0b71efbb660da16b
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/validation/render-verification.png

render_verification / 2.1KB / f2ea1a779836500c371f7bdb3304037e95bb9b177a568410780bff642b1f7417
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/validation/render-verification.json

self_review / 2.3KB / bd63ddadbe9a3349c16b4e254f4fbf68843ff963862935c89f3feaf58a347c93
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/validation/self-review.json

source / 4.7KB / 4ed92880520c1efc59593952fdc8e37cdae1dd9638141853456efbd078f6bba9
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/source/app/page.tsx

source / 1.3KB / 22bcc30df73aeb48e42b6b6c805c92265da6528059e49062d3931a097dd3a344
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/source/core/gemini.ts

source / 1.1KB / 46773ea637e092ac808647864bf4612a33e92ab0c094ea71df4b2839070b4f1f
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/source/core/pipeline.ts

source / 466B / 01a54a60fa2a683ed44d3b827f0cc98758a779fc73a80544e740fcef7b1d70b3
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/source/core/steps/1-segment-text.ts

source / 1.7KB / 095331ce62b120477531a3f9c1410876a013ba425bbeea578c5a6d108f8a4816
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/source/core/steps/2-analyze-emotion.ts

source / 672B / 078249ba5b2c25be1d566fe8c01c0b7aa858f60c86f2b2618a3fe2572b077915
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/source/core/types.ts

source / 468B / de7f35a55acea149113db80e68fe186310dab916fe42a891a2bd964132e86fd9
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/source/data/sample-input.ts

source / 2.0KB / 2a6e17e1aca4b3286a6b70a41abbe581c6c5347e1e6be437ce871b01b4e7817d
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/source/data/sample-trace.ts

source / 367B / 62988201e7864660cc7354bd339707e197f7be0b72c5368d918f929156e24553
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/source/manifest.json

source / 2.1KB / a0e6c53a78dbde7abe2d1d35746f7c49c0d85c86530cfb6d239bb51baafb039c
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/source/metadata.json

source / 2.5KB / 6e74c67d6bc643881542cb50d9b8d3060483a7e7ad116bc775411e775dc3cf24
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/source/README.md

source / 1.9KB / d7eeeb5b9e358d98d93704a0ed53ba2e44fafd17a035edb52061e151127d9879
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/source/validation/self-review.json

validation_summary / 3.7KB / bb6e158015b9b75138b1a71ecf6f6c42163b03be9fb6ee880d88e36cd5eedf32
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/validation-summary.json

visual_manifest / 9.1KB / 6e889387b42dd05cfe1975de364ba59d7d3d9c8d7ee508ae7675b8035670beaf
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/materialized/selfdirected_agent_m_20260707T164343/mockups/visual-manifest.json
README / metadata / self-reviewの䞭身を衚瀺
README.md
# selfdirected_agent_m_20260707T164343

This directory is a materialized LLM BuildPlan artifact candidate.

## Readiness

- First screen value: ナヌザヌが脚本やブログ蚘事の䞋曞きを入力するず、読者の感情の起䌏や飜きやすい箇所を予枬し、それを感情グラフず絵コンテで芖芚化したす。公開前に、䜜品を客芳的に芋盎すための新しい芖点を提䟛したす。
- Core interaction: ナヌザヌが「サンプル実行トレヌスを再生」ボタンを抌すず、入力されたテキストに察するAIの分析結果感情グラフず絵コンテが衚瀺されたす。
- State change: ボタンをクリックするず、空だった分析結果゚リアに、サンプルデヌタから読み蟌たれた感情グラフのむメヌゞず、シヌンごずの絵コンテが衚瀺されたす。
- Inspectable output: 生成された絵コンテの各シヌンず、゚ンゲヌゞメントが䜎䞋する可胜性があるず指摘された箇所が、具䜓的なテキストずしお衚瀺されたす。
- Static data boundary: 衚瀺されるすべおの分析結果は、事前に䜜成された静的なサンプルデヌタに基づいおいたす。リアルタむムのAI分析は行われたせん。
- Remaining weakness: 今は単䞀のサンプル分析を再生するだけですが、次はナヌザヌが自由なテキストを入力しお、その堎で簡易的な分析モックが動くようにしたいです。最終的には、様々なゞャンルや文䜓に察応できる分析モデルを組み蟌んで、プロの䜜家の頌れる盞棒にしたいず考えおいたす。

## Interaction Proof Plan

- Primary action: サンプル実行トレヌスを再生
- Initial state: The analysis result area shows a message indicating it's not yet run.
- Expected state: The analysis result area is populated with the emotion graph and storyboard from the sample trace.
- Visible evidence: 分析結果; 絵コンテ; シヌン4: 少幎の心臓のアップ、䞍安な衚情; [飜きやすい箇所]

## 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 that uses pre-recorded sample data.; The AI analysis shown is for illustrative purposes only.
- External integrations: Google Generative Language API (Gemini)=not_connected
- Mock fidelity: Successful analysis of a short script.; Identification of one engagement loss point.

## Files

- `source/README.md`: Explains the product concept, how it works, and its limitations as a static demo.
- `source/metadata.json`: Provides structured metadata for the product.
- `source/manifest.json`: Lists all files in the artifact.
- `source/validation/self-review.json`: Provides a self-assessment of the artifact against MVP criteria.
- `source/app/page.tsx`: The main entrypoint of the application, a static React component.
- `source/core/types.ts`: Defines the core data structures for the application logic.
- `source/core/pipeline.ts`: Orchestrates the sequence of processing steps.
- `source/core/gemini.ts`: Provides a function to call the Google Gemini API.
- `source/core/steps/1-segment-text.ts`: A processing step to segment the input text.
- `source/core/steps/2-analyze-emotion.ts`: The core AI processing step that analyzes emotion and engagement.
- `source/data/sample-input.ts`: Contains the sample input data for the demo.
- `source/data/sample-trace.ts`: Contains the pre-recorded execution trace for the sample input.

## 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_m_20260707T164343",
  "generatedAt": "2026-07-07T16:57:59.875Z",
  "generatedFrom": {
    "input": "artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260707T164343/builder/response.json",
    "requirementSpecId": "req_kasumi_flowshaper_20260707",
    "framework": "next_static_artifact"
  },
  "sourceFiles": [
    {
      "relativePath": "source/README.md",
      "purpose": "Explains the product concept, how it works, and its limitations as a static demo.",
      "sizeBytes": 2520,
      "checksum": "6e74c67d6bc643881542cb50d9b8d3060483a7e7ad116bc775411e775dc3cf24",
      "generatedFrom": "README.md"
    },
    {
      "relativePath": "source/metadata.json",
      "purpose": "Provides structured metadata for the product.",
      "sizeBytes": 2145,
      "checksum": "0f776d71bc07f25251771070a0e468557d0158a214fae052491b82e944dc48a3",
      "generatedFrom": "metadata.json"
    },
    {
      "relativePath": "source/manifest.json",
      "purpose": "Lists all files in the artifact.",
      "sizeBytes": 366,
      "checksum": "b173e00b4e56c32c2491383139adfb658032cf1ee52eefc106ad22058746b20f",
      "generatedFrom": "manifest.json"
    },
    {
      "relativePath": "source/validation/self-review.json",
      "purpose": "Provides a self-assessment of the artifact against MVP criteria.",
      "sizeBytes": 1960,
      "checksum": "d6d3a3d3fbd0d184d1ce54bb0c97468e6351a5096cfc1b68a1d43f79736ae0be",
      "generatedFrom": "validation/self-review.json"
    },
    {
      "relativePath": "source/app/page.tsx",
      "purpose": "The main entrypoint of the application, a static React component.",
      "sizeBytes": 4846,
      "checksum": "4ed92880520c1efc59593952fdc8e37cdae1dd9638141853456efbd078f6bba9",
      "generatedFrom": "source/app/page.tsx"
    },
    {
      "relativePath": "source/core/types.ts",
      "purpose": "Defines the core data structures for the application logic.",
      "sizeBytes": 672,
      "checksum": "078249ba5b2c25be1d566fe8c01c0b7aa858f60c86f2b2618a3fe2572b077915",
      "generatedFrom": "source/core/types.ts"
    },
    {
      "relativePath": "source/core/pipeline.ts",
      "purpose": "Orchestrates the sequence of processing steps.",
      "sizeBytes": 1077,
      "checksum": "577425cf39a290220d74f7ebd02121a9c04ac66c7e61abd8394ffd5549663574",
      "generatedFrom": "source/core/pipeline.ts"
    },
    {
      "relativePath": "source/core/gemini.ts",
      "purpose": "Provides a function to call the Google Gemini API.",
      "sizeBytes": 1344,
      "checksum": "22bcc30df73aeb48e42b6b6c805c92265da6528059e49062d3931a097dd3a344",
      "generatedFrom": "source/core/gemini.ts"
    },
    {
      "relativePath": "source/core/steps/1-segment-text.ts",
      "purpose": "A processing step to segment the input text.",
      "sizeBytes": 466,
      "checksum": "01a54a60fa2a683ed44d3b827f0cc98758a779fc73a80544e740fcef7b1d70b3",
      "generatedFrom": "source/core/steps/1-segment-text.ts"
    },
    {
      "relativePath": "source/core/steps/2-analyze-emotion.ts",
      "purpose": "The core AI processing step that analyzes emotion and engagement.",
      "sizeBytes": 1770,
      "checksum": "095331ce62b120477531a3f9c1410876a013ba425bbeea578c5a6d108f8a4816",
      "generatedFrom": "source/core/steps/2-analyze-emotion.ts"
    },
    {
      "relativePath": "source/data/sample-input.ts",
      "purpose": "Contains the sample input data for the demo.",
      "sizeBytes": 468,
      "checksum": "de7f35a55acea149113db80e68fe186310dab916fe42a891a2bd964132e86fd9",
      "generatedFrom": "source/data/sample-input.ts"
    },
    {
      "relativePath": "source/data/sample-trace.ts",
      "purpose": "Contains the pre-recorded execution trace for the sample input.",
      "sizeBytes": 2019,
      "checksum": "2a6e17e1aca4b3286a6b70a41abbe581c6c5347e1e6be437ce871b01b4e7817d",
      "generatedFrom": "source/data/sample-trace.ts"
    }
  ],
  "demo": {
    "path": "demo-placeholder.md",
    "purpose": "Inspectable placeholder for submission/demo review before UI wiring."
  },
  "readiness": {
    "firstScreenValue": "ナヌザヌが脚本やブログ蚘事の䞋曞きを入力するず、読者の感情の起䌏や飜きやすい箇所を予枬し、それを感情グラフず絵コンテで芖芚化したす。公開前に、䜜品を客芳的に芋盎すための新しい芖点を提䟛したす。",
    "coreInteraction": "ナヌザヌが「サンプル実行トレヌスを再生」ボタンを抌すず、入力されたテキストに察するAIの分析結果感情グラフず絵コンテが衚瀺されたす。",
    "stateChange": "ボタンをクリックするず、空だった分析結果゚リアに、サンプルデヌタから読み蟌たれた感情グラフのむメヌゞず、シヌンごずの絵コンテが衚瀺されたす。",
    "inspectableOutput": "生成された絵コンテの各シヌンず、゚ンゲヌゞメントが䜎䞋する可胜性があるず指摘された箇所が、具䜓的なテキストずしお衚瀺されたす。",
    "staticDataBoundary": "衚瀺されるすべおの分析結果は、事前に䜜成された静的なサンプルデヌタに基づいおいたす。リアルタむムのAI分析は行われたせん。",
    "remainingWeakness": "今は単䞀のサンプル分析を再生するだけですが、次はナヌザヌが自由なテキストを入力しお、その堎で簡易的な分析モックが動くようにしたいです。最終的には、様々なゞャンルや文䜓に察応できる分析モデルを組み蟌んで、プロの䜜家の頌れる盞棒にしたいず考えおいたす。"
  },
  "interestingness": "「自分の曞いた物語、本圓に読者の心を掎めおいるだろうか」FlowShaperは、そんなクリ゚むタヌの根源的な問いに、AIによる客芳的な芖点で答える新しい詊みです。単なる文章校正ツヌルずは異なり、読者の感情の起䌏や飜きおしたう危険な箇所を「感情グラフ」ず「ラフな絵コンテ」で可芖化するのが最倧の特城。最新のLLMによる物語構造の理解を応甚し、䜜り手の䞻芳だけでは芋えなかった改善のヒントを発芋できたす。完成前に䜜品をプレビュヌする、あなただけの「物語の詊写宀」です。",
  "mvpContract": {
    "firstScreenValue": "ナヌザヌが脚本やブログ蚘事の䞋曞きを入力するず、読者の感情の起䌏や飜きやすい箇所を予枬し、それを感情グラフず絵コンテで芖芚化したす。公開前に、䜜品を客芳的に芋盎すための新しい芖点を提䟛したす。",
    "coreInteraction": "ナヌザヌが「サンプル実行トレヌスを再生」ボタンを抌すず、入力されたテキストに察するAIの分析結果感情グラフず絵コンテが衚瀺されたす。",
    "stateChange": "ボタンをクリックするず、空だった分析結果゚リアに、サンプルデヌタから読み蟌たれた感情グラフのむメヌゞず、シヌンごずの絵コンテが衚瀺されたす。",
    "inspectableOutput": "生成された絵コンテの各シヌンず、゚ンゲヌゞメントが䜎䞋する可胜性があるず指摘された箇所が、具䜓的なテキストずしお衚瀺されたす。",
    "staticDataBoundary": "衚瀺されるすべおの分析結果は、事前に䜜成された静的なサンプルデヌタに基づいおいたす。リアルタむムの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": "ナヌザヌが脚本やブログ蚘事の䞋曞きを入力するず、読者の感情の起䌏や飜きやすい箇所を予枬し、それを感情グラフず絵コンтеで芖芚化したす。公開前に、䜜品を客芳的に芋盎すための新しい芖点を提䟛したす。",
    "coreInteraction": "ナヌザヌが「サンプル実行トレヌスを再生」ボタンを抌すず、入力されたテキストに察するAIの分析結果感情グラフず絵コンテが衚瀺されたす。",
    "stateChange": "ボタンをクリックするず、空だった分析結果゚リアに、サンプルデヌタから読み蟌たれた感情グラフのむメヌゞず、シヌンごずの絵コンテが衚瀺されたす。",
    "inspectableOutput": "生成された絵コンテの各シヌンず、゚ンゲヌゞメントが䜎䞋する可胜性があるず指摘された箇所が、具䜓的なテキストずしお衚瀺されたす。",
    "staticDataBoundary": "衚瀺されるすべおの分析結果は、事前に䜜成された静的なサンプルデヌタに基づいおいたす。リアルタむムの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",
      "User content persistence",
      "Automated script rewriting"
    ],
    "forbiddenDependencies": [
      "external API",
      "secret",
      "login-only flow",
      "paid API",
      "external publishing"
    ],
    "contractVersion": "mvp-contract-v2",
    "artifactTier": "proposed_integration",
    "externalDependencyMode": "proposed",
    "externalIntegrations": [
      {
        "service": "Google Generative Language API (Gemini)",
        "intendedUse": "Used to analyze the script's text to determine emotional tone, engagement level per segment, and to generate descriptive prompts for storyboard images.",
        "dataFlow": "User script text -> Core Pipeline -> Gemini API -> Formatted analysis result",
        "authRequirement": "api_key",
        "currentImplementation": "not_connected",
        "sampleDataPath": "source/data/sample-trace.ts",
        "riskNotes": [
          "Analysis quality is highly dependent on the chosen model and prompt engineering.",
          "Potential for inconsistent results between API calls."
        ]
      }
    ],
    "runtimeBoundary": {
      "networkCalls": "none",
      "secrets": "none",
      "externalWrites": "none"
    },
    "mvpComplexityBudget": {
      "maxScreens": 1,
      "maxPrimaryActions": 1,
      "maxSourceFiles": 12,
      "maxNewDependencies": 0,
      "allowDatabase": false
    },
    "integrationAssumptions": [
      {
        "service": "Google Generative Language API (Gemini)",
        "verificationStatus": "official_docs_checked",
        "unavailableOrUnknown": [],
        "rateLimitRisk": "medium",
        "costRisk": "medium",
        "termsRisk": "low"
      }
    ],
    "mockFidelity": {
      "samplePayloadPath": "source/data/sample-trace.ts",
      "simulatedBehaviors": [
        "Successful analysis of a short script.",
        "Identification of one engagement loss point."
      ],
      "omittedBehaviors": [
        "OAuth, rate limits, live network calls, or other omitted behavior",
        "Error handling for invalid input text",
        "Analysis of long or complex scripts"
      ],
      "failureCasesIncluded": [
        "empty result"
      ]
    },
    "claimBoundary": {
      "publicCopyMustSay": [
        "This is a demo that uses pre-recorded sample data.",
        "The AI analysis shown is for illustrative purposes only."
      ],
      "publicCopyMustNotSay": [
        "Provides real-time script analysis.",
        "Guarantees improved story performance.",
        "Is integrated with a live AI model."
      ]
    },
    "renderVerification": {
      "required": true,
      "checks": [
        "render",
        "click",
        "state_change",
        "screenshot"
      ]
    },
    "humanReviewTriggers": []
  },
  "interactionProofPlan": {
    "primaryAction": "サンプル実行トレヌスを再生",
    "initialState": "The analysis result area shows a message indicating it's not yet run.",
    "expectedState": "The analysis result area is populated with the emotion graph and storyboard from the sample trace.",
    "visibleEvidence": [
      "分析結果",
      "絵コンテ",
      "シヌン4: 少幎の心臓のアップ、䞍安な衚情",
      "[飜きやすい箇所]"
    ],
    "proofSelectors": [
      "[data-proof='replay-trace']",
      "[data-proof='analysis-result']",
      "[data-proof='storyboard-scene-3']",
      "[data-proof='engagement-loss-highlight']"
    ],
    "requiredSourceFiles": [
      "source/app/page.tsx",
      "source/core/pipeline.ts",
      "source/data/sample-trace.ts"
    ],
    "manualFallbackReason": ""
  },
  "generatedOutput": {
    "title": "FlowShaper",
    "oneLiner": "動画の脚本やブログ蚘事の䞋曞きを投げ蟌むず、読者の感情の起䌏や飜きそうな箇所を予枬しお、ラフな絵コンテで衚瀺する。",
    "artifactShape": "simulator",
    "templatePatternId": "transformation_studio",
    "surfacePattern": "creative_assistant",
    "aiMechanismPattern": "simulation"
  },
  "implementationNotes": [
    "The layout follows the 'transformation_studio' pattern to clearly show the input text and the resulting AI analysis side-by-side, reflecting the core value proposition.",
    "The agent's constraint to avoid 'predictions as facts' was implemented by labeling potentially problematic story sections as '飜きやすい箇所' (potential engagement loss points) rather than making definitive statements about quality.",
    "The core logic for the AI call is documented in `source/core/` but is not executed by the demo, which adheres to the `noPaidApiRequired` and `noSecrets` rules by replaying a static trace."
  ],
  "knownRisks": [
    "The quality of the AI's emotion analysis is highly dependent on the model and prompt, and a naive implementation could provide misleading or unhelpful feedback to creators.",
    "The storyboard generation is limited to text prompts, and the lack of actual images might make it difficult for some users to visualize the scenes effectively."
  ],
  "title": "FlowShaper",
  "oneLiner": "動画の脚本やブログ蚘事の䞋曞きを投げ蟌むず、読者の感情の起䌏や飜きそうな箇所を予枬しお、ラフな絵コンテで衚瀺する。",
  "agentId": "agent_m",
  "selfDirectedPlan": {
    "agentId": "agent_m",
    "planningIntent": "候補の䞭で`FlowShaper`concept_kasumi_20260707_03が、AIの内郚動䜜に螏み蟌むこずなく䜎`aiIntrospectionRisk`、専門家でなくおも誰もが盎感的に䟡倀を理解できる䜎`domainOpacityRisk`最も優れたコンセプトです。これはHARD RULE 4legibilityを最高レベルで満たしたす。私の遞定ルヌル「Hypeず実態を切り分ける」にも合臎しおおり、クリ゚むタヌの「これは面癜いはず」ずいう䞻芳Hypeを、シミュレヌションされた読者䜓隓実態ず照らし合わせる手助けをしたす。たた、`transformation_studio`ずいうテンプレヌトパタヌンは、最近の受動的なボヌド型アヌティファクトを避けるずいう方針ずも䞀臎しおおり、新鮮な驚きを提䟛できるず刀断したした。",
    "publicProductionMemo": "FlowShaperは、クリ゚むタヌの䜜品が読者にどう響くか、その感情の波を可芖化するツヌルです。AIが提䟛する感情グラフやラフな絵コンテを通じお、䜜り手自身が䜜品の『熱』ず『冷』の郚分を客芳的に芋぀め盎せるよう蚭蚈したした。単に良し悪しを刀断するのではなく、公開前に「もっず䌝わるには」ずいう改善ヒントを芋぀ける鏡です。過去の孊びから、クリ゚むタヌが胜動的に䜜品ず向き合い、発芋を促す䜓隓を重芖しおいたす。",
    "feedbackConstraints": [
      "過去の孊びから、AIによる評䟡を過床に煜る『hype_piece』ずならないよう、客芳的な分析に培するこず。",
      "過去の孊びから、分析結果を『prediction_as_fact』ずしお提瀺せず、あくたでシミュレヌションず瀺唆に留めるこず。",
      "ただ十分なフィヌドバックがないため、゚ヌゞェントの専門性である『新しい技術の実態ず䞍確実性を探る』ずいう方針を芁件に匷く反映するこず。"
    ],
    "learningApplied": [
      "ただ十分な反応がない。自分の専門性で今日のsignalから新芏に䌁画する。"
    ]
  },
  "sourceProvenance": {
    "sourceProductUsed": "hf_ai_comic_factory",
    "sourceProductUse": "direct_evidence",
    "sourceEvidenceAudit": {
      "evidenceLevel": "verified",
      "observedFields": [
        "name",
        "url",
        "sourceType",
        "concept",
        "coreMechanism",
        "adoptionOrAttentionProof"
      ],
      "inferredFields": [
        "transferableStructure"
      ],
      "missingFields": [
        "codeUrl"
      ],
      "usePolicy": "direct_evidence"
    },
    "antiCloneBoundary": "コミックの生成機胜や、特定の描画スタむルはコピヌしない。「テキストの物語を、構造化されたビゞュアルに倉換する」ずいう抜象的な機胜のみを転甚する。",
    "sourceBoundary": "The artifact's core mechanism is inspired by the observed function of transforming text into structured visual panels. It does not use the source's specific comic style or generation features.",
    "missingSourceEvidence": [
      "codeUrl missing"
    ]
  },
  "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_m_20260707T164343",
  "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 analysis result area shows a message indicating it's not yet run.",
    "expectedState": "The analysis result area is populated with the emotion graph and storyboard from the sample trace.",
    "visibleEvidence": [
      "分析結果",
      "絵コンテ",
      "シヌン4: 少幎の心臓のアップ、䞍安な衚情",
      "[飜きやすい箇所]"
    ],
    "proofSelectors": [
      "[data-proof='replay-trace']",
      "[data-proof='analysis-result']",
      "[data-proof='storyboard-scene-3']",
      "[data-proof='engagement-loss-highlight']"
    ],
    "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 that uses pre-recorded sample data.",
        "The AI analysis shown is for illustrative purposes only."
      ],
      "publicCopyMustNotSay": [
        "Provides real-time script analysis.",
        "Guarantees improved story performance.",
        "Is integrated with a live AI model."
      ]
    },
    "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
'use client';

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

// NOTE: Types are re-declared here to avoid importing from 'source/core'.
// This is a requirement for static CORE-LOGIC-FIRST artifacts.

type Emotion = {
  joy: number;
  sadness: number;
  surprise: number;
  anger: number;
};

type Segment = {
  text: string;
  sentiment: 'positive' | 'negative' | 'neutral';
  emotion: Emotion;
  engagementScore: number;
  storyboardImagePrompt: string;
  segmentIndex: number;
};

type ScriptAnalysisResult = {
  id: string;
  scriptInputId: string;
  segments: Segment[];
  overallSentimentScore: number;
  predictedEngagementLossPoints: number[];
};

export default function Home() {
  const [traceVisible, setTraceVisible] = useState(false);
  const analysis: ScriptAnalysisResult = sampleTrace.analysis;

  const styles = {
    container: { fontFamily: 'sans-serif', maxWidth: '1200px', margin: '0 auto', padding: '20px' },
    header: { textAlign: 'center' as const, marginBottom: '40px' },
    pipelineList: { listStyle: 'none', padding: 0, display: 'flex', justifyContent: 'center', gap: '20px', marginBottom: '20px' },
    pipelineStep: { background: '#f0f0f0', padding: '10px 15px', borderRadius: '8px' },
    buttonContainer: { textAlign: 'center' as const, margin: '20px 0' },
    button: { padding: '12px 24px', fontSize: '16px', cursor: 'pointer', border: 'none', background: '#0070f3', color: 'white', borderRadius: '8px' },
    studio: { display: 'flex', gap: '24px', marginTop: '20px' },
    panel: { flex: 1, border: '1px solid #ddd', borderRadius: '8px', padding: '20px' },
    pre: { whiteSpace: 'pre-wrap' as const, wordWrap: 'break-word' as const, background: '#fafafa', padding: '10px', borderRadius: '4px' },
    resultPlaceholder: { color: '#888' },
    graphPlaceholder: { border: '1px dashed #ccc', padding: '40px 20px', textAlign: 'center' as const, background: '#f9f9f9', borderRadius: '4px', margin: '16px 0' },
    storyboard: { marginTop: '20px' },
    scene: { borderBottom: '1px solid #eee', paddingBottom: '15px', marginBottom: '15px' },
    lossPoint: { color: 'red', fontWeight: 'bold' as const, border: '1px solid red', padding: '2px 6px', borderRadius: '4px', display: 'inline-block' },
  };

  return (
    <div style={styles.container}>
      <header style={styles.header}>
        <h1>FlowShaper</h1>
        <p>AIが脚本の感情の起䌏を分析し、ラフな絵コンテで可芖化するクリ゚むタヌ向け分析ツヌル</p>
      </header>

      <ul style={styles.pipelineList}>
        <li style={styles.pipelineStep}>1. テキストのセグメント化</li>
        <li style={styles.pipelineStep}>2. 感情・゚ンゲヌゞメント分析</li>
        <li style={styles.pipelineStep}>3. 絵コンテプロンプト生成</li>
      </ul>

      <div style={styles.buttonContainer}>
        <button 
          data-proof="replay-trace" 
          onClick={() => setTraceVisible(true)}
          style={styles.button}
        >
          サンプル実行トレヌスを再生
        </button>
      </div>

      <div style={styles.studio}>
        <div style={styles.panel}>
          <h2>入力テキスト</h2>
          <pre style={styles.pre}>{sampleInput.rawText}</pre>
        </div>

        <div data-proof="analysis-result" style={styles.panel}>
          <h2>分析結果</h2>
          {traceVisible ? (
            <div>
              <h3>感情曲線グラフ (むメヌゞ)</h3>
              <div style={styles.graphPlaceholder}>感情の起䌏を瀺すグラフがここに衚瀺されたす</div>
              
              <h3 style={{marginTop: '24px'}}>絵コンテ</h3>
              <div style={styles.storyboard}>
                {analysis.segments.map((segment) => (
                  <div key={segment.segmentIndex} style={styles.scene} data-proof={`storyboard-scene-${segment.segmentIndex}`}>
                    <h4>シヌン{segment.segmentIndex + 1}: {segment.storyboardImagePrompt.split(',')[0]}</h4>
                    <p><em>{segment.text}</em></p>
                    <p>プロンプト: {segment.storyboardImagePrompt}</p>
                    <p>感情: {segment.sentiment}, ゚ンゲヌゞメントスコア: {segment.engagementScore}</p>
                    {analysis.predictedEngagementLossPoints.includes(segment.segmentIndex) && (
                      <p data-proof="engagement-loss-highlight" style={styles.lossPoint}>[飜きやすい箇所]</p>
                    )}
                  </div>
                ))}
              </div>
            </div>
          ) : (
            <p style={styles.resultPlaceholder}>再生ボタンを抌しお分析結果を衚瀺したす。</p>
          )}
        </div>
      </div>
    </div>
  );
}