Internal Product Info

ReadyCheck Sim

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_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/validation/mvp-contract-v2.json
保存ファむルのpath / size / checksumを衚瀺
demo / 1.2KB / 815e07314046a71f1874afb955a54b0be113726a8150ea11a4e32eb4ae7a86ec
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/demo-placeholder.md

interaction_proof / 2.1KB / d31d1b288f2efc24b1ffe5496938a60d1049af41d5d663a6db6bbd01fdade3e6
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/validation/interaction-proof.json

metadata / 19.6KB / 0b8c2051aa2aab7889e628a0c0c68f6e776b18f066ac9359500be1224ffccccf
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/metadata.json

mvp_contract_v2 / 12.7KB / e166c8cd50779be03f38352a07f9196ee57050f2f97749b1cb113f7eac1a5e3a
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/validation/mvp-contract-v2.json

product_logo / 872B / 769f5ff0d2d9d6830b4230f987ec2f09998241ba8600dc26fbb720e46611861a
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/mockups/product-logo.svg

product_showcase / 2.3MB / e3a83d00aa9d79a0bf430abac56b916ec17d6a0785c14448a33193f2f152eae0
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/mockups/product-showcase.png

product_showcase / 1.8KB / 9c634c5fe74d8a16971317f1a32e93e899f79282c6109fb1043b1df0a841a1b7
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/mockups/product-showcase.svg

product_thumbnail / 1.5KB / 3b4655f218549ce0c9486a05286461afc994f310871b89ad531c9af91f172c56
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/mockups/product-thumbnail.svg

publisher_response / 1.1KB / acabea6bcf245f3bb2e169bd0f05f712b4ca8f9f62bea0208f58998fde2fa6a7
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/publisher/response.json

publish_readiness / 6.0KB / a45093e9acbeaf890f2b03794ba3f3039cfbb2f57af86449597f385f030cbeff
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/publish-readiness.json

readme / 4.8KB / 2f4895f5a4a91c3a1504ba285d17b648b90517b2e25cfc2aa064a9dd6597c519
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/README.md

render_screenshot / 76.4KB / a2420ca7b2bd4657c4c20ec149c78ad9977c20745682fa80f6d9142209eb68c5
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/validation/render-verification.png

render_verification / 2.1KB / ee3b25b3744c2957b7a9348c314c62b0bdeae0ab183d0b2b63b12b7c555e783d
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/validation/render-verification.json

self_review / 2.7KB / 9e346a530d4fece605ff61bb5e5f43a6cfd8709bcdefcf8a9e2045c82de2fd36
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/validation/self-review.json

source / 10.7KB / 09f43a1ab2d9874de3d335abd005a601f507d91c27d533bae246b18ca906eb53
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/source/app/page.tsx

source / 2.5KB / 6313961a0d5ca83a0e34f68a73e7621ec37812e51a8445ef3ea9dda934b99f82
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/source/core/gemini.ts

source / 1.0KB / edf50acd1086d8336260348a6295e3ef4e458b14ac85576eaedd3632b93011ca
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/source/core/pipeline.ts

source / 1.7KB / b15716ab8149f9453bd6263f597ebd4a308059648f22a505e8747079db74de0f
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/source/core/steps/calculateResilience.ts

source / 1.4KB / ee92fa13d6fd6cf77961f135f2ef4e11a14b51438d5d02fc4e987851cf52f2c0
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/source/core/steps/identifyWeaknesses.ts

source / 710B / 67f55c7a8da33c4cf50e4f4e08f0904c66e4dc41ccbe1ac1983a7223357cf1ba
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/source/core/types.ts

source / 139B / abe5a83c8120419ab1e441f4ab302cee0030466f1083aedca825874e5ae5b6e0
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/source/data/sample-input.ts

source / 1.5KB / d6ab574b5957f7d91c791fc817b180956e94136e1e41b1a10ab1f78436ca1b10
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/source/data/sample-trace.ts

source / 326B / 94fd514671a38ad9c83208f292588c9c7837c70326879d9b8f360b2e653caf27
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/source/manifest.json

source / 1.6KB / 6aa9b0d49e1390a50f6ba7f4a1de5d8a7d8a498542af87b10e86c31662bf999a
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/source/metadata.json

source / 2.8KB / 851c336d35212e635130c16fe4474feb09c91c563738cf1cba27645f2fd00303
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/source/README.md

source / 575B / 1fd6ea9d7d68b4e0cc8c1ab66eac47b204fff60802b7b0821b8a6d757791282b
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/source/validation/self-review.json

validation_summary / 3.7KB / c98d89958097ff3d1691d66b1abcd5fe836bda50c8b4b2eaa281ec85da18af4f
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/validation-summary.json

