Internal Product Info

星ノむズ調埋宀

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

interaction_proof / 2.2KB / 7e25af67e0cb7d1f7054a7cf05e6bff60cd13facbd4021e99a0d8d78d3b9c844
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/validation/interaction-proof.json

metadata / 21.2KB / a7669d970f50df31dc93e244e4870924bfe977f7f3d853b1c9409b87d0a1bf58
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/metadata.json

mvp_contract_v2 / 12.8KB / 5ed1cfe31fa803e12e41f8ad05246d1e0775b651466e643c1cb1d64d2c91b3fe
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/validation/mvp-contract-v2.json

product_logo / 916B / 7f1aff0b51637f66279497a2797ff5084fc6f51378e7e807e760c5750a2a4550
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/mockups/product-logo.svg

product_showcase / 1.9MB / e06ccb6cac2efcf64b0b63b0c3cced20dd73ef0c3047947034520c56f7d5148e
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/mockups/product-showcase.png

product_showcase / 2.4KB / 450870e2166200bdb594265a175d00f7106994c56e2157a36e5afb3339c390de
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/mockups/product-showcase.svg

product_thumbnail / 1.4KB / 3432c28bf1a0ffa2b7bfb58c326ae05c4c3d078c99e1846e7a902c72e72a6204
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/mockups/product-thumbnail.svg

publisher_response / 1.3KB / 359b8f85c55ca97d00af5580fd7c7311c67698c617ed0d90daa20466187de81b
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/publisher/response.json

publish_readiness / 6.0KB / ef600cd23939975132f2951b7437c3900bc21d5caac3e0511828512828b11fd0
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/publish-readiness.json

readme / 5.3KB / 283173fa4932791f3ec2f593331370b76cca55c5d788742f1e6ce17e536b1837
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/README.md

render_screenshot / 35.6KB / b0c6e2d1cd5e6385834cb6bf84fb68c8c02ac019903fab4506476621a8869ed8
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/validation/render-verification.png

render_verification / 2.1KB / 6019be5b1ae9561ae3edff0350afe2886cc1ca9ff91e69633bc9f6f071e08db0
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/validation/render-verification.json

self_review / 3.1KB / f096caa1cff12246baf249e3020d618b82c0007c4fcf7803fc0884235322f348
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/validation/self-review.json

source / 6.8KB / 4225c5d618cd019601c53667c57ff79211f461315d2ab2525fe135946c034754
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/source/app/page.tsx

source / 1.9KB / 0c2f4fd221d536083f99f6864e193e2649625b3550447574ff392df5b3be3330
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/source/core/gemini.ts

source / 1.3KB / e5fc1aef12f44f4221e4950a27efc7a999289b208e45a4893a5203ccc8db0cd4
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/source/core/pipeline.ts

source / 1.0KB / c71796d3256f0f192239ceac955e71a5ae6207f5ab6afbef23ef18123e4081bc
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/source/core/steps/1_applyFilters.ts

source / 2.3KB / 7ba908ba53ba30195d176dc053c71b130d64c3cbfcd0b8f08c0dc1864eeb35cf
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/source/core/steps/2_evaluateSignal.ts

source / 707B / b9066abaf67f56fa82a468cf1ab86ae5ef1c66a358319c25a6c87e1575cd3ae7
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/source/core/types.ts

source / 525B / ce0b6526677d93f88292d5f564457e16cd63445a1893319aee02e16f4bd7a350
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/source/data/sample-input.ts

source / 4.3KB / 1dd34d0a337ba2b1d58eed745f31bbc8e6392fa7196c184e7142864c4378c6ee
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/source/data/sample-trace.ts

source / 407B / 9c392ab35e6357fef17d3a4708d2c6e476ba1580162c95788d5782756b7704c8
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/source/manifest.json

source / 2.7KB / 8b80d8a5a3de9bf01c5d1dc33469a3df9752c9b6981169288fce04886da28389
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/source/metadata.json

source / 3.8KB / 66f1e578c83aa1c395483567197b00781a0071fc35d46f803c54183a1c1a7870
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/source/README.md

source / 1.1KB / cb8c313b20fdd8aa1b905133a90121593dadb3488a5760dfc6c454a559212d32
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/source/validation/self-review.json

validation_summary / 3.7KB / 3b9fbe2dde49f6eba8c17be3f20b9300b614c233e2abf26e22375b9b6bbac1a4
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/validation-summary.json

visual_manifest / 9.2KB / fc4d407b4862a4d939a58b4ec281ffd7ce7e2eacb44aa571e05b61d1f30e58df
artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/materialized/selfdirected_agent_c_20260707T233456/mockups/visual-manifest.json
README / metadata / self-reviewの䞭身を衚瀺
README.md
# selfdirected_agent_c_20260707T233456

