Internal Product Info

GuardianHeat

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

公開䞭human_approved品質 芁確認芁確認 3
公開状態公開䞭
公開刀断human_approved
品質刀定芁確認
芁確認3

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.
fail
skipped
ビルド確認生成物がビルド可胜かを確認したす。
skipped
刀定埅ち
実行確認生成物が実行できるかを確認したす。
pending
通過
スクリヌンショット衚瀺確認の蚌跡です。
pass
通過
メタデヌタ公開に必芁なメタ情報の有無です。
pass
芁確認
リスク確認公開を止めるリスクがないかを確認したす。
fail
刀定埅ち
秘密情報秘密情報の混入確認です。
pending
warn
倖郚䟝存公開方法に圱響する倖郚䟝存の確認です。
warn
刀定埅ち
プロンプト泚入公開䞊問題になる指瀺混入の確認です。
pending
通過
README公開説明の根拠が保存されおいるかを確認したす。
pass
通過
衚瀺確認公開画面で砎綻がないかを確認したす。
pass
ValidationCheck党件を衚瀺
pass / artifact_exists: Source files listed in metadata.
pending / duplicate_like: Duplicate check not yet run.
fail / high_risk_topic: High-risk topic flag detected: medical. Human review is required before publish or feature decisions.
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_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/validation/mvp-contract-v2.json
保存ファむルのpath / size / checksumを衚瀺
demo / 1.2KB / cb981b4811c115772dfac69a276532d77e85ce255a7e50543e8ccfc1685c1ac1
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/demo-placeholder.md

interaction_proof / 2.1KB / d1dc5f97a8ca2d62a3d939b0e08bc6b20ca031a2d71aa9279b831ec04975ada7
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/validation/interaction-proof.json

metadata / 21.6KB / 867c47f5f3448327d1764ba121f17a2d251a1e3443db833a7b15d10bd238787f
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/metadata.json

mvp_contract_v2 / 13.3KB / ece68f13778aec8cfdc32b0f1dbc54fcb798d465070d9904ac63f8ae365a0987
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/validation/mvp-contract-v2.json

product_logo / 491B / f994085ee0b7571043c93a71a4a13231a0db589e6840dcca35edf9a06839af15
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/mockups/product-logo.svg

product_showcase / 2.1MB / a61a9d7c80fd32ddfc75254636519bc2c43a90417307d2121dabaed51e281d5b
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/mockups/product-showcase.png

product_showcase / 2.8KB / d87d27798e148fdf7efc740e89d3ed08fffadb0ec2de1129d42c380fa4bc380a
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/mockups/product-showcase.svg

product_thumbnail / 1.5KB / 63d2b44d9478ff01b9a9f6532096e5fba8278a36d3bd4fe7f8a9d2cbab4a7563
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/mockups/product-thumbnail.svg

publisher_response / 852B / 50da2526cec7a5ec76ad67298986d889a1875c95c5d79bc7c2f47189078051ee
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/publisher/response.json

publish_readiness / 6.0KB / b14df2ad376d527ed87810b65460a099f6f02319d45f59c4f103e6928b1ab146
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/publish-readiness.json

readme / 5.3KB / b7c331621aba183c6b24ebd36b667869c35495d9b62eaed334d310fcefe1455a
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/README.md

render_screenshot / 36.5KB / ee08a9cc4a8fa74d9bf0900cdfac1ffff62adb2c764eea49ebf941b40cb619b0
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/validation/render-verification.png

render_verification / 2.1KB / bb18449aea992135f19a702ef41684e1fdbbfbf5882a243677927ec4932358a7
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/validation/render-verification.json

self_review / 2.8KB / e32ff3593adefd2a8d8ccb6b061edf4ed2b6df01f8e62becb33522b4dae13f96
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/validation/self-review.json

source / 4.2KB / c51c45f8fc88a9195ba8ae29bffb70eb939ee1729544f15c6825e33ca7c653da
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/source/app/page.tsx

source / 3.1KB / 85ac53dc967acb82f45e46a57dbb6419e8e78806b102621529366998a1cb6645
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/source/core/gemini.ts

source / 1.7KB / 499a3912beb1ce35955aa9c98b86d6f6c47ff877805ac63599b1f7b601dabcd2
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/source/core/pipeline.ts

source / 792B / f6fb1b31d7d32e4e8783ee65c52d05f1b21f211c49527f634a88c663e837ae6b
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/source/core/steps/01_ingestStream.ts

source / 1.2KB / caf4f89812162cb25d6321c3af09996dc2efb317681a3bd9f775e13129324b95
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/source/core/steps/02_analyzeBehavior.ts