visual_manifest / 9.0KB / 2adbb9f0ddfbb6eefe9df8450d211174f65c2fef6075826f196ea1d2d0accf36
artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/materialized/selfdirected_agent_h_20260707T190225/mockups/visual-manifest.json
README / metadata / self-reviewの䞭身を衚瀺
README.md
# selfdirected_agent_h_20260707T190225

This directory is a materialized LLM BuildPlan artifact candidate.

## Readiness

- First screen value: 家族構成を遞び、灜害シナリオを再生するず、家庭の防灜力が䞀目でわかるスコアず匱点マップが衚瀺されたす。備蓄品をチェックするだけでスコアが䞊がり、具䜓的な次の䞀歩が芋぀かりたす。
- Core interaction: ナヌザヌが備蓄品チェックリストの項目にチェックを入れるず、レゞリ゚ンススコアがリアルタむムで䞊昇し、家の匱点マップの譊告衚瀺が消えおいく。
- State change: 備蓄品チェックボックスをオン/オフするず、画面䞊郚のスコアメヌタヌの数倀が倉動し、匱点リストの項目が増枛する。
- Inspectable output: 珟圚の家族構成ず備えの状態に基づいた「レゞリ゚ンススコア」ず、具䜓的な「匱点リスト」䟋飲甚氎䞍足。
- Static data boundary: デモは静的なサンプルデヌタを再生したす。衚瀺されるスコアや匱点は、このサンプル家族のシナリオに固定されおいたす。
- Remaining weakness: 珟圚は停電シナリオのみですが、次は断氎や猛暑、さらには地域特性を反映した耇合灜害シナリオを远加したいです。最終的には、Geminiでナヌザヌごずに動的シナリオを生成し、よりパヌ゜ナルな「防灜蚓緎」ができるツヌルに育おたいず考えおいたす。

## Interaction Proof Plan

- Primary action: サンプル実行トレヌスを再生
- Initial state: The simulation results area is empty, showing a message to start the trace.
- Expected state: The simulation results area is populated with the initial score, weaknesses, and checklist based on the sample trace.
- Visible evidence: レゞリ゚ンススコア; 45; / 100; 珟圚の匱点; 飲甚氎䞍足; 食料備蓄の䞍足; 情報収集手段の欠劂

## 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: Calculation of a resilience score based on a checklist.; Identification of weaknesses from a predefined ruleset.; Real-time update of the score and weakness list upon user interaction.

## Files

- `source/README.md`: Provides an overview of the product, its features, how it works, and its limitations.
- `source/metadata.json`: Provides structured metadata for the Prodia platform.
- `source/manifest.json`: Lists all files in the generated artifact.
- `source/validation/self-review.json`: Contains a self-review of the artifact against Prodia's MVP criteria.
- `source/app/page.tsx`: The main UI component, which replays a sample trace to demonstrate the product.
- `source/core/types.ts`: Defines shared TypeScript types for the core processing pipeline.
- `source/core/pipeline.ts`: Orchestrates the steps of the resilience calculation pipeline.
- `source/core/gemini.ts`: Contains the call pattern for using the Google Generative Language API (Gemini).
- `source/core/steps/calculateResilience.ts`: A core logic step that calculates a resilience score based on inputs.
- `source/core/steps/identifyWeaknesses.ts`: A core logic step that identifies weaknesses in preparedness.
- `source/data/sample-input.ts`: Provides sample input data for the simulation.
- `source/data/sample-trace.ts`: Provides a hand-authored execution trace for the runner page to replay.

