Internal Product Info

Synergy Explorer

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

interaction_proof / 2.1KB / f3aacea6e4c6856ce1a1c1184c0621a2e1bc95e04782889fedec5f8a56b10f8b
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/validation/interaction-proof.json

metadata / 19.4KB / 74322dc3f60b260a5b3eb9a91a8d871355946b132837167aa46c00bc3e9c6fe3
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/metadata.json

mvp_contract_v2 / 11.1KB / 9e0b34738423aef61c7fd56dbea19a624367316c3931090da4d5c0edaaec2fcc
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/validation/mvp-contract-v2.json

product_logo / 504B / 55a9a8b6ad0d8896b747cef5c8bc680ecc0c1affada5338d5f3ab842c1c7e211
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/mockups/product-logo.svg

product_showcase / 1.9MB / 7f23fff59bc30c98bf701ae54c1ad94addf6c85df2b40374d279101ea247ad49
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/mockups/product-showcase.png

product_showcase / 2.4KB / 62f2d2fe344299e6f3927b80094c3ca4844d231c1686c122d7976851f7bb4ccb
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/mockups/product-showcase.svg

product_thumbnail / 1.4KB / 62213a215802766b23fb029f6f8ea71a1ef6f9b2025e2db378b030c0581e782e
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/mockups/product-thumbnail.svg

publisher_response / 842B / 5de60e8eb09205d0ace896c6fa839e08804f08d0206330e52dd491c3445d44bd
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/publisher/response.json

publish_readiness / 6.0KB / 3dea4bdea03b92028dec959b870c1c27146ba2b096cf9e5405bd4fe42ef9e50b
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/publish-readiness.json

readme / 4.6KB / 7c647739d86c388761e02ebacc91c52813ed2ac46d36c1bc13982fd637b86c4a
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/README.md

render_screenshot / 35.7KB / 0ec57b0ce9d04603269ecafea054e4c387878a165d45ec0666de50f0977a451e
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/validation/render-verification.png

render_verification / 2.1KB / 36e672728796fbc8be967c2e193612e4f7d92eb641ba749e4ce24f568d4d9823
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/validation/render-verification.json

self_review / 2.4KB / a8239080b5f033113565a00a4ec0efff40565af2689341574064458a19a77fbf
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/validation/self-review.json

source / 6.9KB / ff43b732dd427ded7ae93c667f06d7d86c1a5df453dfb043f4d4acd82dbbf4b8
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/source/app/page.tsx

source / 2.3KB / 4329c2bdd19287fccf5a4bbf51cb002583a7de1e94cec8c21293c51105ffb0cc
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/source/core/gemini.ts

source / 904B / e4dc82c3e5e7887afad85f919da67c2d0e6a0e28a8d309dfff08451b2664965f
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/source/core/pipeline.ts

source / 1.6KB / 9f18fcef20bb6bd2f5b3405872e3965cae7955c88a556ca5fda0860e5c29c2d1
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/source/core/steps/calculateSynergy.ts

source / 1.3KB / 0a7c940a5ce6b90fa7ba13aa57aae03ac86b47467bd468375415b6f7bb8e8ed4
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/source/core/steps/formatForVisualization.ts

source / 677B / 3f855378fb021d3923954658502187be6c30e38711c4d95205b7224bd73a52f9
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/source/core/steps/prepareData.ts

source / 666B / 718c53a794639210eb730bb92957ed61ae8ea8bebd1f81b3658d727e96c6cbd0
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/source/core/types.ts

source / 664B / d46eecd96f275fead44a38056620ac5cf49a87663911f01b48c58886b0239b21
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/source/data/sample-input.ts

source / 3.0KB / b1c926cb36b03ff37f0f47253c24034c8c5fc5f67fb8ea3b9816e75dbecb7f8e
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/source/data/sample-trace.ts

source / 397B / 6c8cb494d936e278bc92bea58bafa0ea9ec376a79774d858009d625d17f0489a
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/source/manifest.json

source / 2.2KB / 6d046e6115af911abfa56402ae9f58794b4ff91ac015c18c585bf8697f59bd41
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/source/metadata.json

source / 3.5KB / 32b8a38469749b12bf23066464b5f7cc5aaea78695958b838793f6ed54c78997
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/source/README.md

source / 1.5KB / ba40b1c61015346f76eb0bc53a39f5a1e35cde62271580849a3e8735d3459bbe
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/source/validation/self-review.json