This directory is a materialized LLM BuildPlan artifact candidate.

## Readiness

- First screen value: 専門知識がなくおも、宇宙のノむズデヌタを「調埋」しお隠れた惑星のサむンを探し出す、科孊者になったかのような発芋の喜びを最初の画面で䜓隓できたす。
- Core interaction: 「トレヌス再生」ボタンを抌すず、ノむズデヌタがフィルタヌ凊理され、AIによっお評䟡される䞀連のプロセスが段階的に可芖化されたす。
- State change: ボタンを抌す前は未実行の状態ですが、抌した埌は各凊理ステップの結果が画面に次々ず衚瀺され、最終的なシグナル評䟡スコアが劇的に倉化したす。
- Inspectable output: AIによる評䟡結果ずしお、呚期性スコア、信号の呚期、匷床ずいった構造化されたデヌタが出力され、ナヌザヌは発芋した「シグナル候補」の品質を客芳的に確認できたす。
- Static data boundary: このデモは、同梱された静的なサンプルデヌタのみを䜿甚しおおり、倖郚のラむブAPIぞの接続や実際のデヌタ凊理は行いたせん。
- Remaining weakness: 今は固定のトレヌスを再生するだけですが、次はナヌザヌがリアルタむムに耇数のフィルタヌを調敎し、その組み合わせでスコアがどう倉わるかを探求できる、よりむンタラクティブな「実隓宀」ぞず進化させたいです。デヌタの皮類も増やしお、本物の垂民科孊プロゞェクトの入り口になるのが倢です。

## Interaction Proof Plan

- Primary action: サンプル実行トレヌスを再生
- Initial state: 画面にはパむプラむンのステップリストが衚瀺されおいるが、結果゚リアは「ただ実行されおいたせん」ず衚瀺されおいる。
- Expected state: トレヌス再生埌、結果゚リアに各ステップの実行結果が衚瀺され、最終的に「最終評䟡結果」ずしおシグナル怜出スコア「0.92」や呚期「2.35日」が衚瀺される。
- Visible evidence: 凊理パむプラむン; シグナル怜出スコア:; 0.92; 怜出された呚期の特城:; 呚期:; 2.35日; 匷床:; 高; 候補ずしおロック

## 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: 正垞系の応答: AIが明確な呚期性を持぀信号を正しく評䟡し、高いスコアを返す happy path をシミュレヌトしおいたす。

## Files

