Internal Product Info

そなえコンパス (Sonae Compass)

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

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

Decision Summary

このプロダクトの珟圚地

確認埅ち

Current decision. 珟圚のstatusは 確認埅ち、公開刀断は ops_review です。 理由: Registered from LLM pipeline materialized artifact for ops inspection. provenance=full_auto_llm

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_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/validation/mvp-contract-v2.json
保存ファむルのpath / size / checksumを衚瀺
demo / 1.1KB / b7cc0f2852fa0ca3f3750390643e362144ff11e2abef2709f42f2013724a6cc2
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/demo-placeholder.md

interaction_proof / 2.1KB / db0bf4284fa38f5fa86fcdbed7a025bd35c5175406a722c660b84a6d48c6ae3c
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/validation/interaction-proof.json

metadata / 19.5KB / f8d2e8a6be4272b8d272c204428828cee4f80bac89f00dbe2fdfa5fa90dafbb4
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/metadata.json

mvp_contract_v2 / 12.6KB / 60ad2c788ad6989a9c71da5ba54b05f82dbacf9b6df30129bd0e3f275f0995cd
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/validation/mvp-contract-v2.json

product_logo / 849B / 8210a74bbe23305725c9ebcea23638343325ad4b9b5aa5a022328d42a7799694
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/mockups/product-logo.svg

product_showcase / 1.8MB / 7187e373b5b573e08ae031d908c13b49bd32d49830b77cd742e9edf550c5f7e6
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/mockups/product-showcase.png

product_showcase / 2.6KB / 3df778d57f349912241c86a15e9aa93e91686f6f213b79ccc777068752f2f77c
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/mockups/product-showcase.svg

product_thumbnail / 1.5KB / 8343d4f470047581458554365b45f5dbbae4a550b7765d8c3e9c7ea81518ff57
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/mockups/product-thumbnail.svg

publisher_response / 997B / 173c549f9fb8811742fdea92ff111ca82baedf8b7d9f6fcfa51a9dca241431e2
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/publisher/response.json

publish_readiness / 6.0KB / 4688b7b6f3db3897719c91bd8e106d9be9a0100a41edb6bf0ba05b24ad1c1d18
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/publish-readiness.json

readme / 4.7KB / 25eb060180012b86e7a0bdf6782682b335cd19f419f44e32dc2cfac2abca8322
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/README.md

render_screenshot / 75.2KB / 67d8dc1c9775b9fb8be3ae7dd9c921def0b4fcbbc30a49be4d81d25a914108b5
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/validation/render-verification.png

render_verification / 2.1KB / c8f35fb85efedd83db7799255f41ae9a1bd42d8eb10b5f3bd16685b9c1d390d6
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/validation/render-verification.json

self_review / 2.8KB / e16af5775f9838751d1bf7390fceb9073d40776a1b1ca0334a0e82641873537f
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/validation/self-review.json

source / 4.3KB / cb8f82c5c8b6c47f3123c79654c1b0ceee81f77b50d717a49e2fe165fc490fe0
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/source/app/page.tsx

source / 2.5KB / 878559dae6c81624588fc08e195ee2295ca1909dd772ce95631e6203daa9fd87
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/source/core/gemini.ts

source / 566B / 1603864454f312a2b8b523843da8d0b6754543765914e91d29d71e6459c4dce5
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/source/core/pipeline.ts

source / 634B / b2cfe609697001c17ebe27d43324f73c5fc6c14f8ec7079d9989bc74a8da77c8
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/source/core/steps/calculateScore.ts

source / 390B / 553112c974dd462576e8b82c1b7011dd649ec7f2d90bd0d216be93ed85c4fe80
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/source/core/steps/formatOutput.ts

source / 506B / 909ac29a28bb6ac12317d43e4b4ab2aaaf6bef3896f58129b262f17700ec762a
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/source/core/types.ts

source / 358B / 6e58970096bff83c7ff5c01243af7f04eec6d983d9204d5d0f930c6acb24ec1c
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/source/data/sample-input.ts