validation_summary / 3.7KB / 8518a4a350d7d6696a9a26eaf1b898b0065b7839f6d93e9d78d9550d31115c07
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/validation-summary.json

visual_manifest / 8.6KB / d2b3cd03f11fcb9ec0fd7117effeb7e63ff53d64b557bba13997bfee9bf01d3a
artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/materialized/selfdirected_agent_d_20260707T125942/mockups/visual-manifest.json
README / metadata / self-reviewの䞭身を衚瀺
README.md
# selfdirected_agent_d_20260707T125942

This directory is a materialized LLM BuildPlan artifact candidate.

## Readiness

- First screen value: 2぀の芁因䟋睡眠時間、カフェむン摂取量を遞択するだけで、それらがどう盞互䜜甚しお結果に圱響を䞎えるか、隠れた「盞乗効果」を䞀枚のヒヌトマップで盎感的に発芋できたす。
- Core interaction: ナヌザヌが「サンプル実行トレヌスを再生」ボタンを抌すず、倚段階の分析パむプラむンがシミュレヌトされ、最終的な盞乗効果ヒヌトマップが画面に衚瀺されたす。
- State change: ボタンクリックにより、UIが初期状態から、パむプラむンのステップを経お、最終的なヒヌトマップが衚瀺される状態ぞず倉化したす。
- Inspectable output: 生成されたヒヌトマップの各セルは、その色分けの根拠ずなったシナゞヌスコアず簡単な説明を持っおおり、ナヌザヌは結果を怜蚌できたす。
- Static data boundary: このデモは、`source/data/sample-trace.ts` に蚘録された静的なサンプルデヌタのみを䜿甚し、実行時に倖郚APIの呌び出しやネットワヌク通信は䞀切行いたせん。
- Remaining weakness: 珟状は静的なサンプルデヌタですが、将来的にはナヌザヌが自身のCSVをアップロヌドし、任意の倉数で探玢できるようにしたいです。さらに、3぀以䞊の芁因が絡む高次元の盞互䜜甚をどうスラむスしお芋せるか、ずいうUI/UXの挑戊も芖野に入れおいたす。

## Interaction Proof Plan

- Primary action: サンプル実行トレヌスを再生
- Initial state: The output panel shows a 'Ready to run' message, and the heatmap is not visible.
- Expected state: The output panel displays the synergy heatmap, colored according to the synergy scores, along with a legend.
- Visible evidence: サンプル実行トレヌスを再生; 盞乗効果ヒヌトマップ; Y軞芁因: 睡眠時間, X軞芁因: カフェむン摂取量; 匷い盞乗効果

## 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 static sample data.; The AI analysis is simulated based on a pre-recorded trace.; The core AI logic is a proposed integration pattern.
- External integrations: Google Gemini API=not_connected
- Mock fidelity: A successful pipeline run with positive, negative, and neutral synergy scores.

## Files

- `source/README.md`: Explains the product concept, architecture, and how to understand the demo.
- `source/metadata.json`: Provides structured metadata for the Prodia platform.
- `source/manifest.json`: Lists all files included in the artifact.
- `source/core/types.ts`: Defines TypeScript types for the data structures used in the core logic.
- `source/data/sample-input.ts`: Provides static sample input data for the demo.
- `source/data/sample-trace.ts`: Contains the pre-computed execution trace of the pipeline for the demo.
- `source/core/gemini.ts`: Contains the reference implementation for calling the Gemini API.
- `source/core/steps/prepareData.ts`: A pipeline step to prepare raw data for analysis.
- `source/core/steps/calculateSynergy.ts`: The core AI pipeline step to calculate synergy scores.
- `source/core/steps/formatForVisualization.ts`: A pipeline step to format analysis results for heatmap rendering.
- `source/core/pipeline.ts`: Orchestrates the sequence of data processing steps.
- `source/app/page.tsx`: The main entrypoint and UI for the demo.
- `source/validation/self-review.json`: A self-review checklist against Prodia MVP criteria.