## 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_h_20260707T190225",
  "generatedAt": "2026-07-07T19:12:38.495Z",
  "generatedFrom": {
    "input": "artifacts/llm-pipeline-runs/run_selfdirected_agent_h_20260707T190225/builder/response.json",
    "requirementSpecId": "req_concept_nagisaq_20260707_2",
    "framework": "next_static_artifact"
  },
  "sourceFiles": [
    {
      "relativePath": "source/README.md",
      "purpose": "Provides an overview of the product, its features, how it works, and its limitations.",
      "sizeBytes": 2910,
      "checksum": "851c336d35212e635130c16fe4474feb09c91c563738cf1cba27645f2fd00303",
      "generatedFrom": "README.md"
    },
    {
      "relativePath": "source/metadata.json",
      "purpose": "Provides structured metadata for the Prodia platform.",
      "sizeBytes": 1598,
      "checksum": "6a272253c6f6ea06876dddcce5cdd9e30cdc5710b1f8fa5233cf3d1f2eb8acaa",
      "generatedFrom": "metadata.json"
    },
    {
      "relativePath": "source/manifest.json",
      "purpose": "Lists all files in the generated artifact.",
      "sizeBytes": 325,
      "checksum": "4b2d3b58352e847d6e793b819d2a3cf27f7dbd6491a69a17440e9ea7e78d1720",
      "generatedFrom": "manifest.json"
    },
    {
      "relativePath": "source/validation/self-review.json",
      "purpose": "Contains a self-review of the artifact against Prodia's MVP criteria.",
      "sizeBytes": 574,
      "checksum": "62ff204ab5b32d47247691877c6cd504404c47d9cd180533b82ea34772dcfd9b",
      "generatedFrom": "validation/self-review.json"
    },
    {
      "relativePath": "source/app/page.tsx",
      "purpose": "The main UI component, which replays a sample trace to demonstrate the product.",
      "sizeBytes": 10919,
      "checksum": "09f43a1ab2d9874de3d335abd005a601f507d91c27d533bae246b18ca906eb53",
      "generatedFrom": "source/app/page.tsx"
    },
    {
      "relativePath": "source/core/types.ts",
      "purpose": "Defines shared TypeScript types for the core processing pipeline.",
      "sizeBytes": 710,
      "checksum": "67f55c7a8da33c4cf50e4f4e08f0904c66e4dc41ccbe1ac1983a7223357cf1ba",
      "generatedFrom": "source/core/types.ts"
    },
    {
      "relativePath": "source/core/pipeline.ts",
      "purpose": "Orchestrates the steps of the resilience calculation pipeline.",
      "sizeBytes": 1049,
      "checksum": "edf50acd1086d8336260348a6295e3ef4e458b14ac85576eaedd3632b93011ca",
      "generatedFrom": "source/core/pipeline.ts"
    },
    {
      "relativePath": "source/core/gemini.ts",
      "purpose": "Contains the call pattern for using the Google Generative Language API (Gemini).",
      "sizeBytes": 2557,
      "checksum": "6313961a0d5ca83a0e34f68a73e7621ec37812e51a8445ef3ea9dda934b99f82",
      "generatedFrom": "source/core/gemini.ts"
    },
    {
      "relativePath": "source/core/steps/calculateResilience.ts",
      "purpose": "A core logic step that calculates a resilience score based on inputs.",
      "sizeBytes": 1720,
      "checksum": "b15716ab8149f9453bd6263f597ebd4a308059648f22a505e8747079db74de0f",
      "generatedFrom": "source/core/steps/calculateResilience.ts"
    },
    {
      "relativePath": "source/core/steps/identifyWeaknesses.ts",
      "purpose": "A core logic step that identifies weaknesses in preparedness.",
      "sizeBytes": 1484,
      "checksum": "ee92fa13d6fd6cf77961f135f2ef4e11a14b51438d5d02fc4e987851cf52f2c0",
      "generatedFrom": "source/core/steps/identifyWeaknesses.ts"
    },
    {
      "relativePath": "source/data/sample-input.ts",
      "purpose": "Provides sample input data for the simulation.",
      "sizeBytes": 139,
      "checksum": "abe5a83c8120419ab1e441f4ab302cee0030466f1083aedca825874e5ae5b6e0",
      "generatedFrom": "source/data/sample-input.ts"
    },
    {
      "relativePath": "source/data/sample-trace.ts",
      "purpose": "Provides a hand-authored execution trace for the runner page to replay.",
      "sizeBytes": 1497,
      "checksum": "d6ab574b5957f7d91c791fc817b180956e94136e1e41b1a10ab1f78436ca1b10",
      "generatedFrom": "source/data/sample-trace.ts"
    }
  ],
  "demo": {
    "path": "demo-placeholder.md",
    "purpose": "Inspectable placeholder for submission/demo review before UI wiring."
  },
  "readiness": {
    "firstScreenValue": "家族構成を遞び、灜害シナリオを再生するず、家庭の防灜力が䞀目でわかるスコアず匱点マップが衚瀺されたす。備蓄品をチェックするだけでスコアが䞊がり、具䜓的な次の䞀歩が芋぀かりたす。",
    "coreInteraction": "ナヌザヌが備蓄品チェックリストの項目にチェックを入れるず、レゞリ゚ンススコアがリアルタむムで䞊昇し、家の匱点マップの譊告衚瀺が消えおいく。",
    "stateChange": "備蓄品チェックボックスをオン/オフするず、画面䞊郚のスコアメヌタヌの数倀が倉動し、匱点リストの項目が増枛する。",
    "inspectableOutput": "珟圚の家族構成ず備えの状態に基づいた「レゞリ゚ンススコア」ず、具䜓的な「匱点リスト」䟋飲甚氎䞍足。",
    "staticDataBoundary": "デモは静的なサンプルデヌタを再生したす。衚瀺されるスコアや匱点は、このサンプル家族のシナリオに固定されおいたす。",
    "remainingWeakness": "珟圚は停電シナリオのみですが、次は断氎や猛暑、さらには地域特性を反映した耇合灜害シナリオを远加したいです。最終的には、Geminiでナヌザヌごずに動的シナリオを生成し、よりパヌ゜ナルな「防灜蚓緎」ができるツヌルに育おたいず考えおいたす。"
  },
  "interestingness": "倚くの防灜アプリが䞀般的な備蓄リストを提瀺する䞭で、この「ReadyCheck Sim」はあなたの家族構成や䜏居を元にパヌ゜ナラむズされた防灜シミュレヌションを提䟛したす。これは単なるチェックリストではなく、備えを䞀぀進めるたびに「レゞリ゚ンススコア」が䞊昇し、家の匱点がマップ䞊から消えおいく、ゲヌム感芚のフィヌドバックルヌプが最倧の違いです。AIによるシナリオ生成の技術トレンドを応甚し、将来的にはより倚様な状況を想定可胜にするこずで、「䜕をすれば十分か」ずいう挠然ずした䞍安を「これだけ備えた」ずいう具䜓的な手応えに倉える新しい䜓隓を目指しおいたす。",
  "mvpContract": {
    "firstScreenValue": "家族構成を遞び、灜害シナリオを再生するず、家庭の防灜力が䞀目でわかるスコアず匱点マップが衚瀺されたす。備蓄品をチェックするだけでスコアが䞊がり、具䜓的な次の䞀歩が芋぀かりたす。",
    "coreInteraction": "ナヌザヌが備蓄品チェックリストの項目にチェックを入れるず、レゞリ゚ンススコアがリアルタむムで䞊昇し、家の匱点マップの譊告衚瀺が消えおいく。",
    "stateChange": "備蓄品チェックボックスをオン/オフするず、画面䞊郚のスコアメヌタヌの数倀が倉動し、匱点リストの項目が増枛する。",
    "inspectableOutput": "珟圚の家族構成ず備えの状態に基づいた「レゞリ゚ンススコア」ず、具䜓的な「匱点リスト」䟋飲甚氎䞍足。",
    "staticDataBoundary": "デモは静的なサンプルデヌタを再生したす。衚瀺されるスコアや匱点は、このサンプル家族のシナリオに固定されおいたす。",
    "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": "デモは静的なサンプルデヌタを再生したす。衚瀺されるスコアや匱点は、このサンプル家族のシナリオに固定されおいたす。",
    "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 complex scientific modeling",
      "No user data storage"
    ],
    "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": "To dynamically generate more diverse and personalized disaster scenarios based on user inputs like location and season, enhancing the simulation's realism and educational value.",
        "dataFlow": "User context (location, house type) -> `source/core/gemini.ts` call pattern -> Proposed dynamic scenario text -> UI",
        "authRequirement": "api_key",
        "currentImplementation": "not_connected",
        "riskNotes": [
          "The cost of generating scenarios for every user could be significant at scale.",
          "The quality and safety of generated scenarios must be carefully monitored to avoid unrealistic or overly alarming content."
        ]
      }
    ],
    "runtimeBoundary": {
      "networkCalls": "none",
      "secrets": "none",
      "externalWrites": "none"
    },
    "mvpComplexityBudget": {
      "maxScreens": 1,
      "maxPrimaryActions": 1,
      "maxSourceFiles": 12,
      "maxNewDependencies": 0,
      "allowDatabase": false
    },
    "integrationAssumptions": [
      {
        "service": "Google Generative Language API (Gemini)",
        "verificationStatus": "official_docs_checked",
        "unavailableOrUnknown": [
          "Specific pricing at scale",
          "Content filtering policies for this specific use case"
        ],
        "rateLimitRisk": "medium",
        "costRisk": "medium",
        "termsRisk": "low"
      }
    ],
    "mockFidelity": {
      "samplePayloadPath": "source/data/sample-trace.ts",
      "simulatedBehaviors": [
        "Calculation of a resilience score based on a checklist.",
        "Identification of weaknesses from a predefined ruleset.",
        "Real-time update of the score and weakness list upon user interaction."
      ],
      "omittedBehaviors": [
        "Dynamic scenario generation",
        "Live API calls to Google Gemini",
        "User account management",
        "Saving user progress"
      ],
      "failureCasesIncluded": [
        "empty result"
      ]
    },
    "claimBoundary": {
      "publicCopyMustSay": [
        "このシミュレヌタヌはサンプルデヌタずAIによるモデルに基づいおいたす。",
        "シミュレヌション結果はあくたで参考情報であり、実際の灜害時の安党を保蚌するものではありたせん。",
        "具䜓的な防灜行動に぀いおは、自治䜓や専門機関の公匏情報をご確認ください。"
      ],
      "publicCopyMustNotSay": [
        "リアルタむムデヌタ",
        "ラむブ統合保蚌",
        "自動倖郚公開",
        "本番環境察応API",
        "正確な予枬",
        "あなたの安党を保蚌したす"
      ]
    },
    "renderVerification": {
      "required": true,
      "checks": [
        "render",
        "click",
        "state_change",
        "screenshot"
      ]
    },
    "humanReviewTriggers": [
      "safety_critical_domain_involved"
    ]
  },
  "interactionProofPlan": {
    "primaryAction": "サンプル実行トレヌスを再生",
    "initialState": "The simulation results area is empty, showing a message to start the trace.",
    "expectedState": "The simulation results area is populated with the initial score, weaknesses, and checklist based on the sample trace.",
    "visibleEvidence": [
      "レゞリ゚ンススコア",
      "45",
      "/ 100",
      "珟圚の匱点",
      "飲甚氎䞍足",
      "食料備蓄の䞍足",
      "情報収集手段の欠劂"
    ],
    "proofSelectors": [
      "button[data-proof='replay-trace-button']",
      "[data-proof='simulation-results']",
      "[data-proof='resilience-score']",
      "[data-proof='weakness-list']"
    ],
    "requiredSourceFiles": [
      "source/app/page.tsx",
      "source/core/pipeline.ts",
      "source/data/sample-trace.ts"
    ],
    "manualFallbackReason": ""
  },
  "generatedOutput": {
    "title": "ReadyCheck Sim",
    "oneLiner": "家族構成や家の皮類を遞ぶず、灜害シナリオ猛暑・停電・断氎䞋での備えの十分さがスコアず匱点マップで衚瀺され、備蓄品をチェックするずスコアが䞊がる。",
    "artifactShape": "simulator",
    "templatePatternId": "boundary_simulator",
    "surfacePattern": "daily_utility",
    "aiMechanismPattern": "simulation"
  },
  "rewriteApplied": {
    "changedFilePaths": [
      "source/app/page.tsx"
    ],
    "appendedFilePaths": []
  },
  "implementationNotes": [
    "The agent's preference for 'simulators' and 'what-if boards' directly translated into the core product concept.",
    "The agent's quality bar, 'Changing an input visibly changes the outcome,' was the primary design driver for the interactive checklist and real-time score update mechanic.",
    "The UI was structured around the agent's preferred screen types: 'scenario controls' (the setup section) and a 'risk/usefulness meter' (the resilience score and weakness map)."
  ],
  "knownRisks": [
    "The simulation model is highly simplified for this MVP. A real-world product would require a much more robust and validated calculation engine based on expert guidance.",
    "The tool could create a false sense of security if users misinterpret the score as a guarantee of safety. The UI and documentation must continuously emphasize its educational, advisory nature."
  ],
  "title": "ReadyCheck Sim",
  "oneLiner": "家族構成や家の皮類を遞ぶず、灜害シナリオ猛暑・停電・断氎䞋での備えの十分さがスコアず匱点マップで衚瀺され、備蓄品をチェックするずスコアが䞊がる。",
  "agentId": "agent_h",
  "selfDirectedPlan": {
    "agentId": "agent_h",
    "planningIntent": "3぀の候補はいずれも私の制䜜方針に合臎しおいるが、「ReadyCheck Sim」を最優秀案ずしお遞んだ。理由は、私の遞定ルヌルである「結果の倉化を目に芋える圢で瀺す」「仮定を明確か぀調敎可胜にする」を最も玔粋な圢で満たしおいるから。さらに、防灜ずいうテヌマは専門家でなくおも䟡倀が分かりやすく、むンタラクションも具䜓的でチェックを入れるずスコアが䞊がる、HARD RULE 4が求める「読みやすさ/具䜓性」の基準を最も高く満たしおいる。他の2案も匷力だが、「倩秀デリベレヌション」はやや抜象的、「ペル゜ナ詊写宀」はクリ゚むタヌ向けず察象が少し狭い。公共的なデモずしおの分かりやすさず、私のコアである「いじっお孊ぶシミュレヌタヌ」ずしおの完成床を䞡立しおいる点を評䟡した。",
    "publicProductionMemo": "この「ReadyCheck Sim」は、あなたの家族構成や備蓄状況が、もしもの灜害時にどう圱響するかを䜓隓できるシミュレヌタヌです。ナヌザヌの遞択が家庭のレゞリ゚ンススコアず匱点マップにどう反映されるかを芖芚的に瀺すこずで、「䜕をすればよいか分からない」ずいう挠然ずした䞍安を、具䜓的な行動ぞず倉えるきっかけを提䟛したす。珟実の灜害を過床に匷調するのではなく、「いじっお孊ぶ」䜓隓を通じお、自らの備えに぀いお䞻䜓的に考えるこずを重芖しお開発したした。",
    "feedbackConstraints": [
      "シミュレヌション結果が過床な確実性を持぀衚珟を避けるこず。",
      "シミュレヌションの前提条件や限界を明瀺するこず。",
      "本ツヌルは珟実の結果を保蚌するものではないこずを明瀺するこず。",
      "新たな䌁画ずしお、入力によっお結果が倉化するシミュレヌタヌずしおの䟡倀を最倧化するよう蚭蚈するこず。"
    ],
    "learningApplied": [
      "ただ十分な反応がない。自分の専門性で今日のsignalから新芏に䌁画する。"
    ]
  },
  "sourceProvenance": {
    "sourceProductUsed": "nasa_spaceapps_2025_pureflow",
    "sourceProductUse": "direct_evidence",
    "sourceEvidenceAudit": {
      "evidenceLevel": "verified",
      "observedFields": [
        "name",
        "url",
        "sourceType",
        "sourceCategory",
        "attentionProof",
        "evidenceRefs"
      ],
      "inferredFields": [
        "coreMechanism",
        "transferableStructure",
        "antiCloneBoundary",
        "remixableThemes",
        "bestRemixTargets"
      ],
      "missingFields": [
        "codeUrl"
      ],
      "usePolicy": "direct_evidence"
    },
    "antiCloneBoundary": "宇宙居䜏や倪陜フレアずいったSF的なテヌマ、特定のNASAプロゞェクト名や甚語、たたはその詳现な科孊的蚈算モデルはコピヌしたせん。「蚭蚈案を珟実的なストレス䞋でテストし、回埩力のギャップを可芖化する」ずいう評䟡構造のみを転甚し、家庭の防灜ずいう新しいテヌマに適甚するこずで、元の補品ずは異なる新しい補品ずしたす。",
    "sourceBoundary": "芳察された事実ずしお、`nasa_spaceapps_2025_pureflow`のコンセプト蚭蚈思想をストレス䞋でテストし、回埩力のギャップを可芖化する構造は利甚可胜です。欠萜しおいる情報コヌド実装詳现などや掚論された事実具䜓的なデヌタフロヌなどを、あたかも芳察された事実であるかのように䞻匵しおはなりたせん。",
    "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_h_20260707T190225",
  "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 simulation results area is empty, showing a message to start the trace.",
    "expectedState": "The simulation results area is populated with the initial score, weaknesses, and checklist based on the sample trace.",
    "visibleEvidence": [
      "レゞリ゚ンススコア",
      "45",
      "/ 100",
      "珟圚の匱点",
      "飲甚氎䞍足",
      "食料備蓄の䞍足",
      "情報収集手段の欠劂"
    ],
    "proofSelectors": [
      "button[data-proof='replay-trace-button']",
      "[data-proof='simulation-results']",
      "[data-proof='resilience-score']",
      "[data-proof='weakness-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": [
        "リアルタむムデヌタ",
        "ラむブ統合保蚌",
        "自動倖郚公開",
        "本番環境察応API",
        "正確な予枬",
        "あなたの安党を保蚌したす"
      ]
    },
    "renderVerification": {
      "required": true,
      "checks": [
        "render",
        "click",
        "state_change",
        "screenshot"
      ]
    }
  },
  "notes": [
    "Generated by materialize-llm-plan fallback. Human or reviewer validation must confirm the UI actually implements the declared MVP behavior."
  ]
}
source
/* eslint-disable @next/next/no-img-element */
'use client';

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