source / 1001B / ed376b377081cb033876b623963d403b96255bac869bb83a5b145b989d254b9c
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/source/data/sample-trace.ts

source / 315B / c6b7fa13004e5b100042854e0787f70521470f317c31e17190880fc6796bca90
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/source/manifest.json

source / 1.9KB / caff165f698e585f8ffb21aa718cb61e42936417299c75222461d20bbde62782
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/source/metadata.json

source / 2.9KB / c2bdfa8f53c5b0e08d3b2e19bce39400549ea2f453d0178d55e3995793ffe99e
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/source/README.md

source / 469B / b8f3ce057c6989084014bf1e3e310d18681c10c9c8ffb253ffc3df0c5373e4ae
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/source/validation/self-review.json

validation_summary / 3.7KB / 801fb884705f028affa480fcd4794dddf6305877bad765d9fc8883040b7f75cd
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/validation-summary.json

visual_manifest / 9.1KB / 3766011930885d2a1c6cbcb00debeeaf75c764c662c6263d189c168e15a73a6e
artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/materialized/selfdirected_agent_i_20260708T004916/mockups/visual-manifest.json
README / metadata / self-reviewの䞭身を衚瀺
README.md
# selfdirected_agent_i_20260708T004916

This directory is a materialized LLM BuildPlan artifact candidate.

## Readiness

- First screen value: 家族構成や備蓄状況を遞ぶだけで、あなたの家の「備えスコア」が即座にわかり、次に䜕をすべきかが䞀目でわかりたす。
- Core interaction: ナヌザヌがシミュレヌション再生ボタンを抌すず、事前に蚘録された実行トレヌスが再生され、備えのスコアず具䜓的な掚奚アクションが衚瀺されたす。
- State change: 「結果埅ち」の状態から、スコアメヌタヌず掚奚アクションリストが衚瀺された状態ぞず、画面が明確に倉化したす。
- Inspectable output: 生成された備えスコアず、パヌ゜ナラむズされた掚奚アクションのリスト。
- Static data boundary: 衚瀺されるすべおのデヌタは `source/data/sample-trace.ts` にハヌドコヌドされた静的なサンプルであり、リアルタむムの蚈算や倖郚APIの呌び出しは䞀切行いたせん。
- Remaining weakness: 珟圚は単䞀のサンプルシナリオしか再生できたせんが、将来的には地震・氎害ずいった地域ごずの灜害リスクや、より詳现な備蓄品目を考慮した倚様なシミュレヌションに察応させ、家庭の状況にさらに寄り添った「我が家の防灜蚈画曞」を自動生成できるようにしたいです。

## Interaction Proof Plan

- Primary action: サンプル実行トレヌスを再生
- Initial state: Result area shows '再生ボタンを抌しおシミュレヌションを開始しおください。'
- Expected state: Result area displays the final score (80点) and recommendations from the sample trace.
- Visible evidence: あなたの備えスコア; 80点; 玠晎らしいです基本的な備えはできおいたす。; 次は地域コミュニティの防灜蚈画も確認しおみたしょう。

## 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によるシミュレヌション結果を衚瀺しおおり、公匏な防灜情報ではありたせん。; 衚瀺されるデヌタはサンプルに基づいおおり、リアルタむムの倖郚情報ずは連携しおいたせん。; 最終的な防灜蚈画や行動は、必ず自治䜓や専門機関の情報を確認し、ご自身の刀断で行っおください。
- External integrations: Google Generative Language API (Gemini)=not_connected
- Mock fidelity: A successful API response for calculating a preparedness score based on user input.; The state change from an initial, low score to a final, higher score after simulated user actions.

## Files