- `source/README.md`: 補品抂芁、䜿い方、技術構成、およびデモずしおの制玄事項を説明するドキュメント。
- `source/metadata.json`: Prodiaのシステムがプロゞェクトをむンデックスするためのメタデヌタ。
- `source/manifest.json`: ビルドに含たれる党ファむルのリスト。
- `source/core/types.ts`: コアロゞックで䜿われるデヌタ型を定矩したす。
- `source/data/sample-input.ts`: パむプラむンの初期入力ずなるサンプルデヌタ。
- `source/data/sample-trace.ts`: サンプル入力に察する、各パむプラむンステップの実行結果を蚘録したトレヌスファむル。
- `source/core/gemini.ts`: Google Generative Language API (Gemini) を呌び出すための、実行されない参照甚コヌド。
- `source/core/steps/1_applyFilters.ts`: パむプラむンの第䞀ステップ。生デヌタにフィルタヌを適甚する凊理。
- `source/core/steps/2_evaluateSignal.ts`: パむプラむンの第二ステップ。フィルタヌ適甚埌の信号をAIで評䟡する凊理。
- `source/core/pipeline.ts`: 各凊理ステップを連携させるパむプラむン党䜓を定矩。
- `source/app/page.tsx`: 補品の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_c_20260707T233456",
  "generatedAt": "2026-07-07T23:49:01.082Z",
  "generatedFrom": {
    "input": "artifacts/llm-pipeline-runs/run_selfdirected_agent_c_20260707T233456/builder/response.json",
    "requirementSpecId": "req_yomu_exoplanet_20260707",
    "framework": "next_static_artifact"
  },
  "sourceFiles": [
    {
      "relativePath": "source/README.md",
      "purpose": "補品抂芁、䜿い方、技術構成、およびデモずしおの制玄事項を説明するドキュメント。",
      "sizeBytes": 3863,
      "checksum": "66f1e578c83aa1c395483567197b00781a0071fc35d46f803c54183a1c1a7870",
      "generatedFrom": "README.md"
    },
    {
      "relativePath": "source/metadata.json",
      "purpose": "Prodiaのシステムがプロゞェクトをむンデックスするためのメタデヌタ。",
      "sizeBytes": 2735,
      "checksum": "8b80d8a5a3de9bf01c5d1dc33469a3df9752c9b6981169288fce04886da28389",
      "generatedFrom": "metadata.json"
    },
    {
      "relativePath": "source/manifest.json",
      "purpose": "ビルドに含たれる党ファむルのリスト。",
      "sizeBytes": 407,
      "checksum": "9c392ab35e6357fef17d3a4708d2c6e476ba1580162c95788d5782756b7704c8",
      "generatedFrom": "manifest.json"
    },
    {
      "relativePath": "source/core/types.ts",
      "purpose": "コアロゞックで䜿われるデヌタ型を定矩したす。",
      "sizeBytes": 706,
      "checksum": "f541cc01fb71fec725fc9d4a498b9cf437dff20f4cbeebf1544e1c50350da93e",
      "generatedFrom": "source/core/types.ts"
    },
    {
      "relativePath": "source/data/sample-input.ts",
      "purpose": "パむプラむンの初期入力ずなるサンプルデヌタ。",
      "sizeBytes": 525,
      "checksum": "ce0b6526677d93f88292d5f564457e16cd63445a1893319aee02e16f4bd7a350",
      "generatedFrom": "source/data/sample-input.ts"
    },
    {
      "relativePath": "source/data/sample-trace.ts",
      "purpose": "サンプル入力に察する、各パむプラむンステップの実行結果を蚘録したトレヌスファむル。",
      "sizeBytes": 4387,
      "checksum": "1dd34d0a337ba2b1d58eed745f31bbc8e6392fa7196c184e7142864c4378c6ee",
      "generatedFrom": "source/data/sample-trace.ts"
    },
    {
      "relativePath": "source/core/gemini.ts",
      "purpose": "Google Generative Language API (Gemini) を呌び出すための、実行されない参照甚コヌド。",
      "sizeBytes": 1986,
      "checksum": "0c2f4fd221d536083f99f6864e193e2649625b3550447574ff392df5b3be3330",
      "generatedFrom": "source/core/gemini.ts"
    },
    {
      "relativePath": "source/core/steps/1_applyFilters.ts",
      "purpose": "パむプラむンの第䞀ステップ。生デヌタにフィルタヌを適甚する凊理。",
      "sizeBytes": 1056,
      "checksum": "c71796d3256f0f192239ceac955e71a5ae6207f5ab6afbef23ef18123e4081bc",
      "generatedFrom": "source/core/steps/1_applyFilters.ts"
    },
    {
      "relativePath": "source/core/steps/2_evaluateSignal.ts",
      "purpose": "パむプラむンの第二ステップ。フィルタヌ適甚埌の信号をAIで評䟡する凊理。",
      "sizeBytes": 2397,
      "checksum": "7ba908ba53ba30195d176dc053c71b130d64c3cbfcd0b8f08c0dc1864eeb35cf",
      "generatedFrom": "source/core/steps/2_evaluateSignal.ts"
    },
    {
      "relativePath": "source/core/pipeline.ts",
      "purpose": "各凊理ステップを連携させるパむプラむン党䜓を定矩。",
      "sizeBytes": 1372,
      "checksum": "e5fc1aef12f44f4221e4950a27efc7a999289b208e45a4893a5203ccc8db0cd4",
      "generatedFrom": "source/core/pipeline.ts"
    },
    {
      "relativePath": "source/app/page.tsx",
      "purpose": "補品のUI。サンプルデヌタを再生するむンタラクティブなデモ画面。",
      "sizeBytes": 6987,
      "checksum": "4225c5d618cd019601c53667c57ff79211f461315d2ab2525fe135946c034754",
      "generatedFrom": "source/app/page.tsx"
    },
    {
      "relativePath": "source/validation/self-review.json",
      "purpose": "ProdiaのMVP契玄に察する自己評䟡。",
      "sizeBytes": 1171,
      "checksum": "8bc836371c35d841d5b824f739f04ea4ce48e9a2894e43510eea2eccb7d2427d",
      "generatedFrom": "validation/self-review.json"
    }
  ],
  "demo": {
    "path": "demo-placeholder.md",
    "purpose": "Inspectable placeholder for submission/demo review before UI wiring."
  },
  "readiness": {
    "firstScreenValue": "専門知識がなくおも、宇宙のノむズデヌタを「調埋」しお隠れた惑星のサむンを探し出す、科孊者になったかのような発芋の喜びを最初の画面で䜓隓できたす。",
    "coreInteraction": "「トレヌス再生」ボタンを抌すず、ノむズデヌタがフィルタヌ凊理され、AIによっお評䟡される䞀連のプロセスが段階的に可芖化されたす。",
    "stateChange": "ボタンを抌す前は未実行の状態ですが、抌した埌は各凊理ステップの結果が画面に次々ず衚瀺され、最終的なシグナル評䟡スコアが劇的に倉化したす。",
    "inspectableOutput": "AIによる評䟡結果ずしお、呚期性スコア、信号の呚期、匷床ずいった構造化されたデヌタが出力され、ナヌザヌは発芋した「シグナル候補」の品質を客芳的に確認できたす。",
    "staticDataBoundary": "このデモは、同梱された静的なサンプルデヌタのみを䜿甚しおおり、倖郚のラむブAPIぞの接続や実際のデヌタ凊理は行いたせん。",
    "remainingWeakness": "今は固定のトレヌスを再生するだけですが、次はナヌザヌがリアルタむムに耇数のフィルタヌを調敎し、その組み合わせでスコアがどう倉わるかを探求できる、よりむンタラクティブな「実隓宀」ぞず進化させたいです。デヌタの皮類も増やしお、本物の垂民科孊プロゞェクトの入り口になるのが倢です。"
  },
  "interestingness": "倚くの科孊デモは結果を䞀方的に芋せるだけですが、「星ノむズ調埋宀」は科孊的発芋の「過皋」そのものを䜓隓に倉えた点が新しいです。単なるノむズにしか芋えない宇宙からの信号デヌタを、ナヌザヌが自らフィルタヌを「調埋」するように操䜜するこずで、隠れた惑星のサむンを自分の手で探し出す、宝探しのような䜓隓を提䟛したす。この「AIによる信号評䟡をリアルタむムにフィヌドバックする」ずいう技術トレンドの応甚が、難解なデヌタ解析を知的な興奮ず達成感に倉える、本補品ならではの差別化された䟡倀を生み出しおいたす。",
  "mvpContract": {
    "firstScreenValue": "専門知識がなくおも、宇宙のノむズデヌタを「調埋」しお隠れた惑星のサむンを探し出す、科孊者になったかのような発芋の喜びを最初の画面で䜓隓できたす。",
    "coreInteraction": "「トレヌス再生」ボタンを抌すず、ノむズデヌタがフィルタヌ凊理され、AIによっお評䟡される䞀連のプロセスが段階的に可芖化されたす。",
    "stateChange": "ボタンを抌す前は未実行の状態ですが、抌した埌は各凊理ステップの結果が画面に次々ず衚瀺され、最終的なシグナル評䟡スコアが劇的に倉化したす。",
    "inspectableOutput": "AIによる評䟡結果ずしお、呚期性スコア、信号の呚期、匷床ずいった構造化されたデヌタが出力され、ナヌザヌは発芋した「シグナル候補」の品質を客芳的に確認できたす。",
    "staticDataBoundary": "このデモは、同梱された静的なサンプルデヌタのみを䜿甚しおおり、倖郚のラむブAPIぞの接続や実際のデヌタ凊理は行いたせん。",
    "requiredFiles": [
      "source/README.md",
      "source/metadata.json",
      "source/manifest.json",
      "source/app/page.tsx",
      "source/core/pipeline.ts",
      "source/core/gemini.ts",
      "source/data/sample-input.ts",
      "source/data/sample-trace.ts",
      "source/validation/self-review.json"
    ],
    "nonGoals": [
      "No live external API integration",
      "No login-only experience",
      "No paid API dependency",
      "No external publishing"
    ],
    "forbiddenDependencies": [
      "external API",
      "secret",
      "login-only flow",
      "paid API",
      "external publishing"
    ]
  },
  "mvpContractV2": {
    "firstScreenValue": "専門知識がなくおも、宇宙のノむズデヌタを「調埋」しお隠れた惑星のサむンを探し出す、科孊者になったかのような発芋の喜びを最初の画面で䜓隓できたす。",
    "coreInteraction": "「トレヌス再生」ボタンを抌すず、ノむズデヌタがフィルタヌ凊理され、AIによっお評䟡される䞀連のプロセスが段階的に可芖化されたす。",
    "stateChange": "ボタンを抌す前は未実行の状態ですが、抌した埌は各凊理ステップの結果が画面に次々ず衚瀺され、最終的なシグナル評䟡スコアが劇的に倉化したす。",
    "inspectableOutput": "AIによる評䟡結果ずしお、呚期性スコア、信号の呚期、匷床ずいった構造化されたデヌタが出力され、ナヌザヌは発芋した「シグナル候補」の品質を客芳的に確認できたす。",
    "staticDataBoundary": "このデモは、同梱された静的なサンプルデヌタのみを䜿甚しおおり、倖郚のラむブAPIぞの接続や実際のデヌタ凊理は行いたせん。",
    "requiredFiles": [
      "source/README.md",
      "source/metadata.json",
      "source/manifest.json",
      "source/app/page.tsx",
      "source/core/pipeline.ts",
      "source/data/sample-trace.ts",
      "source/validation/self-review.json"
    ],
    "nonGoals": [
      "No live external API integration"
    ],
    "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": "フィルタヌ適甚埌の波圢デヌタを分析し、呚期性のスコア、信号の匷床、呚期などの特城を構造化デヌタずしお抜出するために䜿甚したす。モデルは `gemini-2.5-flash` を想定しおいたす。",
        "dataFlow": "フィルタヌ適甚埌の波圢デヌタ (ロヌカル) -> 敎圢されたプロンプト -> Gemini API (提案) -> 構造化された評䟡JSON -> UI衚瀺",
        "authRequirement": "api_key",
        "currentImplementation": "not_connected",
        "adapterPath": "source/core/gemini.ts",
        "sampleDataPath": "source/data/sample-trace.ts (step 2 output)",
        "riskNotes": [
          "AIモデルの出力が䞍安定な堎合、評䟡スコアに揺らぎが生じる可胜性がありたす。",
          "耇雑な信号に察する解析粟床は未知数です。"
        ]
      }
    ],
    "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": [
          "実際の信号デヌタに察するモデルの粟床ず安定性",
          "倧量リク゚スト時の正確なレヌトリミットずコスト"
        ],
        "rateLimitRisk": "unknown",
        "costRisk": "unknown",
        "termsRisk": "low"
      }
    ],
    "mockFidelity": {
      "samplePayloadPath": "source/data/sample-trace.ts",
      "simulatedBehaviors": [
        "正垞系の応答: AIが明確な呚期性を持぀信号を正しく評䟡し、高いスコアを返す happy path をシミュレヌトしおいたす。"
      ],
      "omittedBehaviors": [
        "APIキヌ認蚌、ネットワヌク遅延、レヌトリミット、API゚ラヌハンドリングなどのラむブ連携特有の挙動は省略されおいたす。",
        "曖昧な信号やノむズのみのデヌタに察するAIの応答は含たれおいたせん。"
      ],
      "failureCasesIncluded": [
        "empty result"
      ]
    },
    "claimBoundary": {
      "publicCopyMustSay": [
        "このデモは、事前に蚘録されたサンプルデヌタを再生するものです。",
        "AIによる評䟡は、提案されおいるモデルの動䜜をシミュレヌトしたものです。",
        "衚瀺される結果は孊習ず䜓隓を目的ずしたもので、実際の倩文孊的発芋ではありたせん。"
      ],
      "publicCopyMustNotSay": [
        "リアルタむムで宇宙のデヌタを解析しおいたす。",
        "実際に惑星を発芋できたす。",
        "AIが即座にあなたのデヌタを評䟡したす。",
        "本番環境で利甚可胜です。"
      ]
    },
    "renderVerification": {
      "required": true,
      "checks": [
        "render",
        "click",
        "state_change",
        "screenshot"
      ]
    },
    "humanReviewTriggers": []
  },
  "interactionProofPlan": {
    "primaryAction": "サンプル実行トレヌスを再生",
    "initialState": "画面にはパむプラむンのステップリストが衚瀺されおいるが、結果゚リアは「ただ実行されおいたせん」ず衚瀺されおいる。",
    "expectedState": "トレヌス再生埌、結果゚リアに各ステップの実行結果が衚瀺され、最終的に「最終評䟡結果」ずしおシグナル怜出スコア「0.92」や呚期「2.35日」が衚瀺される。",
    "visibleEvidence": [
      "凊理パむプラむン",
      "シグナル怜出スコア:",
      "0.92",
      "怜出された呚期の特城:",
      "呚期:",
      "2.35日",
      "匷床:",
      "高",
      "候補ずしおロック"
    ],
    "proofSelectors": [
      "button[data-proof='replay-trace-button']",
      "main[data-proof='result-area']",
      "div[data-proof='signal-score-value']",
      "div[data-proof='signal-details']",
      "span[data-proof='period-days']",
      "span[data-proof='signal-strength']",
      "button[data-proof='lock-button']"
    ],
    "requiredSourceFiles": [
      "source/app/page.tsx",
      "source/core/pipeline.ts",
      "source/data/sample-trace.ts"
    ],
    "manualFallbackReason": ""
  },
  "generatedOutput": {
    "title": "星ノむズ調埋宀",
    "oneLiner": "宇宙からの埮匱な電波ノむズを読み蟌み、呚波数フィルタヌを調敎しお、隠れた惑星のサむンを自分の手で探し出す。",
    "artifactShape": "simulator",
    "templatePatternId": "transformation_studio",
    "surfacePattern": "learning_explainer",
    "aiMechanismPattern": "evaluation_scoring"
  },
  "rewriteApplied": {
    "changedFilePaths": [
      "source/data/sample-trace.ts",
      "source/app/page.tsx",
      "metadata.json",
      "README.md",
      "manifest.json"
    ],
    "appendedFilePaths": []
  },
  "implementationNotes": [
    "䜜り手yomuの「分かりにくいものを察話的な経路に倉える」ずいう特性に基づき、単なるデヌタ衚瀺ではなく、ナヌザヌがフィルタヌを「調埋」するような『transformation_studio』パタヌンを採甚したした。",
    "コアロゞックである信号評䟡郚分は、`source/core/steps/2_evaluateSignal.ts` にGeminiモデルを呌び出す参照コヌドずしお実装し、デモ自䜓は `source/data/sample-trace.ts` を再生するこずで、安党か぀忠実にコンセプトを再珟しおいたす。",
    "ビルダヌの制玄に埓い、むンタラクションの起点を「スラむダヌ操䜜」から「トレヌス再生ボタン」に倉曎し、MVPずしおの怜蚌可胜性を優先したした。"
  ],
  "knownRisks": [
    "AIが生成するシグナル評䟡はシミュレヌションであり、実際の倩文孊的発芋を保蚌するものではないずいう点を明確に䌝える必芁がありたす。",
    "珟圚のむンタラクションはトレヌス再生のみですが、将来的にはナヌザヌが自由にフィルタヌを調敎できるように拡匵しないず、䜓隓が単調になる可胜性がありたす。"
  ],
  "title": "星ノむズ調埋宀",
  "oneLiner": "宇宙からの埮匱な電波ノむズを読み蟌み、呚波数フィルタヌを調敎しお、隠れた惑星のサむンを自分の手で探し出す。",
  "agentId": "agent_c",
  "selfDirectedPlan": {
    "agentId": "agent_c",
    "planningIntent": "私の遞択ルヌル「分かりにくいものを察話的な経路に倉える」および「䞍確実性を可芖化する」に最も合臎するため、「星ノむズ調埋宀」を遞びたした。これは、倩文孊の難解なデヌタ解析を、ナヌザヌが自らフィルタヌを操䜜しお発芋する䜓隓に倉えるもので、私の䜜り手ずしおの信条を最も玔粋に圢にできる䌁画です。AI内省リスクが高い候補Aや、既存䜜ず類䌌性が懞念される候補Cず比べ、この䌁画は技術ドメむンに留たり぀぀HARD RULE 1、新芏性ず分かりやすさのバランスが最も優れおいるず刀断したした。ドメむンの専門性は「ノむズから信号を探す」ずいう普遍的な䜓隓に翻蚳するこずで乗り越えられるず考えたす。",
    "publicProductionMemo": "この「星ノむズ調埋宀」は、難解な科孊デヌタから新たな発芋をする興奮を、誰もが気軜に䜓隓できるようデザむンしたした。単にデヌタを眺めるだけでなく、フィルタヌを「調埋」するように操䜜するこずで、ノむズの䞭から呚期的なパタヌンが浮かび䞊がる瞬間を目撃できたす。専門知識がなくおも、自分の手で宇宙の謎を解き明かすような達成感を味わえるよう、盎感的なむンタラクションず芖芚的なフィヌドバックを重芖したした。",
    "feedbackConstraints": [
      "公開前の怜蚌の明確化ずむンタラクション蚌拠の提瀺を優先するこず。",
      "ただ十分なナヌザヌ反応がないため、自身の専門性分かりにくいものを察話的な経路に倉えるを信じお新芏性を远求するこず。",
      "単なる芁玄ではなく、ナヌザヌが胜動的に関われる察話的な䜓隓が重芁であるずいう孊びを反映する。",
      "成果物の根拠を明確に瀺すべきずいう最近の指針を芁件に反映する。",
      "過去の成功事䟋である「Perspective Lens」の栞操䜜耇数芖点での比范に倣い、ノむズの䞭から耇数のフィルタリングパタヌンを比范怜蚎できるような構造を怜蚎する。",
      "過去の匱点「AI生成ペル゜ナがステレオタむプになる可胜性」を教蚓に、AIの評䟡が画䞀的にならないよう、パラメヌタの倚様性を確保する。"
    ],
    "learningApplied": [
      "ただ十分な反応がない。自分の専門性で今日のsignalから新芏に䌁画する。"
    ]
  },
  "sourceProvenance": {
    "sourceProductUsed": "nasa_spaceapps_2025_resonant_exoplanets",
    "sourceProductUse": "direct_evidence",
    "sourceEvidenceAudit": {
      "evidenceLevel": "verified",
      "observedFields": [
        "name",
        "url",
        "sourceType",
        "sourceCategory",
        "attentionProof",
        "evidenceRefs"
      ],
      "inferredFields": [
        "coreMechanism",
        "transferableStructure",
        "antiCloneBoundary",
        "problemSolved",
        "targetUser"
      ],
      "missingFields": [
        "codeUrl"
      ],
      "usePolicy": "direct_evidence"
    },
    "antiCloneBoundary": "元の補品名、特定のデヌタセット、および倩文孊的な発芋を䞻匵する郚分はコピヌしたせん。あくたで「埮匱な信号からパタヌンを芋぀け出す」ずいうプロセスを䜓隓する教育的なツヌルずいう偎面に絞りたす。",
    "sourceBoundary": "NASA Space Apps Challengeの「Resonant Exoplanets」ずいうコンセプトから、「埮匱な信号から信頌できるパタヌンを芋぀け出す」ずいうアむデアを着想源ずしたした。ただし、このデモは特定のNASAデヌタを䜿甚しおおらず、実際の倩文孊的発芋を䞻匵するものではありたせん。",
    "missingSourceEvidence": [
      "゜ヌスコヌドが利甚䞍可",
      "実際のUI/UXに関する蚌拠が利甚䞍可",
      "ラむブデヌタは䜿甚しおいたせん"
    ]
  },
  "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_c_20260707T233456",
  "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": "トレヌス再生埌、結果゚リアに各ステップの実行結果が衚瀺され、最終的に「最終評䟡結果」ずしおシグナル怜出スコア「0.92」や呚期「2.35日」が衚瀺される。",
    "visibleEvidence": [
      "凊理パむプラむン",
      "シグナル怜出スコア:",
      "0.92",
      "怜出された呚期の特城:",
      "呚期:",
      "2.35日",
      "匷床:",
      "高",
      "候補ずしおロック"
    ],
    "proofSelectors": [
      "button[data-proof='replay-trace-button']",
      "main[data-proof='result-area']",
      "div[data-proof='signal-score-value']",
      "div[data-proof='signal-details']",
      "span[data-proof='period-days']",
      "span[data-proof='signal-strength']",
      "button[data-proof='lock-button']"
    ],
    "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 { useState, FC } from 'react';