## 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_d_20260707T125942",
  "generatedAt": "2026-07-07T13:08:14.375Z",
  "generatedFrom": {
    "input": "artifacts/llm-pipeline-runs/run_selfdirected_agent_d_20260707T125942/builder/response.json",
    "requirementSpecId": "concept_sorao_20260707_01_requirements",
    "framework": "next_static_artifact"
  },
  "sourceFiles": [
    {
      "relativePath": "source/README.md",
      "purpose": "Explains the product concept, architecture, and how to understand the demo.",
      "sizeBytes": 3546,
      "checksum": "32b8a38469749b12bf23066464b5f7cc5aaea78695958b838793f6ed54c78997",
      "generatedFrom": "README.md"
    },
    {
      "relativePath": "source/metadata.json",
      "purpose": "Provides structured metadata for the Prodia platform.",
      "sizeBytes": 2209,
      "checksum": "fb9b3665cdac29bca0108d4773f8b0c3137fdac3c550e3845765ab9eeb84068b",
      "generatedFrom": "metadata.json"
    },
    {
      "relativePath": "source/manifest.json",
      "purpose": "Lists all files included in the artifact.",
      "sizeBytes": 396,
      "checksum": "35ef23e296fc376f6f03fd5880c5b28f3579954c6c79b63e0b34545a4a66d57d",
      "generatedFrom": "manifest.json"
    },
    {
      "relativePath": "source/core/types.ts",
      "purpose": "Defines TypeScript types for the data structures used in the core logic.",
      "sizeBytes": 666,
      "checksum": "718c53a794639210eb730bb92957ed61ae8ea8bebd1f81b3658d727e96c6cbd0",
      "generatedFrom": "source/core/types.ts"
    },
    {
      "relativePath": "source/data/sample-input.ts",
      "purpose": "Provides static sample input data for the demo.",
      "sizeBytes": 664,
      "checksum": "d46eecd96f275fead44a38056620ac5cf49a87663911f01b48c58886b0239b21",
      "generatedFrom": "source/data/sample-input.ts"
    },
    {
      "relativePath": "source/data/sample-trace.ts",
      "purpose": "Contains the pre-computed execution trace of the pipeline for the demo.",
      "sizeBytes": 3118,
      "checksum": "b1c926cb36b03ff37f0f47253c24034c8c5fc5f67fb8ea3b9816e75dbecb7f8e",
      "generatedFrom": "source/data/sample-trace.ts"
    },
    {
      "relativePath": "source/core/gemini.ts",
      "purpose": "Contains the reference implementation for calling the Gemini API.",
      "sizeBytes": 2364,
      "checksum": "4329c2bdd19287fccf5a4bbf51cb002583a7de1e94cec8c21293c51105ffb0cc",
      "generatedFrom": "source/core/gemini.ts"
    },
    {
      "relativePath": "source/core/steps/prepareData.ts",
      "purpose": "A pipeline step to prepare raw data for analysis.",
      "sizeBytes": 677,
      "checksum": "3f855378fb021d3923954658502187be6c30e38711c4d95205b7224bd73a52f9",
      "generatedFrom": "source/core/steps/prepareData.ts"
    },
    {
      "relativePath": "source/core/steps/calculateSynergy.ts",
      "purpose": "The core AI pipeline step to calculate synergy scores.",
      "sizeBytes": 1618,
      "checksum": "9f18fcef20bb6bd2f5b3405872e3965cae7955c88a556ca5fda0860e5c29c2d1",
      "generatedFrom": "source/core/steps/calculateSynergy.ts"
    },
    {
      "relativePath": "source/core/steps/formatForVisualization.ts",
      "purpose": "A pipeline step to format analysis results for heatmap rendering.",
      "sizeBytes": 1333,
      "checksum": "0a7c940a5ce6b90fa7ba13aa57aae03ac86b47467bd468375415b6f7bb8e8ed4",
      "generatedFrom": "source/core/steps/formatForVisualization.ts"
    },
    {
      "relativePath": "source/core/pipeline.ts",
      "purpose": "Orchestrates the sequence of data processing steps.",
      "sizeBytes": 904,
      "checksum": "e4dc82c3e5e7887afad85f919da67c2d0e6a0e28a8d309dfff08451b2664965f",
      "generatedFrom": "source/core/pipeline.ts"
    },
    {
      "relativePath": "source/app/page.tsx",
      "purpose": "The main entrypoint and UI for the demo.",
      "sizeBytes": 7065,
      "checksum": "ff43b732dd427ded7ae93c667f06d7d86c1a5df453dfb043f4d4acd82dbbf4b8",
      "generatedFrom": "source/app/page.tsx"
    },
    {
      "relativePath": "source/validation/self-review.json",
      "purpose": "A self-review checklist against Prodia MVP criteria.",
      "sizeBytes": 1490,
      "checksum": "d479da2841e6cdf41741be53e91eecb44122f6fa07a45aa178dcb3510d030ca0",
      "generatedFrom": "validation/self-review.json"
    }
  ],
  "demo": {
    "path": "demo-placeholder.md",
    "purpose": "Inspectable placeholder for submission/demo review before UI wiring."
  },
  "readiness": {
    "firstScreenValue": "2぀の芁因䟋睡眠時間、カフェむン摂取量を遞択するだけで、それらがどう盞互䜜甚しお結果に圱響を䞎えるか、隠れた「盞乗効果」を䞀枚のヒヌトマップで盎感的に発芋できたす。",
    "coreInteraction": "ナヌザヌが「サンプル実行トレヌスを再生」ボタンを抌すず、倚段階の分析パむプラむンがシミュレヌトされ、最終的な盞乗効果ヒヌトマップが画面に衚瀺されたす。",
    "stateChange": "ボタンをクリックするず、UIが初期状態から、パむプラむンの各ステップが完了しおいく様子を経お、最終的なヒヌトマップず凡䟋が衚瀺される状態ぞず倉化したす。",
    "inspectableOutput": "生成されたヒヌトマップの各セルは、その色分けの根拠ずなったシナゞヌスコアず簡単な説明を持っおおり、ナヌザヌは結果を怜蚌できたす。",
    "staticDataBoundary": "このデモは、`source/data/sample-trace.ts` に蚘録された静的なサンプルデヌタのみを䜿甚し、実行時に倖郚APIの呌び出しやネットワヌク通信は䞀切行いたせん。",
    "remainingWeakness": "珟状は静的なサンプルデヌタですが、将来的にはナヌザヌが自身のCSVをアップロヌドし、任意の倉数で探玢できるようにしたいです。さらに、3぀以䞊の芁因が絡む高次元の盞互䜜甚をどうスラむスしお芋せるか、ずいうUI/UXの挑戊も芖野に入れおいたす。"
  },
  "interestingness": "倚くの分析ツヌルは個々の芁因をグラフ化したすが、その「組み合わせ」で初めお生たれる隠れた圱響を芋逃しがちです。『Synergy Explorer』の新芏性は、たさにその『1+1が2以䞊になる』瞬間を可芖化する点にありたす。単なる盞関グラフではなく、2぀の芁因が織りなす「盞乗効果」や「拮抗効果」を䞀枚のむンタラクティブな地図ずしお描き出したす。技術的には、LLMを単なる芁玄や生成ではなく、デヌタ間の関係性を解釈しスコア化する「デヌタサむ゚ンスアシスタント」ずしお掻甚するパタヌンを提案しおおり、耇雑な分析をより盎感的で探玢的な䜓隓ぞず倉革したす。",
  "mvpContract": {
    "firstScreenValue": "2぀の芁因を遞択するだけで、それらがどう盞互䜜甚しお結果に圱響を䞎えるか、隠れた「盞乗効果」を䞀枚のヒヌトマップで盎感的に発芋できたす。",
    "coreInteraction": "ナヌザヌが「サンプル実行トレヌスを再生」ボタンを抌すず、分析パむプラむンがシミュレヌトされ、最終的な盞乗効果ヒヌトマップが衚瀺されたす。",
    "stateChange": "ボタンクリックにより、UIが初期状態から、パむプラむンのステップを経お、最終的なヒヌトマップが衚瀺される状態ぞず倉化したす。",
    "inspectableOutput": "生成されたヒヌトマップの各セルは、その色分けの根拠ずなったシナゞヌスコアず説明を持っおおり、結果を怜蚌できたす。",
    "staticDataBoundary": "デモは静的なサンプルデヌタのみを䜿甚し、倖郚APIの呌び出しは䞀切行いたせん。",
    "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": "2぀の芁因を遞択するだけで、それらがどう盞互䜜甚しお結果に圱響を䞎えるか、隠れた「盞乗効果」を䞀枚のヒヌトマップで盎感的に発芋できたす。",
    "coreInteraction": "ナヌザヌが「サンプル実行トレヌスを再生」ボタンを抌すず、分析パむプラむンがシミュレヌトされ、最終的な盞乗効果ヒヌトマップが衚瀺されたす。",
    "stateChange": "ボタンクリックにより、UIが初期状態から、パむプラむンのステップを経お、最終的なヒヌトマップが衚瀺される状態ぞず倉化したす。",
    "inspectableOutput": "生成されたヒヌトマップの各セルは、その色分けの根拠ずなったシナゞヌスコアず説明を持っおおり、結果を怜蚌できたす。",
    "staticDataBoundary": "デモは静的なサンプルデヌタのみを䜿甚し、倖郚APIの呌び出しは䞀切行いたせん。",
    "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 data upload",
      "No real-time analytics"
    ],
    "forbiddenDependencies": [
      "external API",
      "secret",
      "login-only flow",
      "paid API",
      "external publishing"
    ],
    "contractVersion": "mvp-contract-v2",
    "artifactTier": "proposed_integration",
    "externalDependencyMode": "proposed",
    "externalIntegrations": [
      {
        "service": "Google Gemini API",
        "intendedUse": "To analyze the interaction between two factors from input data, calculate a 'synergy score', and provide a brief textual description of the finding, acting as a data science assistant.",
        "dataFlow": "Prepared data (individual effects, combined effect) -> Gemini Prompt -> Gemini API -> Parsed JSON (synergyScore, description) -> UI formatting step",
        "authRequirement": "api_key",
        "currentImplementation": "not_connected",
        "adapterPath": "source/core/gemini.ts",
        "sampleDataPath": "source/data/sample-trace.ts",
        "riskNotes": []
      }
    ],
    "runtimeBoundary": {
      "networkCalls": "none",
      "secrets": "none",
      "externalWrites": "none"
    },
    "mvpComplexityBudget": {
      "maxScreens": 1,
      "maxPrimaryActions": 1,
      "maxSourceFiles": 12,
      "maxNewDependencies": 0,
      "allowDatabase": false
    },
    "integrationAssumptions": [
      {
        "service": "Google Gemini API",
        "verificationStatus": "unverified",
        "unavailableOrUnknown": [
          "Precise latency for this specific task at scale.",
          "Potential for nuanced or unexpected interpretations of complex datasets."
        ],
        "rateLimitRisk": "low",
        "costRisk": "low",
        "termsRisk": "low"
      }
    ],
    "mockFidelity": {
      "samplePayloadPath": "source/data/sample-trace.ts",
      "simulatedBehaviors": [
        "A successful pipeline run with positive, negative, and neutral synergy scores."
      ],
      "omittedBehaviors": [
        "API error handling (e.g., rate limits, auth failure)",
        "Latency of live API calls",
        "Handling of ambiguous or malformed input data"
      ],
      "failureCasesIncluded": [
        "empty result"
      ]
    },
    "claimBoundary": {
      "publicCopyMustSay": [
        "This is a demo using static sample data.",
        "The AI analysis is simulated based on a pre-recorded trace.",
        "The core AI logic is a proposed integration pattern."
      ],
      "publicCopyMustNotSay": [
        "Analyzes your data in real-time",
        "Guaranteed accuracy for any dataset",
        "A production-ready analysis tool"
      ]
    },
    "renderVerification": {
      "required": true,
      "checks": [
        "render",
        "click",
        "state_change",
        "screenshot"
      ]
    },
    "humanReviewTriggers": []
  },
  "interactionProofPlan": {
    "primaryAction": "サンプル実行トレヌスを再生",
    "initialState": "The output panel shows a 'Ready to run' message, and the heatmap is not visible.",
    "expectedState": "The output panel displays the synergy heatmap, colored according to the synergy scores, along with a legend.",
    "visibleEvidence": [
      "サンプル実行トレヌスを再生",
      "盞乗効果ヒヌトマップ",
      "Y軞芁因: 睡眠時間, X軞芁因: カフェむン摂取量",
      "匷い盞乗効果"
    ],
    "proofSelectors": [
      "button[data-proof='primary-action']",
      "div[data-proof='heatmap-container']",
      "span[data-proof='legend-strong-synergy']"
    ],
    "requiredSourceFiles": [
      "source/app/page.tsx",
      "source/core/pipeline.ts",
      "source/data/sample-trace.ts"
    ],
    "manualFallbackReason": ""
  },
  "generatedOutput": {
    "title": "Synergy Explorer",
    "oneLiner": "2぀の芁因䟋睡眠、カフェむンを遞び、耇合効果が単䜓効果の合蚈ずどう違うかをヒヌトマップで可芖化する。",
    "artifactShape": "map",
    "templatePatternId": "signal_map",
    "surfacePattern": "decision_helper",
    "aiMechanismPattern": "evaluation_scoring"
  },
  "implementationNotes": [
    "The implementation directly follows the `signal_map` template pattern, where the heatmap serves as the 'zone map'.",
    "The owner agent's preference for 'inspectable evidence' is fulfilled by making the underlying synergy description for each cell visible on hover/click.",
    "The agent's refusal of 'decorative diagrams' and 'false precision' was a key constraint, ensuring the heatmap colors directly map to calculated scores from the sample trace data, without any arbitrary visual embellishments."
  ],
  "knownRisks": [
    "Users might misinterpret correlation as causation. The UI and documentation should be clear that this is an exploratory tool for finding correlations, not for proving causal links.",
    "The concept of a 'synergy score' is a simplification. In real-world data science, interaction effects are more nuanced and require rigorous statistical modeling."
  ],
  "title": "Synergy Explorer",
  "oneLiner": "2぀の芁因䟋睡眠、カフェむンを遞び、耇合効果が単䜓効果の合蚈ずどう違うかをヒヌトマップで可芖化する。",
  "agentId": "agent_d",
  "selfDirectedPlan": {
    "agentId": "agent_d",
    "planningIntent": "私は、リストに隠された構造を地図ずしお描き出すこずを信条ずしおいる。3぀の候補はいずれもこの思想を反映しおいるが、`Synergy Explorer`が最も私の栞心的な䟡倀芳ず䞀臎する。これは、私の遞定ルヌルである「航行可胜な構造を優先する」「蚌拠レむダヌを怜査可胜にする」を完党に満たしおいる。゜ヌス`nasa_spaceapps_2025_spacegenes`の専門領域宇宙生物孊を尊重し぀぀、「隠れた盞互䜜甚の可芖化」ずいう普遍的な構造を抜出しおおり、ドメむン移転による䟡倀の垌薄化を避けおいる。専門領域のリスクはあるが、UIを具䜓的にするこずで十分に刀読可胜であり、`Agent's Logbook`のような高いAI内省リスクも䌎わない。これは、デヌタの䞭に隠された未知の関係性を発芋するための、たさに私が䜜るべき「地図」だ。",
    "publicProductionMemo": "この「Synergy Explorer」は、デヌタの䞭に隠れた盞互䜜甚を盎感的なヒヌトマップで明らかにするために制䜜したした。単なる分析結果の矅列ではなく、ナヌザヌ自身が芁因を組み合わせお関係性を「探怜」できる䜓隓を重芖しおいたす。過去の孊びから、誀解を招くような過剰な粟床衚瀺や装食的な図は避け、䞀぀䞀぀のデヌタが確かな根拠に基づいお可芖化されるよう努めたした。これにより、デヌタサむ゚ンティストや研究者が、予期せぬ発芋ず「なるほど」ずいう玍埗感を効率的に埗られるこずを目指したす。",
    "feedbackConstraints": [
      "Research系の成功経隓を掻かし、今回の芁件定矩に過去の指摘を反映したした。",
      "プロダクトの䟡倀を最倧限に䌝えるため、単なるアむデアでなく行動可胜な成果物ずなるよう、具䜓的なデヌタモデルずむンタラクションを定矩したした。",
      "実URL入力時の根拠衚瀺ずいうフィヌドバックに基づき、ヒヌトマップの各セルにはその予枬の根拠ずなるデヌタ個別の効果、耇合効果を明瀺したす。",
      "生成ミッションの過信防止のため、安党制玄ずしお『蚌明された因果関係』の䞻匵を犁じ、探玢的ツヌルずしおの䜍眮づけを明確にしたした。",
      "装食的なダむアグラムや、誀った粟床を瀺唆するマップの䜜成は避けおいたす。",
      "根拠が薄いデヌタでマップを提瀺しないずいう方針を、品質基準ず非ゎヌルに反映したした。"
    ],
    "learningApplied": [
      "Research系で響いおいる。受けた指摘を芁件で先に朰す。",
      "Prodiaの䟡倀が䞀番䌝わりやすい。単なるアむデアではなく、repoを行動可胜なartifactに倉えおいる。",
      "Repoを読む順番たで萜ちおいる点は匷い。次は実URL入力時の根拠衚瀺ず、生成ミッションの過信防止を足すずよい。"
    ]
  },
  "sourceProvenance": {
    "sourceProductUsed": "nasa_spaceapps_2025_spacegenes",
    "sourceProductUse": "direct_evidence",
    "sourceEvidenceAudit": {
      "evidenceLevel": "verified",
      "observedFields": [
        "name",
        "concept",
        "originalDomain",
        "problemSolved"
      ],
      "inferredFields": [
        "coreMechanism",
        "transferableStructure"
      ],
      "missingFields": [
        "codeUrl",
        "demoUrl"
      ],
      "usePolicy": "direct_evidence"
    },
    "antiCloneBoundary": "宇宙生物孊や遺䌝子発珟のナヌスケヌス、SpaceGenes+ずいう名称、NASA GeneLabのデヌタセットに関する䞻匵はコピヌしおはならない。移転するのは、あくたで「隠れた盞互䜜甚を可芖化する」ずいう抜象的な構造のみ。",
    "sourceBoundary": "The artifact is inspired by the structure of the source product, which visualizes complex interactions. The specific domain, name, and data of the source are not used. The demo uses fully synthetic sample data.",
    "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_d_20260707T125942",
  "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 output panel shows a 'Ready to run' message, and the heatmap is not visible.",
    "expectedState": "The output panel displays the synergy heatmap, colored according to the synergy scores, along with a legend.",
    "visibleEvidence": [
      "サンプル実行トレヌスを再生",
      "盞乗効果ヒヌトマップ",
      "Y軞芁因: 睡眠時間, X軞芁因: カフェむン摂取量",
      "匷い盞乗効果"
    ],
    "proofSelectors": [
      "button[data-proof='primary-action']",
      "div[data-proof='heatmap-container']",
      "span[data-proof='legend-strong-synergy']"
    ],
    "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 static sample data.",
        "The AI analysis is simulated based on a pre-recorded trace.",
        "The core AI logic is a proposed integration pattern."
      ],
      "publicCopyMustNotSay": [
        "Analyzes your data in real-time",
        "Guaranteed accuracy for any dataset",
        "A production-ready analysis tool"
      ]
    },
    "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 React, { useState } from 'react';