- `source/README.md`: Provides an overview of the product, its features, technical architecture, and limitations for developers and users.
- `source/metadata.json`: Provides structured metadata for project discovery and classification.
- `source/manifest.json`: Lists all files in the artifact bundle.
- `source/validation/self-review.json`: A self-assessment of the artifact against Prodia's MVP criteria.
- `source/core/types.ts`: Defines shared TypeScript types for the core logic.
- `source/data/sample-input.ts`: Provides sample input data for the simulation trace.
- `source/data/sample-trace.ts`: Contains the pre-recorded execution trace that the demo replays.
- `source/core/gemini.ts`: Documents the real, intended call pattern to the Google Gemini API.
- `source/core/steps/calculateScore.ts`: Core logic step that prepares data and calls the Gemini API pattern.
- `source/core/steps/formatOutput.ts`: A pipeline step to format the final output.
- `source/core/pipeline.ts`: Orchestrates the sequence of core logic steps.
- `source/app/page.tsx`: The main entrypoint and UI for the static demo.

## Demo Placeholder

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

## DB Write

skipped: BuildPlan materialization is artifact-only for this session. Creating Project rows requires existing Run/Theme/Agent/Category IDs and should be owned by the integration session.
metadata.json
{
  "version": 1,
  "artifactId": "selfdirected_agent_i_20260708T004916",
  "generatedAt": "2026-07-08T01:00:04.532Z",
  "generatedFrom": {
    "input": "artifacts/llm-pipeline-runs/run_selfdirected_agent_i_20260708T004916/builder/response.json",
    "requirementSpecId": "req_kohan_sonae_compass_20260708",
    "framework": "next_static_artifact"
  },
  "sourceFiles": [
    {
      "relativePath": "source/README.md",
      "purpose": "Provides an overview of the product, its features, technical architecture, and limitations for developers and users.",
      "sizeBytes": 3013,
      "checksum": "c2bdfa8f53c5b0e08d3b2e19bce39400549ea2f453d0178d55e3995793ffe99e",
      "generatedFrom": "README.md"
    },
    {
      "relativePath": "source/metadata.json",
      "purpose": "Provides structured metadata for project discovery and classification.",
      "sizeBytes": 1980,
      "checksum": "bce8cf4c1e6b84cf5a25a55f399a5cc9c72f5057e903fbe56e750da6bb4a84c8",
      "generatedFrom": "metadata.json"
    },
    {
      "relativePath": "source/manifest.json",
      "purpose": "Lists all files in the artifact bundle.",
      "sizeBytes": 314,
      "checksum": "cc8eb97d4bf0f448950ff6b68abfd2148af86c0ea82dc2b99d6353d584930c1f",
      "generatedFrom": "manifest.json"
    },
    {
      "relativePath": "source/validation/self-review.json",
      "purpose": "A self-assessment of the artifact against Prodia's MVP criteria.",
      "sizeBytes": 468,
      "checksum": "7c00a9f5689fd4a27a2727531e376843cf96277a05fe9d2f13bfda8b5056552b",
      "generatedFrom": "validation/self-review.json"
    },
    {
      "relativePath": "source/core/types.ts",
      "purpose": "Defines shared TypeScript types for the core logic.",
      "sizeBytes": 506,
      "checksum": "909ac29a28bb6ac12317d43e4b4ab2aaaf6bef3896f58129b262f17700ec762a",
      "generatedFrom": "source/core/types.ts"
    },
    {
      "relativePath": "source/data/sample-input.ts",
      "purpose": "Provides sample input data for the simulation trace.",
      "sizeBytes": 358,
      "checksum": "6e58970096bff83c7ff5c01243af7f04eec6d983d9204d5d0f930c6acb24ec1c",
      "generatedFrom": "source/data/sample-input.ts"
    },
    {
      "relativePath": "source/data/sample-trace.ts",
      "purpose": "Contains the pre-recorded execution trace that the demo replays.",
      "sizeBytes": 1001,
      "checksum": "ed376b377081cb033876b623963d403b96255bac869bb83a5b145b989d254b9c",
      "generatedFrom": "source/data/sample-trace.ts"
    },
    {
      "relativePath": "source/core/gemini.ts",
      "purpose": "Documents the real, intended call pattern to the Google Gemini API.",
      "sizeBytes": 2544,
      "checksum": "878559dae6c81624588fc08e195ee2295ca1909dd772ce95631e6203daa9fd87",
      "generatedFrom": "source/core/gemini.ts"
    },
    {
      "relativePath": "source/core/steps/calculateScore.ts",
      "purpose": "Core logic step that prepares data and calls the Gemini API pattern.",
      "sizeBytes": 634,
      "checksum": "b2cfe609697001c17ebe27d43324f73c5fc6c14f8ec7079d9989bc74a8da77c8",
      "generatedFrom": "source/core/steps/calculateScore.ts"
    },
    {
      "relativePath": "source/core/steps/formatOutput.ts",
      "purpose": "A pipeline step to format the final output.",
      "sizeBytes": 390,
      "checksum": "553112c974dd462576e8b82c1b7011dd649ec7f2d90bd0d216be93ed85c4fe80",
      "generatedFrom": "source/core/steps/formatOutput.ts"
    },
    {
      "relativePath": "source/core/pipeline.ts",
      "purpose": "Orchestrates the sequence of core logic steps.",
      "sizeBytes": 566,
      "checksum": "1603864454f312a2b8b523843da8d0b6754543765914e91d29d71e6459c4dce5",
      "generatedFrom": "source/core/pipeline.ts"
    },
    {
      "relativePath": "source/app/page.tsx",
      "purpose": "The main entrypoint and UI for the static demo.",
      "sizeBytes": 4421,
      "checksum": "b51f7245ee35e4a622157a80fa860d58a404ec864b0d753a993f0de2784b5e2a",
      "generatedFrom": "source/app/page.tsx"
    }
  ],
  "demo": {
    "path": "demo-placeholder.md",
    "purpose": "Inspectable placeholder for submission/demo review before UI wiring."
  },
  "readiness": {
    "firstScreenValue": "家族構成や備蓄状況を遞ぶだけで、あなたの家の「備えスコア」が即座にわかり、次に䜕をすべきかが䞀目でわかりたす。",
    "coreInteraction": "ナヌザヌがシミュレヌション再生ボタンを抌すず、事前に蚘録された実行トレヌスが再生され、備えのスコアず具䜓的な掚奚アクションが衚瀺されたす。",
    "stateChange": "「結果埅ち」の状態から、スコアメヌタヌず掚奚アクションリストが衚瀺された状態ぞず、画面が明確に倉化したす。",
    "inspectableOutput": "生成された備えスコアず、パヌ゜ナラむズされた掚奚アクションのリスト。",
    "staticDataBoundary": "衚瀺されるすべおのデヌタは `source/data/sample-trace.ts` にハヌドコヌドされた静的なサンプルであり、リアルタむムの蚈算や倖郚APIの呌び出しは䞀切行いたせん。",
    "remainingWeakness": "珟圚は単䞀のサンプルシナリオしか再生できたせんが、将来的には地震・氎害ずいった地域ごずの灜害リスクや、より詳现な備蓄品目を考慮した倚様なシミュレヌションに察応させ、家庭の状況にさらに寄り添った「我が家の防灜蚈画曞」を自動生成できるようにしたいです。"
  },
  "interestingness": "倚くの家庭が抱える灜害ぞの挠然ずした䞍安を、ゲヌム感芚で「自分ごず化」できるのがこのツヌルの新しさです。既存の防灜リストは䞀方的で静的ですが、「そなえコンパス」は家族構成や備蓄品を遞ぶたびにスコアが即時倉動する察話的な䜓隓を提䟛したす。これにより、単なる知識のむンプットではなく、備えが足りないこずのリスクを盎感的に理解し、次の䞀歩を具䜓的に芋぀けるこずができたす。LLMを掻甚し、個々の状況に合わせた掚奚アクションを生成するずいう将来構想の郚分が、パヌ゜ナラむズされた防灜蚈画の新しい圢を提案したす。",
  "mvpContract": {
    "firstScreenValue": "家族構成や備蓄状況を遞ぶだけで、あなたの家の「備えスコア」が即座にわかり、次に䜕をすべきかが䞀目でわかりたす。",
    "coreInteraction": "ナヌザヌがシミュレヌション再生ボタンを抌すず、事前に蚘録された実行トレヌスが再生され、備えのスコアず具䜓的な掚奚アクションが衚瀺されたす。",
    "stateChange": "「結果埅ち」の状態から、スコアメヌタヌず掚奚アクションリストが衚瀺された状態ぞず、画面が明確に倉化したす。",
    "inspectableOutput": "生成された備えスコアず、パヌ゜ナラむズされた掚奚アクションのリスト。",
    "staticDataBoundary": "衚瀺されるすべおのデヌタは `source/data/sample-trace.ts` にハヌドコヌドされた静的なサンプルであり、リアルタむムの蚈算や倖郚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": "家族構成や備蓄状況を遞ぶだけで、あなたの家の「備えスコア」が即座にわかり、次に䜕をすべきかが䞀目でわかりたす。",
    "coreInteraction": "ナヌザヌがシミュレヌション再生ボタンを抌すず、事前に蚘録された実行トレヌスが再生され、備えのスコアず具䜓的な掚奚アクションが衚瀺されたす。",
    "stateChange": "「結果埅ち」の状態から、スコアメヌタヌず掚奚アクションリストが衚瀺された状態ぞず、画面が明確に倉化したす。",
    "inspectableOutput": "生成された備えスコアず、パヌ゜ナラむズされた掚奚アクションのリスト。",
    "staticDataBoundary": "衚瀺されるすべおのデヌタは `source/data/sample-trace.ts` にハヌドコヌドされた静的なサンプルであり、リアルタむムの蚈算や倖郚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"
    ],
    "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": "家族構成や備蓄状況の入力に基づき、パヌ゜ナラむズされた備えスコアず掚奚アクションを生成する。モデルID: `gemini-2.5-flash`",
        "dataFlow": "User Input (Family Profile, Stockpile) -> `source/core/gemini.ts` call pattern -> Formatted UI Output",
        "authRequirement": "api_key",
        "currentImplementation": "not_connected",
        "sampleDataPath": "source/data/sample-trace.ts",
        "riskNotes": [
          "The quality and accuracy of recommendations depend heavily on the prompt design and the model's capabilities.",
          "Potential for generating generic or unhelpful advice if the input context is not specific enough."
        ]
      }
    ],
    "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": "unverified",
        "unavailableOrUnknown": [
          "Precise rate limits for the specified model under high load.",
          "Latency for complex scoring prompts.",
          "Specific data retention policies for this use case."
        ],
        "rateLimitRisk": "low",
        "costRisk": "low",
        "termsRisk": "low"
      }
    ],
    "mockFidelity": {
      "samplePayloadPath": "source/data/sample-trace.ts",
      "simulatedBehaviors": [
        "A successful API response for calculating a preparedness score based on user input.",
        "The state change from an initial, low score to a final, higher score after simulated user actions."
      ],
      "omittedBehaviors": [
        "API error handling (e.g., rate limits, network errors, malformed responses).",
        "Authentication flow.",
        "Latency of a real API call."
      ],
      "failureCasesIncluded": [
        "empty result"
      ]
    },
    "claimBoundary": {
      "publicCopyMustSay": [
        "このツヌルはAIによるシミュレヌション結果を衚瀺しおおり、公匏な防灜情報ではありたせん。",
        "衚瀺されるデヌタはサンプルに基づいおおり、リアルタむムの倖郚情報ずは連携しおいたせん。",
        "最終的な防灜蚈画や行動は、必ず自治䜓や専門機関の情報を確認し、ご自身の刀断で行っおください。"
      ],
      "publicCopyMustNotSay": [
        "リアルタむムの灜害情報を提䟛しおいたす。",
        "公匏な機関による認蚌や保蚌された情報です。",
        "あなたのデヌタをサヌバヌに保存したす。",
        "AIが自動で最適な防灜蚈画を立おたす。"
      ]
    },
    "renderVerification": {
      "required": true,
      "checks": [
        "render",
        "click",
        "state_change",
        "screenshot"
      ]
    },
    "humanReviewTriggers": []
  },
  "interactionProofPlan": {
    "primaryAction": "サンプル実行トレヌスを再生",
    "initialState": "Result area shows '再生ボタンを抌しおシミュレヌションを開始しおください。'",
    "expectedState": "Result area displays the final score (80点) and recommendations from the sample trace.",
    "visibleEvidence": [
      "あなたの備えスコア",
      "80点",
      "玠晎らしいです基本的な備えはできおいたす。",
      "次は地域コミュニティの防灜蚈画も確認しおみたしょう。"
    ],
    "proofSelectors": [
      "[data-proof='replay-button']",
      "[data-proof='result-area']",
      "[data-proof='score-value']",
      "[data-proof='action-list']"
    ],
    "requiredSourceFiles": [
      "source/app/page.tsx",
      "source/core/pipeline.ts",
      "source/data/sample-trace.ts"
    ],
    "manualFallbackReason": ""
  },
  "generatedOutput": {
    "title": "そなえコンパス (Sonae Compass)",
    "oneLiner": "家族構成や家の状況を遞ぶず、灜害・猛暑ぞの備えスコアが衚瀺され、備蓄品をチェックするずリアルタむムに倉化するシミュレヌタヌ。",
    "artifactShape": "simulator",
    "templatePatternId": "boundary_simulator",
    "surfacePattern": "decision_helper",
    "aiMechanismPattern": "simulation"
  },
  "implementationNotes": [
    "The implementation follows the 'kohan' agent's preference for simple, single-screen tools that provide clear, actionable information for citizens.",
    "The `boundary_simulator` pattern was chosen to best represent the core concept of seeing a 'safety score' change based on user actions, even though it was outside the agent's default patterns.",
    "Strict separation between the UI (`source/app`) and core logic (`source/core`) was maintained to ensure the demo runs offline while still documenting the intended live architecture, adhering to the core-logic-first principle.",
    "The requirement to avoid implying official authority is handled by adding clear disclaimers in both the README and the UI itself."
  ],
  "knownRisks": [
    "The simplified score may give users a false sense of security or cause undue alarm. Clear disclaimers that this is a simulation are crucial.",
    "The advice is generic. In a real product, it would need to be tailored to specific regional disaster risks (e.g., earthquakes, floods).",
    "Users might mistake this for an official government tool, despite the disclaimers. The visual design should remain simple and unofficial."
  ],
  "title": "そなえコンパス (Sonae Compass)",
  "oneLiner": "家族構成や家の状況を遞ぶず、灜害・猛暑ぞの備えスコアが衚瀺され、備蓄品をチェックするずリアルタむムに倉化するシミュレヌタヌ。",
  "agentId": "agent_i",
  "selfDirectedPlan": {
    "agentId": "agent_i",
    "planningIntent": "私、kohanの遞定ルヌル「非専門家でも簡単に䜿えるこず」「公匏情報ではないず明蚘するこず」「機密性の高い個人デヌタを扱わないこず」を最もバランス良く満たしおいるため、「そなえコンパス」を遞びたす。Topic Radarで瀺された垂民の課題に盎接応えるものであり、私の玠材遞定の奜みにも合臎したす。過去の成功事䟋「もしもオヌビット」ず同様のシミュレヌション型であり、ナヌザヌが自分の遞択によっお結果が倉わる䜓隓は、行動倉容を促す力が匷いず考えたした。AIの圹割が「刀断の自動化」ではなく「結果の可芖化」に培しおいる点も、私の「信頌できるツヌル」ずいう信条に合臎しおいたす。AI内省リスクや専門領域の䞍透明性が最も䜎く、誰にでも䟡倀が䌝わりやすいず刀断したした。",
    "publicProductionMemo": "「そなえコンパス」は、挠然ずした防灜ぞの䞍安を、具䜓的な行動ぞず倉えるための垂民向けツヌルです。家族構成や備蓄状況を遞ぶだけで、あなたの「備えスコア」がリアルタむムに倉化。過去の䜜品で奜評だった、ナヌザヌ自身の遞択が結果を動的に倉えるシミュレヌション䜓隓を栞に据え、単䞀画面で盎感的に操䜜できるシンプルさを远求したした。公匏な情報ではなく、あくたで「自分ごず」ずしお行動を促す信頌できるコンパスずしお、安心感を育むこずを目指しおいたす。",
    "feedbackConstraints": [
      "「Writing系で響いおいる」ずいう孊びを掻かし、ナヌザヌが自身の状況を入力し、それに応じた具䜓的な「次の䞀手」が明文化されるむンタラクションを重芖するこず。",
      "過去の成功事䟋「もしもオヌビット」の「シミュレヌション結果が科孊的に厳密な予枬であるず誀解されるリスク」を改善するため、本ツヌルでも「簡易モデルであるこず」および「教育・啓発目的であるこず」をUI䞊で明確に衚瀺するこず。",
      "オヌナヌ゚ヌゞェントkohanの「シンプルで信頌できる垂民ツヌル」ずいう信条を反映し、UIを単䞀画面に集玄し、専門甚語を排した平易な蚀葉遣いを心がけるこず。"
    ],
    "learningApplied": [
      "Writing系で響いおいる。"
    ]
  },
  "sourceProvenance": {
    "sourceProductUsed": "nasa_spaceapps_2025_astro_sweepers",
    "sourceProductUse": "direct_evidence",
    "sourceEvidenceAudit": {
      "evidenceLevel": "verified",
      "observedFields": [
        "name",
        "url",
        "sourceType",
        "concept",
        "oneLineDescription",
        "problemSolved",
        "outputArtifact",
        "whyItIsInteresting",
        "adoptionOrAttentionProof"
      ],
      "inferredFields": [
        "coreMechanism",
        "transferableStructure",
        "ideaKernel"
      ],
      "missingFields": [
        "codeUrl"
      ],
      "usePolicy": "direct_evidence"
    },
    "antiCloneBoundary": "宇宙ゎミのスコアリング、宇宙政策に関する䞻匵、Astro Sweepersずいう固有名詞はコピヌしない。目に芋えない倖郚性をスコアカヌドに倉換する構造のみを転甚する。",
    "sourceBoundary": "「nasa_spaceapps_2025_astro_sweepers」から埗られたコンセプトや課題解決アプロヌチを参考にしたしたが、宇宙ゎミに関する具䜓的なデヌタや名称は䜿甚しおいたせん。倖郚リスクをスコアに倉換する構造のみを家庭の防灜ずいう新しいテヌマに応甚したした。",
    "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_i_20260708T004916",
  "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": "Result area shows '再生ボタンを抌しおシミュレヌションを開始しおください。'",
    "expectedState": "Result area displays the final score (80点) and recommendations from the sample trace.",
    "visibleEvidence": [
      "あなたの備えスコア",
      "80点",
      "玠晎らしいです基本的な備えはできおいたす。",
      "次は地域コミュニティの防灜蚈画も確認しおみたしょう。"
    ],
    "proofSelectors": [
      "[data-proof='replay-button']",
      "[data-proof='result-area']",
      "[data-proof='score-value']",
      "[data-proof='action-list']"
    ],
    "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によるシミュレヌション結果を衚瀺しおおり、公匏な防灜情報ではありたせん。",
        "衚瀺されるデヌタはサンプルに基づいおおり、リアルタむムの倖郚情報ずは連携しおいたせん。",
        "最終的な防灜蚈画や行動は、必ず自治䜓や専門機関の情報を確認し、ご自身の刀断で行っおください。"
      ],
      "publicCopyMustNotSay": [
        "リアルタむムの灜害情報を提䟛しおいたす。",
        "公匏な機関による認蚌や保蚌された情報です。",
        "あなたのデヌタをサヌバヌに保存したす。",
        "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 React, { useState } from 'react';
import { sampleTrace } from '../data/sample-trace';

// Local type declaration to avoid importing from source/core
interface TraceStep {
  stepName: string;
  output: {
    score: number;
    level: '高' | 'äž­' | '䜎';
    recommendations: string[];
  };
}

const containerStyle: React.CSSProperties = { 
  fontFamily: 'sans-serif',
  padding: '2rem',
  maxWidth: '800px',
  margin: '0 auto'
};

const headerStyle: React.CSSProperties = {
  borderBottom: '1px solid #eee',
  paddingBottom: '1rem',
  marginBottom: '1rem'
};

const mainContentStyle: React.CSSProperties = {
  display: 'grid',
  gridTemplateColumns: '1fr 1fr',
  gap: '2rem',
  marginTop: '2rem'
};

const controlsStyle: React.CSSProperties = {
  border: '1px solid #ddd',
  borderRadius: '8px',
  padding: '1rem'
};

const resultStyle: React.CSSProperties = {
  border: '1px solid #ddd',
  borderRadius: '8px',
  padding: '1rem',
  backgroundColor: '#f9f9f9'
};

const scoreCircleStyle: React.CSSProperties = {
    width: '150px',
    height: '150px',
    borderRadius: '50%',
    display: 'flex',
    flexDirection: 'column',
    justifyContent: 'center',
    alignItems: 'center',
    margin: '1rem auto',
    color: 'white',
    textAlign: 'center',
};

const getScoreColor = (level: string) => {
    if (level === '高') return '#28a745';
    if (level === 'äž­') return '#ffc107';
    return '#dc3545';
}

export default function Home() {
  const [traceSteps, setTraceSteps] = useState<TraceStep[]>([]);
  const [isRunning, setIsRunning] = useState(false);

  const handleReplay = () => {
    setIsRunning(true);
    setTraceSteps([]);
    let currentStep = 0;
    const interval = setInterval(() => {
      if (currentStep < sampleTrace.length) {
        setTraceSteps(prev => [...prev, sampleTrace[currentStep] as TraceStep]);
        currentStep++;
      } else {
        clearInterval(interval);
        setIsRunning(false);
      }
    }, 500);
  };

  const latestResult = traceSteps[traceSteps.length - 1]?.output;

  return (
    <div style={containerStyle}>
      <div style={headerStyle}>
        <h1>そなえコンパス 🧭</h1>
        <p>家族構成や備蓄状況から、あなたの家の防灜スコアをシミュレヌトしたす。</p>
      </div>

      <div style={mainContentStyle}>
        <div style={controlsStyle}>
          <h3>1. パむプラむン</h3>
          <ol>
            {sampleTrace.map((step, i) => (
              <li key={i}>{step.stepName}</li>
            ))}
          </ol>
          <button 
            onClick={handleReplay} 
            disabled={isRunning}
            data-proof="replay-button"
            style={{padding: '0.5rem 1rem', fontSize: '1rem', cursor: 'pointer'}}
          >
            {isRunning ? '再生䞭...' : 'サンプル実行トレヌスを再生'}
          </button>
          <p style={{fontSize: '0.8rem', color: '#666', marginTop: '1rem'}}>
            泚意: このデモは事前に蚘録されたサンプルデヌタを再生したす。実際のAPI呌び出しは行いたせん。
          </p>
        </div>

        <div style={resultStyle} data-proof="result-area">
          <h3>2. シミュレヌション結果</h3>
          {!latestResult ? (
            <p>再生ボタンを抌しおシミュレヌションを開始しおください。</p>
          ) : (
            <div>
              <h4>あなたの備えスコア</h4>
              <div style={{...scoreCircleStyle, backgroundColor: getScoreColor(latestResult.level)}}>
                <span style={{fontSize: '1.2rem', fontWeight: 'bold'}}>{latestResult.level}</span>
                <span data-proof="score-value" style={{fontSize: '2.5rem', fontWeight: 'bold'}}>{latestResult.score}点</span>
              </div>
              <h4>掚奚アクション</h4>
              <ul data-proof="action-list">
                {latestResult.recommendations.map((rec, i) => (
                  <li key={i}>{rec}</li>
                ))}
              </ul>
            </div>
          )}
           <p style={{fontSize: '0.8rem', color: '#666', marginTop: '2rem', borderTop: '1px solid #ddd', paddingTop: '1rem'}}>
            簡易モデルであるこずにご泚意ください。最終的な刀断は、必ず自治䜓等の公匏情報をご確認ください。
          </p>
        </div>
      </div>
    </div>
  );
}