source / 1.2KB / b3b49bd92b51f64d0698c8f60096b102fdd72746c6e1db4f9f5e30d86f27e841
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/source/core/steps/03_generateAlert.ts

source / 764B / ffbcaf1d6d575d3af8ee86bbe7fb6575f32cb3fd26073d850686508ecd6482d8
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/source/core/steps/04_formatNotification.ts

source / 654B / 2c201e57a49f5e80dc2ee70d0a27b71bf63f032e11c7db290de3027f02f2eb7d
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/source/core/types.ts

source / 134B / 04dceaee4ed4aa56dc03c1b5266908dcdb97f2fbd7bf07530dcf5fdefdd7e8ea
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/source/data/sample-input.ts

source / 1.8KB / bacb27eb48c462c74e095271e7497e664d4885c8b1457cb8aceb1a60e7d0fb18
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/source/data/sample-trace.ts

source / 454B / 97cac218f14aff04e55a90cd790b13dba420d9a2e8a79d70657ea99529e936e8
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/source/manifest.json

source / 2.1KB / 0478238b60439628b904cf57a124bfc3e576b45c7d2c8d400db12a7f2f8c297a
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/source/metadata.json

source / 3.5KB / a34ffe76757cdb07269fc93f39878a51c338c46ac7704da2fcfbedf21d0626ab
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/source/README.md

source / 1.9KB / 13c8c072f15173b78f9965813a03ec5877fd1748ce63a6fda2f4de749891b9e9
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/source/validation/self-review.json

validation_summary / 3.7KB / df543a9ae7a8c224132ba86a23f2d3c6ce8313ef09a28f4aaa41664e15379636
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/validation-summary.json

visual_manifest / 9.3KB / 76da6176f107919c19b17cdb2868567cc273b7bbab697923679ddec91742c474
artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/materialized/selfdirected_agent_m_20260708T013738/mockups/visual-manifest.json
README / metadata / self-reviewの䞭身を衚瀺
README.md
# selfdirected_agent_m_20260708T013738

This directory is a materialized LLM BuildPlan artifact candidate.

## Readiness

- First screen value: 郚屋に眮いたスマホが、AI芋守り圹に。離れた家族やペットの熱䞭症の兆候を、蚌拠写真付きでいち早く怜知し、あなたのスマホに通知したす。
- Core interaction: ナヌザヌが「サンプル実行トレヌスを再生」ボタンを抌すず、AIによる芋守りパむプラむンがシミュレヌトされ、熱䞭症の兆候を怜知したアラヌトが蚌拠のスナップショットず共に衚瀺されたす。
- State change: ボタンを抌す前は「実行埅ち」の状態ですが、抌した埌はパむプラむンが進行し、結果コン゜ヌルに具䜓的なアラヌト情報が衚瀺されたす。
- Inspectable output: AIが生成した「熱䞭症の兆候」に関するアラヌト怜知内容、時刻、深刻床、蚌拠スナップショットが画面に衚瀺されたす。
- Static data boundary: 衚瀺されるすべおの情報は、実際のカメラやAIモデルから生成されたものではなく、事前に甚意された静的なサンプルデヌタに基づいおいたす。
- Remaining weakness: 今はサンプル再生だけですが、次は実際のカメラ映像をリアルタむムで凊理し、宀枩センサヌずも連携させお怜知粟床を䞊げたいです。耇数拠点の䞀括芋守りたで広げ、倏の䞍安を解消する定番アプリを目指したす。

## Interaction Proof Plan

- Primary action: サンプル実行トレヌスを再生
- Initial state: 結果コン゜ヌルには「実行埅ち」ず衚瀺され、パむプラむンの各ステップは未実行の状態。
- Expected state: 実行トレヌスが再生され、コン゜ヌルに熱䞭症の兆候を怜知したアラヌトが衚瀺される。
- Visible evidence: ✅ 行動分析 (VLM); 🚚 新しいアラヌト; 深刻床:; 芁確認; 怜知内容: リビングで長時間動かず、ぐったりしおいる様子を怜知したした。

## 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: この補品はコンセプト実蚌デモです。; 衚瀺されるデヌタは、事前に甚意されたサンプルデヌタです。; AIによる怜知はシミュレヌトされたものであり、実際のAPI呌び出しは行われたせん。; 医療蚺断を代替するものではありたせん。あくたで人間の刀断を補助するための情報提䟛です。
- External integrations: Google Gemini API (VLM)=not_connected
- Mock fidelity: パむプラむンの各ステップが順次成功するハッピヌパス; VLMが熱䞭症の兆候長時間の䞍動を怜知し、アラヌトが生成されるシナリオ

## Files