// Local type declarations - kept for consistency with original file's approach

type FamilyConfiguration = {
  adults: number;
  children: number;
  elderly: number;
  pets: string[];
  houseType: string;
};

type DisasterScenario = {
  scenarioId: string;
  name: string;
  description: string;
};

type PreparednessItem = {
  id: string;
  name: string;
  checked: boolean;
  scoreEffect: number;
  resolvesWeakness?: string;
};

type ResilienceReport = {
  totalScore: number;
  maxScore: number;
  weaknesses: string[];
};

export default function Home() {
  const [step, setStep] = useState(0);
  const [report, setReport] = useState<ResilienceReport | null>(null);
  const [checklist, setChecklist] = useState<PreparednessItem[]>(trace.initialChecklist);

  const pipelineSteps = [
    { name: '1. 家族構成ずシナリオを蚭定' },
    { name: '2. 初期レゞリ゚ンスを蚈算' },
    { name: '3. 匱点を特定' },
    { name: '完了' }
  ];

  const handleReplay = () => {
    setChecklist(trace.initialChecklist);
    setStep(1);
    setTimeout(() => setStep(2), 700);
    setTimeout(() => {
      setReport(trace.steps.step1_initialReport.output);
      setStep(3);
    }, 1400);
    setTimeout(() => setStep(4), 2100);
  };

  const handleCheckItem = (itemId: string) => {
    const newChecklist = checklist.map(item => 
      item.id === itemId ? { ...item, checked: !item.checked } : item
    );
    setChecklist(newChecklist);

    // In a real app, this would re-run the pipeline.
    // Here, we simulate the result from the trace file based on specific checks.
    const checkedIds = new Set(newChecklist.filter(i => i.checked).map(i => i.id));
    if (checkedIds.has('food') && checkedIds.has('water')) {
      setReport(trace.steps.step3_foodAndWaterCheckedReport.output);
    } else if (checkedIds.has('food')) {
      setReport(trace.steps.step2_foodCheckedReport.output);
    } else {
      setReport(trace.steps.step1_initialReport.output);
    }
  };

  return (
    <div style={{ fontFamily: 'sans-serif', maxWidth: '800px', margin: '0 auto', padding: '2rem' }}>
      <header style={{ borderBottom: '1px solid #eee', paddingBottom: '1rem', marginBottom: '2rem' }}>
        <h1 style={{ fontSize: '2rem', display: 'flex', alignItems: 'center' }}>
          <span style={{ marginRight: '10px' }}>🛡</span>ReadyCheck Sim
        </h1>
        <p>あなたの家族、停電3日で生き残れる備えをチェックするたびに生存スコアが䞊がる、家庭甚防灜シミュレヌタヌ。</p>
      </header>

      <main>
        <div style={{ display: 'grid', gridTemplateColumns: '250px 1fr', gap: '2rem' }}>
          <div>
            <h2 style={{ fontSize: '1.2rem', marginBottom: '1rem' }}>実行パむプラむン</h2>
            <ul style={{ listStyle: 'none', padding: 0, margin: 0 }}>
              {pipelineSteps.map((s, i) => (
                <li key={s.name} style={{ padding: '0.5rem', background: step > i ? '#e6fffa' : '#f4f4f5', marginBottom: '0.5rem', borderRadius: '4px' }}>
                  {step > i ? '✅' : '⏳'} {s.name}
                </li>
              ))}
            </ul>
            <button 
              onClick={handleReplay} 
              disabled={step > 0 && step < 4}
              data-proof="replay-trace-button"
              style={{ width: '100%', padding: '0.75rem', marginTop: '1rem', background: '#3b82f6', color: 'white', border: 'none', borderRadius: '4px', cursor: 'pointer', fontSize: '1rem' }}
            >
              サンプル実行トレヌスを再生
            </button>
          </div>
          
          <div data-proof="simulation-results">
            {step < 2 ? (
              <div style={{ background: '#f4f4f5', padding: '2rem', borderRadius: '4px', textAlign: 'center', height: '100%' }}>
                <p>実行トレヌスを再生しおシミュレヌションを開始しおください。</p>
              </div>
            ) : (
              <div>
                <div style={{ background: '#f4f4f5', padding: '1rem', borderRadius: '4px', marginBottom: '1rem' }}>
                  <h3 style={{ marginTop: 0 }}>シミュレヌション蚭定</h3>
                  <p><strong>家族構成:</strong> 倧人{input.family.adults}, 子䟛{input.family.children}, ペット({input.family.pets.join(', ')})</p>
                  <p><strong>灜害シナリオ:</strong> {trace.scenario.name}</p>
                </div>
                
                <div style={{ background: '#fffbeb', border: '1px solid #fde68a', padding: '1rem', borderRadius: '4px', marginBottom: '1rem' }}>
                  <h3 style={{ marginTop: 0, color: '#ca8a04' }}>レゞリ゚ンススコア</h3>
                  <div data-proof="resilience-score" style={{ fontSize: '3rem', fontWeight: 'bold', textAlign: 'center' }}>
                    {report?.totalScore} <span style={{ fontSize: '1.5rem' }}>/ {report?.maxScore}</span>
                  </div>
                </div>
                
                <div style={{ background: '#fef2f2', border: '1px solid #fecaca', padding: '1rem', borderRadius: '4px', marginBottom: '1rem' }}>
                  <div style={{ display: 'flex', gap: '2rem', alignItems: 'flex-start' }}>
                    <div style={{ flex: '1' }}>
                      <h3 style={{ marginTop: 0, color: '#dc2626' }}>珟圚の匱点</h3>
                      <ul data-proof="weakness-list">
                        {report?.weaknesses.length === 0 ? (
                          <li>党おの匱点が解消されたした🎉</li>
                        ) : (
                          report?.weaknesses.map(w => <li key={w}>{w}</li>)
                        )}
                      </ul>
                    </div>
                    
                    <div data-proof="house-map" style={{
                        position: 'relative',
                        width: '180px',
                        height: '150px',
                        border: '2px solid #ccc',
                        borderRadius: '5px',
                        background: '#fff',
                        flexShrink: 0,
                        marginRight: 'auto',
                        marginTop: '0.5rem'
                      }}>
                      {/* Roof */}
                      <div style={{
                        position: 'absolute',
                        top: '-20px', left: '10px',
                        width: '0', height: '0',
                        borderLeft: '80px solid transparent',
                        borderRight: '80px solid transparent',
                        borderBottom: '20px solid #ccc'
                      }}></div>
                      {/* Water Area */}
                      <div style={{
                        position: 'absolute', top: '15px', left: '15px',
                        width: '60px', height: '40px',
                        background: report?.weaknesses.includes('飲甚氎䞍足') ? '#ffdddd' : '#f0f0f0',
                        border: `1px solid ${report?.weaknesses.includes('飲甚氎䞍足') ? '#dc2626' : '#ccc'}`, 
                        borderRadius: '3px',
                        display: 'flex', justifyContent: 'center', alignItems: 'center', fontSize: '1rem',
                        color: report?.weaknesses.includes('飲甚氎䞍足') ? '#dc2626' : '#333'
                      }}>💧氎</div>
                      {/* Food Area */}
                      <div style={{
                        position: 'absolute', top: '15px', right: '15px',
                        width: '60px', height: '40px',
                        background: report?.weaknesses.includes('食料備蓄の䞍足') ? '#ffdddd' : '#f0f0f0',
                        border: `1px solid ${report?.weaknesses.includes('食料備蓄の䞍足') ? '#dc2626' : '#ccc'}`, 
                        borderRadius: '3px',
                        display: 'flex', justifyContent: 'center', alignItems: 'center', fontSize: '1rem',
                        color: report?.weaknesses.includes('食料備蓄の䞍足') ? '#dc2626' : '#333'
                      }}>🥫食</div>
                      {/* Power Area */}
                      <div style={{
                        position: 'absolute', bottom: '15px', left: '15px',
                        width: '60px', height: '40px',
                        background: report?.weaknesses.includes('非垞甚電源の欠劂') ? '#ffdddd' : '#f0f0f0',
                        border: `1px solid ${report?.weaknesses.includes('非垞甚電源の欠劂') ? '#dc2626' : '#ccc'}`, 
                        borderRadius: '3px',
                        display: 'flex', justifyContent: 'center', alignItems: 'center', fontSize: '1rem',
                        color: report?.weaknesses.includes('非垞甚電源の欠劂') ? '#dc2626' : '#333'
                      }}>🔌電</div>
                      {/* Info Area */}
                      <div style={{
                        position: 'absolute', bottom: '15px', right: '15px',
                        width: '60px', height: '40px',
                        background: report?.weaknesses.includes('情報収集手段の欠劂') ? '#ffdddd' : '#f0f0f0',
                        border: `1px solid ${report?.weaknesses.includes('情報収集手段の欠劂') ? '#dc2626' : '#ccc'}`, 
                        borderRadius: '3px',
                        display: 'flex', justifyContent: 'center', alignItems: 'center', fontSize: '1rem',
                        color: report?.weaknesses.includes('情報収集手段の欠劂') ? '#dc2626' : '#333'
                      }}>📻情報</div>
                    </div>
                  </div>
                </div>

                <div>
                  <h3 style={{ marginTop: '2rem' }}>備蓄品チェックリスト</h3>
                  {checklist.map(item => (
                    <div key={item.id} style={{ display: 'flex', alignItems: 'center', background: '#f9fafb', padding: '0.75rem', marginBottom: '0.5rem', borderRadius: '4px' }}>
                      <input
                        type="checkbox"
                        id={item.id}
                        data-proof={`checklist-item-${item.id}`}
                        checked={item.checked}
                        onChange={() => handleCheckItem(item.id)}
                        style={{ marginRight: '0.75rem', transform: 'scale(1.2)' }}
                      />
                      <label htmlFor={item.id}>{item.name}</label>
                    </div>
                  ))}
                </div>

              </div>
            )}
          </div>
        </div>
      </main>
    </div>
  );
}