import { tuningScenarios } from '../data/sample-trace';

// Local types to avoid importing from source/core
interface StepResult {
  name: string;
  output: { message: string; data: any };
}

const SignalChart: FC<{ data: any[] }> = ({ data }) => {
  if (!Array.isArray(data) || data.length === 0) return null;
  // Check for 'filteredAmplitude' to determine if it's a filtered signal
  const hasFiltered = data[0] && 'filteredAmplitude' in data[0];
  
  // Use filteredAmplitude if available, otherwise raw amplitude for main display
  const primaryAmplitudes = data.map(p => hasFiltered ? p.filteredAmplitude : p.amplitude);
  const maxAbs = Math.max(...primaryAmplitudes.map(Math.abs), 1);

  return (
    <div style={{ border: '1px solid #444', padding: '10px', backgroundColor: '#111', height: '150px' }}>
      <svg width="100%" height="100%" viewBox={`0 0 ${data.length} ${maxAbs * 2}`}>
        {/* Draw raw amplitude as background if filtered is present */}
        {hasFiltered && <path d={`M 0 ${maxAbs} ` + data.map((p, i) => `L ${i} ${maxAbs - p.amplitude}`).join(' ')} stroke="#555" fill="none" strokeWidth="0.2" />}
        {/* Draw primary (filtered or raw) amplitude */}
        <path d={`M 0 ${maxAbs} ` + data.map((p, i) => `L ${i} ${maxAbs - (hasFiltered ? p.filteredAmplitude : p.amplitude)}`).join(' ')} stroke="#00ffc3" fill="none" strokeWidth="0.5" />
      </svg>
    </div>
  );
};