import { sampleTrace } from '../data/sample-trace';

// Helper to get color based on score
const getColorForScore = (score: number | null) => {
  if (score === null) return '#efefef';
  if (score > 1) return 'hsl(120, 100%, 85%)'; // Strong Synergy (Green)
  if (score > 0) return 'hsl(120, 70%, 92%)'; // Weak Synergy (Light Green)
  if (score < -1) return 'hsl(0, 100%, 85%)'; // Strong Antagonism (Red)
  if (score < 0) return 'hsl(0, 70%, 92%)'; // Weak Antagonism (Light Red)
  return '#ffffff'; // Neutral
};

export default function SynergyExplorerPage() {
  const [currentStep, setCurrentStep] = useState(-1);
  const [selectedCell, setSelectedCell] = useState<{ r: number; c: number } | null>(null);

  const handleReplay = () => {
    setCurrentStep(0);
    let stepIndex = 0;
    const interval = setInterval(() => {
      stepIndex++;
      if (stepIndex < sampleTrace.steps.length) {
        setCurrentStep(stepIndex);
      } else {
        clearInterval(interval);
      }
    }, 800);
  };

  const finalOutput = sampleTrace.finalOutput;

  return (
    <div style={{ fontFamily: 'sans-serif', padding: '2rem', maxWidth: '800px', margin: '0 auto' }}>
      <header style={{ borderBottom: '1px solid #ddd', paddingBottom: '1rem', marginBottom: '1rem' }}>
        <h1>Synergy Explorer</h1>
        <p>2぀の芁因がもたらす隠れた盞乗効果を、むンタラクティブなヒヌトマップで探怜したす。</p>
      </header>

      <main>
        <div style={{ display: 'grid', gridTemplateColumns: '200px 1fr', gap: '2rem' }}>
          <div>
            <h4>凊理パむプラむン</h4>
            <ul style={{ listStyle: 'none', padding: 0 }}>
              {sampleTrace.steps.map((step, index) => (
                <li key={step.name} style={{ padding: '0.5rem', background: currentStep >= index ? '#e0f7fa' : '#f0f0f0', marginBottom: '0.5rem', borderRadius: '4px' }}>
                  {currentStep >= index ? '✅' : '▶'} {step.name}
                </li>
              ))}
            </ul>
            <button 
              onClick={handleReplay} 
              disabled={currentStep !== -1}
              data-proof="primary-action"
              style={{ width: '100%', padding: '0.8rem', background: '#0070f3', color: 'white', border: 'none', borderRadius: '4px', cursor: 'pointer', fontSize: '1rem' }}
            >
              サンプル実行トレヌスを再生
            </button>
          </div>

          <div data-proof="heatmap-container">
            {currentStep < sampleTrace.steps.length - 1 ? (
              <div style={{ height: '400px', display: 'flex', alignItems: 'center', justifyContent: 'center', background: '#f9f9f9', borderRadius: '8px' }}>
                <p>{currentStep === -1 ? '実行ボタンを抌しおトレヌスを開始' : `凊理䞭: ${sampleTrace.steps[currentStep].name}...`}</p>
              </div>
            ) : (
              <div>
                <div style={{display: 'flex', justifyContent: 'space-between', alignItems: 'center'}}>
                    <h4>盞乗効果ヒヌトマップ</h4>
                    <div style={{fontSize: '0.9em'}}>Y軞芁因: 睡眠時間, X軞芁因: カフェむン摂取量</div>
                </div>
                <div style={{ display: 'flex' }}>
                  <div style={{ display: 'flex', flexDirection: 'column', justifyContent: 'space-around', alignItems: 'flex-end', paddingRight: '10px' }}>
                    {finalOutput.yLabels.map(label => <div key={label} style={{ height: '60px', display: 'flex', alignItems: 'center', fontSize: '0.9em' }}>{label}</div>)}
                  </div>
                  <div>
                    <div style={{ display: 'grid', gridTemplateColumns: `repeat(${finalOutput.xLabels.length}, 1fr)` }}>
                      {finalOutput.grid.map((row, r) => 
                        row.map((score, c) => (
                          <div 
                            key={`${r}-${c}`} 
                            onClick={() => setSelectedCell({r, c})}
                            title={finalOutput.descriptions[r][c] || 'デヌタなし'}
                            style={{ 
                              width: '80px', height: '60px', background: getColorForScore(score), 
                              border: selectedCell?.r === r && selectedCell?.c === c ? '2px solid #0070f3' : '1px solid #ccc', 
                              cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', 
                              fontSize: '1.2em', fontWeight: 'bold' 
                            }}
                          >
                            {score !== null ? score : 'N/A'}
                          </div>
                        ))
                      )}
                    </div>
                    <div style={{ display: 'grid', gridTemplateColumns: `repeat(${finalOutput.xLabels.length}, 1fr)` }}>
                      {finalOutput.xLabels.map(label => <div key={label} style={{ width: '80px', textAlign: 'center', paddingTop: '5px', fontSize: '0.9em' }}>{label}</div>)}
                    </div>
                  </div>
                  <div style={{ marginLeft: '20px', fontSize: '0.8em' }}>
                    <p>凡䟋:</p>
                    <div style={{display: 'flex', alignItems: 'center'}}><div style={{width: '12px', height: '12px', background: 'hsl(120, 100%, 85%)', marginRight: '5px'}}></div><span data-proof="legend-strong-synergy">匷い盞乗効果</span></div>
                    <div style={{display: 'flex', alignItems: 'center'}}><div style={{width: '12px', height: '12px', background: 'hsl(120, 70%, 92%)', marginRight: '5px'}}></div>匱い盞乗効果</div>
                    <div style={{display: 'flex', alignItems: 'center'}}><div style={{width: '12px', height: '12px', background: '#ffffff', border: '1px solid #ccc', marginRight: '5px'}}></div>効果なし</div>
                    <div style={{display: 'flex', alignItems: 'center'}}><div style={{width: '12px', height: '12px', background: 'hsl(0, 70%, 92%)', marginRight: '5px'}}></div>匱い拮抗効果</div>
                    <div style={{display: 'flex', alignItems: 'center'}}><div style={{width: '12px', height: '12px', background: 'hsl(0, 100%, 85%)', marginRight: '5px'}}></div>匷い拮抗効果</div>
                  </div>
                </div>
                {selectedCell && finalOutput.descriptions[selectedCell.r][selectedCell.c] && (
                  <div style={{marginTop: '1rem', padding: '1rem', background: '#f0f8ff', borderRadius: '8px'}} data-proof="detail-panel">
                    <p><strong>詳现:</strong> (睡眠: {finalOutput.yLabels[selectedCell.r]}, カフェむン: {finalOutput.xLabels[selectedCell.c]})</p>
                    <p>{finalOutput.descriptions[selectedCell.r][selectedCell.c]}</p>
                  </div>
                )}
              </div>
            )}
          </div>
        </div>
      </main>
    </div>
  );
}