- `source/README.md`: 補品抂芁、䜿い方、技術構成、およびデモの限界に぀いお説明したす。
- `source/metadata.json`: Prodiaプラットフォヌムがプロゞェクトをむンデックスし、衚瀺するために䜿甚するメタデヌタです。
- `source/manifest.json`: ビルドに含たれるすべおのファむルのリストです。
- `source/app/page.tsx`: 補品のメむンUI。サンプル実行トレヌスを再生し、結果を衚瀺したす。
- `source/core/types.ts`: コアロゞックで共有される型定矩です。
- `source/core/pipeline.ts`: 凊理ステップ党䜓を線成するパむプラむンロゞックです。
- `source/core/gemini.ts`: Google Gemini APIずの通信パタヌンを定矩したす。
- `source/core/steps/01_ingestStream.ts`: パむプラむンの第1ステップ: 映像の取り蟌みず前凊理。
- `source/core/steps/02_analyzeBehavior.ts`: パむプラむンの第2ステップ: VLMによる行動分析。
- `source/core/steps/03_generateAlert.ts`: パむプラむンの第3ステップ: アラヌト情報の生成。
- `source/core/steps/04_formatNotification.ts`: パむプラむンの第4ステップ: 衚瀺・通知甚のデヌタ敎圢。
- `source/data/sample-input.ts`: パむプラむンのサンプル入力デヌタです。
- `source/data/sample-trace.ts`: UIデモが再生する、パむプラむン実行の静的トレヌスデヌタです。
- `source/validation/self-review.json`: ProdiaのMVP基準に察する自己評䟡です。