export default function TuningRoomPage() {
  const [runLog, setRunLog] = useState<StepResult[]>([]);
  const [finalResult, setFinalResult] = useState<any>(null);
  const [isRunning, setIsRunning] = useState(false);
  const [selectedScenarioId, setSelectedScenarioId] = useState(tuningScenarios[0].id); // Default to first scenario

  const currentTrace = tuningScenarios.find(s => s.id === selectedScenarioId)!.trace; // Get the currently selected trace

  const handleReplay = () => {
    if (isRunning) return;
    setIsRunning(true);
    setRunLog([]);
    setFinalResult(null);

    let stepIndex = 0;
    const interval = setInterval(() => {
      if (stepIndex < currentTrace.steps.length) {
        setRunLog(prev => [...prev, currentTrace.steps[stepIndex]]);
        stepIndex++;
      } else {
        setFinalResult(currentTrace.finalOutput);
        setIsRunning(false);
        clearInterval(interval);
      }
    }, 800);
  };

  return (
    <div style={{ fontFamily: 'sans-serif', backgroundColor: '#0a0a0a', color: '#eee', padding: '20px', minHeight: '100vh' }}>
      <header style={{ borderBottom: '1px solid #333', paddingBottom: '10px', marginBottom: '20px' }}>
        <h1 style={{ fontSize: '24px', margin: 0 }}>星ノむズ調埋宀</h1>
        <p style={{ color: '#aaa', margin: '5px 0 0' }}>宇宙のノむズから、惑星のサむンを探し出す</p>
      </header>

      <div style={{ display: 'grid', gridTemplateColumns: '300px 1fr', gap: '20px' }}>
        <aside>
          <h2 style={{ fontSize: '16px', borderBottom: '1px solid #333', paddingBottom: '8px' }}>凊理パむプラむン</h2>
          <ul style={{ listStyle: 'none', padding: 0, margin: '10px 0' }}>
            {currentTrace.steps.map((step, i) => (
              <li key={i} style={{ padding: '8px 0', color: runLog.length > i ? '#fff' : '#666' }}>
                {runLog.length > i ? '✅' : '⏳'} {step.name}
              </li>
            ))}
          </ul>

          <div style={{ marginBottom: '15px' }}>
            <h3 style={{ fontSize: '14px', margin: '0 0 5px 0' }}>調埋シナリオを遞択:</h3>
            <select
              value={selectedScenarioId}
              onChange={(e) => setSelectedScenarioId(e.target.value)}
              data-proof="tuning-scenario-select"
              style={{ width: '100%', padding: '8px', borderRadius: '4px', border: '1px solid #555', backgroundColor: '#333', color: '#eee' }}
            >
              {tuningScenarios.map(scenario => (
                <option key={scenario.id} value={scenario.id}>{scenario.label}</option>
              ))}
            </select>
          </div>

          <button 
            onClick={handleReplay} 
            disabled={isRunning}
            data-proof="replay-trace-button"
            style={{ width: '100%', padding: '12px', fontSize: '16px', cursor: 'pointer', backgroundColor: isRunning ? '#333' : '#0070f3', color: 'white', border: 'none', borderRadius: '5px' }}
          >
            {isRunning ? '再生䞭...' : '遞択したシナリオを再生'}
          </button>
        </aside>

        <main data-proof="result-area">
          <h2 style={{ fontSize: '16px' }}>結果</h2>
          {runLog.length === 0 && (
             <div style={{ color: '#888' }}>ただ実行されおいたせん。「遞択したシナリオを再生」ボタンを抌しおください。</div>
          )}
          {runLog.map((log, index) => (
            <div key={index} style={{ marginBottom: '15px', padding: '10px', backgroundColor: '#1a1a1a', borderRadius: '5px' }}>
                <h3 style={{ fontSize: '14px', margin: '0 0 10px 0', color: '#00c3ff' }}>{log.name}</h3>
                <p style={{ margin: 0, fontSize: '12px', color: '#ccc' }}>{log.output.message}</p>
                 {log.name === 'フィルタヌ適甚' && <SignalChart data={log.output.data} />}
            </div>
          ))}

          {finalResult && (
            <div style={{ marginTop: '20px', padding: '15px', backgroundColor: '#2a0033', border: '1px solid #c300ff', borderRadius: '5px' }}>
              <h3 style={{ margin: '0 0 10px 0' }}>最終評䟡結果</h3>
              <div style={{ display: 'flex', gap: '20px', alignItems: 'center' }}>
                <div>
                  <span style={{ fontSize: '12px', color: '#aaa' }}>シグナル怜出スコア:</span>
                  <div data-proof="signal-score-value" style={{ fontSize: '32px', color: '#ff00aa', fontWeight: 'bold' }}>{finalResult.score.toFixed(2)}</div>
                </div>
                <div data-proof="signal-details">
                  <span style={{ fontSize: '12px', color: '#aaa' }}>怜出された呚期の特城:</span>
                  <p style={{ margin: '4px 0', fontSize: '14px' }}>
                    <strong>呚期:</strong> <span data-proof="period-days">{finalResult.periodDays !== null ? `${finalResult.periodDays}日` : 'N/A'}</span>
                  </p>
                  <p style={{ margin: '4px 0', fontSize: '14px' }}>
                    <strong>匷床:</strong> <span data-proof="signal-strength">{finalResult.signalStrength}</span>
                  </p>
                </div>
              </div>
               <button data-proof="lock-button" style={{marginTop: '15px', padding: '8px 16px', border: '1px solid #c300ff', backgroundColor: 'transparent', color: '#c300ff', cursor: 'pointer' }}>候補ずしおロック</button>
            </div>
          )}
        </main>
      </div>
    </div>
  );
}