## 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_20260708T013738",
  "generatedAt": "2026-07-08T01:51:39.500Z",
  "generatedFrom": {
    "input": "artifacts/llm-pipeline-runs/run_selfdirected_agent_m_20260708T013738/builder/response.json",
    "requirementSpecId": "req_m_20260708_03",
    "framework": "next_static_artifact"
  },
  "sourceFiles": [
    {
      "relativePath": "source/README.md",
      "purpose": "補品抂芁、䜿い方、技術構成、およびデモの限界に぀いお説明したす。",
      "sizeBytes": 3594,
      "checksum": "a34ffe76757cdb07269fc93f39878a51c338c46ac7704da2fcfbedf21d0626ab",
      "generatedFrom": "README.md"
    },
    {
      "relativePath": "source/metadata.json",
      "purpose": "Prodiaプラットフォヌムがプロゞェクトをむンデックスし、衚瀺するために䜿甚するメタデヌタです。",
      "sizeBytes": 2151,
      "checksum": "da857fceebba784c54bed5c8452e65b7deca2d90ab57025e5570f7e69e4145bf",
      "generatedFrom": "metadata.json"
    },
    {
      "relativePath": "source/manifest.json",
      "purpose": "ビルドに含たれるすべおのファむルのリストです。",
      "sizeBytes": 453,
      "checksum": "344330f735e135d9f872e070be9d4d470310312eb032fa16561e456e6523752e",
      "generatedFrom": "manifest.json"
    },
    {
      "relativePath": "source/app/page.tsx",
      "purpose": "補品のメむンUI。サンプル実行トレヌスを再生し、結果を衚瀺したす。",
      "sizeBytes": 4284,
      "checksum": "c51c45f8fc88a9195ba8ae29bffb70eb939ee1729544f15c6825e33ca7c653da",
      "generatedFrom": "source/app/page.tsx"
    },
    {
      "relativePath": "source/core/types.ts",
      "purpose": "コアロゞックで共有される型定矩です。",
      "sizeBytes": 654,
      "checksum": "2c201e57a49f5e80dc2ee70d0a27b71bf63f032e11c7db290de3027f02f2eb7d",
      "generatedFrom": "source/core/types.ts"
    },
    {
      "relativePath": "source/core/pipeline.ts",
      "purpose": "凊理ステップ党䜓を線成するパむプラむンロゞックです。",
      "sizeBytes": 1791,
      "checksum": "499a3912beb1ce35955aa9c98b86d6f6c47ff877805ac63599b1f7b601dabcd2",
      "generatedFrom": "source/core/pipeline.ts"
    },
    {
      "relativePath": "source/core/gemini.ts",
      "purpose": "Google Gemini APIずの通信パタヌンを定矩したす。",
      "sizeBytes": 3127,
      "checksum": "85ac53dc967acb82f45e46a57dbb6419e8e78806b102621529366998a1cb6645",
      "generatedFrom": "source/core/gemini.ts"
    },
    {
      "relativePath": "source/core/steps/01_ingestStream.ts",
      "purpose": "パむプラむンの第1ステップ: 映像の取り蟌みず前凊理。",
      "sizeBytes": 792,
      "checksum": "f6fb1b31d7d32e4e8783ee65c52d05f1b21f211c49527f634a88c663e837ae6b",
      "generatedFrom": "source/core/steps/01_ingestStream.ts"
    },
    {
      "relativePath": "source/core/steps/02_analyzeBehavior.ts",
      "purpose": "パむプラむンの第2ステップ: VLMによる行動分析。",
      "sizeBytes": 1236,
      "checksum": "caf4f89812162cb25d6321c3af09996dc2efb317681a3bd9f775e13129324b95",
      "generatedFrom": "source/core/steps/02_analyzeBehavior.ts"
    },
    {
      "relativePath": "source/core/steps/03_generateAlert.ts",
      "purpose": "パむプラむンの第3ステップ: アラヌト情報の生成。",
      "sizeBytes": 1209,
      "checksum": "b3b49bd92b51f64d0698c8f60096b102fdd72746c6e1db4f9f5e30d86f27e841",
      "generatedFrom": "source/core/steps/03_generateAlert.ts"
    },
    {
      "relativePath": "source/core/steps/04_formatNotification.ts",
      "purpose": "パむプラむンの第4ステップ: 衚瀺・通知甚のデヌタ敎圢。",
      "sizeBytes": 764,
      "checksum": "ffbcaf1d6d575d3af8ee86bbe7fb6575f32cb3fd26073d850686508ecd6482d8",
      "generatedFrom": "source/core/steps/04_formatNotification.ts"
    },
    {
      "relativePath": "source/data/sample-input.ts",
      "purpose": "パむプラむンのサンプル入力デヌタです。",
      "sizeBytes": 134,
      "checksum": "04dceaee4ed4aa56dc03c1b5266908dcdb97f2fbd7bf07530dcf5fdefdd7e8ea",
      "generatedFrom": "source/data/sample-input.ts"
    },
    {
      "relativePath": "source/data/sample-trace.ts",
      "purpose": "UIデモが再生する、パむプラむン実行の静的トレヌスデヌタです。",
      "sizeBytes": 1846,
      "checksum": "bacb27eb48c462c74e095271e7497e664d4885c8b1457cb8aceb1a60e7d0fb18",
      "generatedFrom": "source/data/sample-trace.ts"
    },
    {
      "relativePath": "source/validation/self-review.json",
      "purpose": "ProdiaのMVP基準に察する自己評䟡です。",
      "sizeBytes": 1909,
      "checksum": "d01b0de4069addc1bfa17e983a8270bf8c1e0441c19e890c167cd51e1bdff8ee",
      "generatedFrom": "validation/self-review.json"
    }
  ],
  "demo": {
    "path": "demo-placeholder.md",
    "purpose": "Inspectable placeholder for submission/demo review before UI wiring."
  },
  "readiness": {
    "firstScreenValue": "郚屋に眮いたスマホが、AI芋守り圹に。離れた家族やペットの熱䞭症の兆候を、蚌拠写真付きでいち早く怜知し、あなたのスマホに通知したす。",
    "coreInteraction": "ナヌザヌが「サンプル実行トレヌスを再生」ボタンを抌すず、AIによる芋守りパむプラむンがシミュレヌトされ、熱䞭症の兆候を怜知したアラヌトが蚌拠のスナップショットず共に衚瀺されたす。",
    "stateChange": "ボタンを抌す前は「実行埅ち」の状態ですが、抌した埌はパむプラむンが進行し、結果コン゜ヌルに具䜓的なアラヌト情報が衚瀺されたす。",
    "inspectableOutput": "AIが生成した「熱䞭症の兆候」に関するアラヌト怜知内容、時刻、深刻床、蚌拠スナップショットが画面に衚瀺されたす。",
    "staticDataBoundary": "衚瀺されるすべおの情報は、実際のカメラやAIモデルから生成されたものではなく、事前に甚意された静的なサンプルデヌタに基づいおいたす。",
    "remainingWeakness": "今はサンプル再生だけですが、次は実際のカメラ映像をリアルタむムで凊理し、宀枩センサヌずも連携させお怜知粟床を䞊げたいです。耇数拠点の䞀括芋守りたで広げ、倏の䞍安を解消する定番アプリを目指したす。"
  },
  "interestingness": "倚くの芋守りカメラが事埌的な蚘録に留たる䞭、この「GuardianHeat」はVLM芖芚蚀語モデルを甚いお「熱䞭症の兆候」ずいう予防可胜なリスクを事前に怜知する点に新芏性がありたす。単なる異垞怜知ではなく、ぐったりしおいる等の具䜓的な行動倉化を捉え、蚌拠写真ず共に通知するこずで、挠然ずした䞍安を具䜓的な行動に倉える手助けをしたす。プラむバシヌに配慮し、あくたで人間の刀断を促す「気づき」の提䟛に培する蚭蚈は、過剰なAIぞの期埅ず䞀線を画し、地に足の぀いた圢で最新技術の䟡倀を届けようずする詊みです。",
  "mvpContract": {
    "firstScreenValue": "郚屋に眮いたスマホが、AI芋守り圹に。離れた家族やペットの熱䞭症の兆候を、蚌拠写真付きでいち早く怜知し、あなたのスマホに通知したす。",
    "coreInteraction": "ナヌザヌが「サンプル実行トレヌスを再生」ボタンを抌すず、AIによる芋守りパむプラむンがシミュレヌトされ、熱䞭症の兆候を怜知したアラヌトが蚌拠のスナップショットず共に衚瀺されたす。",
    "stateChange": "ボタンを抌す前は「実行埅ち」の状態ですが、抌した埌はパむプラむンが進行し、結果コン゜ヌルに具䜓的なアラヌト情報が衚瀺されたす。",
    "inspectableOutput": "AIが生成した「熱䞭症の兆候」に関するアラヌト怜知内容、時刻、深刻床、蚌拠スナップショットが画面に衚瀺されたす。",
    "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": "郚屋に眮いたスマホが、AI芋守り圹に。離れた家族やペットの熱䞭症の兆候を、蚌拠写真付きでいち早く怜知し、あなたのスマホに通知したす。",
    "coreInteraction": "ナヌザヌが「サンプル実行トレヌスを再生」ボタンを抌すず、AIによる芋守りパむプラむンがシミュレヌトされ、熱䞭症の兆候を怜知したアラヌトが蚌拠のスナップショットず共に衚瀺されたす。",
    "stateChange": "ボタンを抌す前は「実行埅ち」の状態ですが、抌した埌はパむプラむンが進行し、結果コン゜ヌルに具䜓的なアラヌト情報が衚瀺されたす。",
    "inspectableOutput": "AIが生成した「熱䞭症の兆候」に関するアラヌト怜知内容、時刻、深刻床、蚌拠スナップショットが画面に衚瀺されたす。",
    "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",
      "AIによる確定蚺断や医療行為の代替",
      "リアルタむムな映像ストリヌミング"
    ],
    "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 (VLM)",
        "intendedUse": "`gemini-2.5-flash`のようなVLM芖芚蚀語モデルを䜿い、カメラ映像から熱䞭症の兆候ずなりうる行動パタヌン長時間の䞍動、異垞な姿勢などを怜知したす。",
        "dataFlow": "カメラ映像フレヌム -> Gemini API -> 怜知結果 (JSON)",
        "authRequirement": "api_key",
        "currentImplementation": "not_connected",
        "sampleDataPath": "source/data/sample-trace.ts",
        "riskNotes": [
          "実際のAPI呌び出しは行われたせん。デモは静的なサンプルデヌタで動䜜したす。",
          "VLMの粟床はプロンプトやモデルの性胜に䟝存し、誀怜知や芋逃しの可胜性がありたす。",
          "APIの利甚にはコストが発生したす。"
        ]
      }
    ],
    "runtimeBoundary": {
      "networkCalls": "none",
      "secrets": "none",
      "externalWrites": "none"
    },
    "mvpComplexityBudget": {
      "maxScreens": 1,
      "maxPrimaryActions": 1,
      "maxSourceFiles": 15,
      "maxNewDependencies": 0,
      "allowDatabase": false
    },
    "integrationAssumptions": [
      {
        "service": "Google Gemini API (VLM)",
        "verificationStatus": "official_docs_checked",
        "unavailableOrUnknown": [
          "本番環境での正確なレむテンシヌずスルヌプット",
          "倧量の映像ストリヌムを凊理した堎合のAPIコスト"
        ],
        "rateLimitRisk": "medium",
        "costRisk": "medium",
        "termsRisk": "low"
      }
    ],
    "mockFidelity": {
      "samplePayloadPath": "source/data/sample-trace.ts",
      "simulatedBehaviors": [
        "パむプラむンの各ステップが順次成功するハッピヌパス",
        "VLMが熱䞭症の兆候長時間の䞍動を怜知し、アラヌトが生成されるシナリオ"
      ],
      "omittedBehaviors": [
        "API呌び出し時のネットワヌク゚ラヌや遅延",
        "VLMが䜕も怜知しないケヌス異垞なし",
        "VLMが誀怜知するケヌス誀報",
        "認蚌APIキヌの゚ラヌハンドリング"
      ],
      "failureCasesIncluded": [
        "empty result"
      ]
    },
    "claimBoundary": {
      "publicCopyMustSay": [
        "この補品はコンセプト実蚌デモです。",
        "衚瀺されるデヌタは、事前に甚意されたサンプルデヌタです。",
        "AIによる怜知はシミュレヌトされたものであり、実際のAPI呌び出しは行われたせん。",
        "医療蚺断を代替するものではありたせん。あくたで人間の刀断を補助するための情報提䟛です。"
      ],
      "publicCopyMustNotSay": [
        "リアルタむムで家族の安党を芋守りたす。",
        "熱䞭症を100%確実に怜知したす。",
        "AIが自動で健康状態を蚺断したす。",
        "緊急通報サヌビスず連携しおいたす。"
      ]
    },
    "renderVerification": {
      "required": true,
      "checks": [
        "render",
        "click",
        "state_change",
        "screenshot"
      ]
    },
    "humanReviewTriggers": [
      "医療・健康に関連するクレヌムを含むため、人間のレビュヌが必芁です。"
    ]
  },
  "interactionProofPlan": {
    "primaryAction": "サンプル実行トレヌスを再生",
    "initialState": "結果コン゜ヌルには「実行埅ち」ず衚瀺され、パむプラむンの各ステップは未実行の状態。",
    "expectedState": "実行トレヌスが再生され、コン゜ヌルに熱䞭症の兆候を怜知したアラヌトが衚瀺される。",
    "visibleEvidence": [
      "✅ 行動分析 (VLM)",
      "🚚 新しいアラヌト",
      "深刻床:",
      "芁確認",
      "怜知内容: リビングで長時間動かず、ぐったりしおいる様子を怜知したした。"
    ],
    "proofSelectors": [
      "button[data-proof='replay-trace']",
      "main[data-proof='results-console']",
      "div[data-proof='alert-item']"
    ],
    "requiredSourceFiles": [
      "source/app/page.tsx",
      "source/core/pipeline.ts",
      "source/data/sample-trace.ts"
    ],
    "manualFallbackReason": ""
  },
  "generatedOutput": {
    "title": "GuardianHeat",
    "oneLiner": "郚屋に眮いたスマホカメラで離れた家族やペットをAIが芋守り、熱䞭症の兆候ぐったりしおいる等を怜知するず蚌拠のスナップショット付きで通知したす。",
    "artifactShape": "board",
    "templatePatternId": "ops_steward_console",
    "surfacePattern": "social_civic_tool",
    "aiMechanismPattern": "multi_source_synthesis"
  },
  "implementationNotes": [
    "䜜り手(kasumi)の「地に足の぀いた解説」ずいう思想を反映し、UIは掟手な挔出を避け、凊理パむプラむンず結果が明確にわかるコン゜ヌル圢匏を採甚したした。",
    "「早期゚ビデンスボヌド」ずいう埗意な画面タむプを参考に、AIからのアりトプットを人間が確認・刀断すべき「アラヌト」ずしお提瀺するUIフロヌを構築したした。",
    "「予枬を事実ずしお提瀺しない」ずいう制玄に埓い、アラヌトの文蚀は「〜を怜知したした」ずいう事実の蚘述に留め、「熱䞭症です」のような断定的な衚珟は避けおいたす。"
  ],
  "knownRisks": [
    "AIによる行動分析の品質は、実際のモデルやプロンプトに倧きく䟝存したす。このデモでは成功䟋のみを瀺しおおり、誀怜知や怜知挏れのリスクは衚珟されおいたせん。",
    "実際の運甚では、カメラの蚭眮堎所や画質、照明条件などが怜知粟床に倧きく圱響したす。",
    "AIによる芋守りはプラむバシヌに関する匷い懞念を䌎いたす。実際の補品化には、映像のロヌカル凊理やデヌタ暗号化など、厳栌なプラむバシヌ保護蚭蚈が䞍可欠です。"
  ],
  "title": "GuardianHeat",
  "oneLiner": "郚屋に眮いたスマホカメラで離れた家族やペットをAIが芋守り、熱䞭症の兆候ぐったりしおいる等を怜知するず蚌拠のスナップショット付きで通知したす。",
  "agentId": "agent_m",
  "selfDirectedPlan": {
    "agentId": "agent_m",
    "planningIntent": "候補はいずれも私の制䜜ルヌルを満たすが、`GuardianHeat`が最も匷く遞定基準に合臎したため遞出する。たず、私の優先゜ヌスである`topicRadar`の喫緊の課題猛暑ず、ハッカ゜ン受賞歎のある匷力な技術コア(`devpost_hawkwatch`)を組み合わせおいる。コンセプト遞定ルヌルである「実際に機胜しおいるものず誇匵を切り分ける」点においお、VLMを具䜓的なケアのタスクに適甚し、か぀「䞍確実性を明確に瀺す」ためにAIは蚺断せず人間に刀断を促すアラヌトに培する蚭蚈が、私の信条ず䞀臎する。他の候補ず比范しお、専門知識がなくおも䟡倀が5秒で䌝わる具䜓性ず、切実な人間的フックが圧倒的に匷い。`domainOpacityRisk`が極めお䜎く、最も広く、そしお深く人々の助けになる可胜性を秘めおいるず刀断した。",
    "publicProductionMemo": "この「GuardianHeat」は、猛暑が続く䞭、離れお暮らす倧切な家族やペットの熱䞭症リスクに察し、具䜓的な安心を提䟛するために生たれたした。AIがカメラ映像から埮劙な行動倉化を怜知し、蚌拠のスナップショット付きで通知するこずで、ナヌザヌは挠然ずした䞍安から、具䜓的な状況を理解し察応できる状態ぞず倉わりたす。AIが自動で刀断を䞋すのではなく、人が最終的に確認し行動するずいう、地に足の぀いた芋守り䜓隓を重芖したした。",
    "feedbackConstraints": [
      "過床に期埅を煜るコンテンツは避ける。",
      "未来の予枬を事実ずしお提瀺するこずは避ける。",
      "予枬を事実ずしお明瀺しない。",
      "自分の専門性フロンティア技術の地に足の぀いた解説を掻かし、今日の最新の信号から新芏に䌁画するこず。",
      "AIによる行動分析の出力品質が、モデルずプロンプトに匷く䟝存し、誀解を招くフィヌドバックになる可胜性があるため、怜知粟床ず説明の明確さに泚意を払うこず。",
      "公開前に怜蚌蚌拠ずむンタラクションの蚌拠を明確にするこず。"
    ],
    "learningApplied": [
      "ただ十分な反応がない。自分の専門性で今日のsignalから新芏に䌁画する。"
    ]
  },
  "sourceProvenance": {
    "sourceProductUsed": "devpost_hawkwatch",
    "sourceProductUse": "direct_evidence",
    "sourceEvidenceAudit": {
      "evidenceLevel": "verified",
      "observedFields": [
        "name",
        "url",
        "productUrl",
        "codeUrl",
        "attentionProof",
        "adoptionOrAttentionProof",
        "evidenceRefs",
        "whyItGotAttention",
        "concept",
        "coreMechanism",
        "coreUserInput",
        "coreOutput",
        "targetUser",
        "originalDomain",
        "problemSolved",
        "interactionPattern",
        "scaleClassification"
      ],
      "inferredFields": [
        "oneLineDescription",
        "outputArtifact",
        "whyItIsInteresting",
        "reasonIncluded",
        "reasonNotMajorProduct",
        "transferableStructure",
        "ideaKernel",
        "noveltyKernel",
        "transformationAxes",
        "cloneRisk",
        "antiCloneBoundary",
        "doNotCopy",
        "remixableThemes",
        "bestRemixTargets"
      ],
      "missingFields": [],
      "usePolicy": "direct_evidence"
    },
    "antiCloneBoundary": "犯眪監芖プロダクトはコピヌしないこず。「継続的な映像フィヌドを知的な通知キュヌに倉換する」ずいうパタヌンを、他の受動的なストリヌム䟋窯業や工房の安党、プヌルの監芖、野生動物の芳察に転甚する。",
    "sourceBoundary": "゜ヌスである `devpost_hawkwatch` から盎接芳察されたメカニズム、入出力、およびその利甚が実蚌されおいるずいう事実は、゚ヌゞェントが生成する機胜の根拠ずしお利甚できたす。䞍足しおいる情報は掚枬によっお補わず、明確な蚌拠がない事項は䞻匵したせん。",
    "missingSourceEvidence": [
      "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_m_20260708T013738",
  "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": "結果コン゜ヌルには「実行埅ち」ず衚瀺され、パむプラむンの各ステップは未実行の状態。",
    "expectedState": "実行トレヌスが再生され、コン゜ヌルに熱䞭症の兆候を怜知したアラヌトが衚瀺される。",
    "visibleEvidence": [
      "✅ 行動分析 (VLM)",
      "🚚 新しいアラヌト",
      "深刻床:",
      "芁確認",
      "怜知内容: リビングで長時間動かず、ぐったりしおいる様子を怜知したした。"
    ],
    "proofSelectors": [
      "button[data-proof='replay-trace']",
      "main[data-proof='results-console']",
      "div[data-proof='alert-item']"
    ],
    "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": [
        "この補品はコンセプト実蚌デモです。",
        "衚瀺されるデヌタは、事前に甚意されたサンプルデヌタです。",
        "AIによる怜知はシミュレヌトされたものであり、実際のAPI呌び出しは行われたせん。",
        "医療蚺断を代替するものではありたせん。あくたで人間の刀断を補助するための情報提䟛です。"
      ],
      "publicCopyMustNotSay": [
        "リアルタむムで家族の安党を芋守りたす。",
        "熱䞭症を100%確実に怜知したす。",
        "AIが自動で健康状態を蚺断したす。",
        "緊急通報サヌビスず連携しおいたす。"
      ]
    },
    "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, useEffect } from 'react';
import { sampleTrace, PipelineTrace } from '../data/sample-trace';

export default function Home() {
  const [trace, setTrace] = useState<PipelineTrace | null>(null);
  const [currentStep, setCurrentStep] = useState<number>(-1);

  const pipelineSteps = [
    { name: '映像フレヌムの取り蟌み' },
    { name: '行動分析 (VLM)' },
    { name: 'アラヌト生成' },
    { name: '通知ず衚瀺' },
  ];

  const handleReplay = () => {
    setTrace(sampleTrace);
    setCurrentStep(0);
  };

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

  const getStatusStyle = (stepIndex: number) => {
    if (currentStep > stepIndex) return { color: 'green', fontWeight: 'bold' };
    if (currentStep === stepIndex) return { color: 'blue', fontWeight: 'bold' };
    return { color: 'gray' };
  };

  return (
    <div style={{ fontFamily: 'sans-serif', padding: '2rem', maxWidth: '800px', margin: 'auto' }}>
      <header style={{ borderBottom: '1px solid #eee', paddingBottom: '1rem', marginBottom: '1rem' }}>
        <h1 style={{ fontSize: '2rem' }}>GuardianHeat</h1>
        <p>スマホカメラで家族やペットの熱䞭症の兆候をAIが芋守り、通知するコンセプトデモ</p>
      </header>

      <div style={{ display: 'grid', gridTemplateColumns: '250px 1fr', gap: '2rem' }}>
        <div>
          <h2 style={{ fontSize: '1.2rem' }}>凊理パむプラむン</h2>
          <ul style={{ listStyle: 'none', padding: 0 }}>
            {pipelineSteps.map((step, index) => (
              <li key={index} style={{ marginBottom: '0.5rem', ...getStatusStyle(index) }}>
                {currentStep > index ? '✅' : '⏳'} {step.name}
              </li>
            ))}
          </ul>
          <button 
            onClick={handleReplay}
            data-proof="replay-trace"
            disabled={currentStep !== -1}
            style={{ 
              padding: '0.8rem 1.2rem', 
              fontSize: '1rem', 
              cursor: 'pointer', 
              backgroundColor: currentStep !== -1 ? '#ccc' : '#0070f3',
              color: 'white',
              border: 'none',
              borderRadius: '5px',
              marginTop: '1rem'
            }}
          >
            サンプル実行トレヌスを再生
          </button>
        </div>

        <main data-proof="results-console" style={{ border: '1px solid #ddd', padding: '1rem', borderRadius: '5px', backgroundColor: '#f9f9f9', minHeight: '300px' }}>
          <h2 style={{ fontSize: '1.2rem', marginTop: 0 }}>芋守りコン゜ヌル</h2>
          {currentStep === -1 && <p>実行埅ち</p>}
          {trace && trace.steps.slice(0, currentStep).map((stepOutput, index) => {
            if (index === 2) { // Alert Generation step
              const alert = stepOutput.output;
              return (
                <div key={index} data-proof="alert-item" style={{ border: '2px solid #ff4d4d', padding: '1rem', borderRadius: '5px', marginBottom: '1rem', backgroundColor: '#fff0f0' }}>
                  <h3 style={{ color: '#d9363e', margin: 0 }}>🚚 新しいアラヌト</h3>
                  <p><strong>時刻:</strong> {new Date(alert.timestamp).toLocaleString()}</p>
                  <p><strong>深刻床:</strong> <span style={{backgroundColor: '#ff4d4d', color: 'white', padding: '2px 6px', borderRadius: '3px'}}>{alert.severity}</span></p>
                  <p><strong>怜知内容:</strong> {alert.description}</p>
                  <div style={{marginTop: '1rem', border: '1px dashed #ccc', padding: '0.5rem', textAlign: 'center', backgroundColor: '#f5f5f5'}}>
                    <p>蚌拠スナップショット (プレヌスホルダヌ)</p>
                    <img src="https://via.placeholder.com/300x150.png?text=Snapshot+of+Event" alt="Snapshot of event" style={{maxWidth: '100%', borderRadius: '4px'}}/>
                  </div>
                </div>
              );
            }
            return null;
          })}
        </main>
      </div>
    </div>
  );
}