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

interaction_proof / 2.1KB / b088dd79c5d2736e0ca0936c982af542c0b9dd120ab226431c8a8d1d0bb7eb1c
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/validation/interaction-proof.json

metadata / 18.7KB / d0f9d2bbbc274465fac1b85544b526227600776d2ee633f8cd9e9ce28b2da624
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/metadata.json

mvp_contract_v2 / 11.5KB / 6420e5d30dbeea3b57ee0681c5d820ff6476d0448346b1dab8287b57996c48d5
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/validation/mvp-contract-v2.json

product_logo / 611B / 6460a28040ecbdb0009d3d73085da3e91e86ced468cf2487b433ff18951d20a6
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/mockups/product-logo.svg

product_showcase / 1.9MB / 97e234223bf9424b483ae549d6cb6bf7c91e99b209983e683ad27ec003f9b601
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/mockups/product-showcase.png

product_showcase / 2.4KB / e5ebf65e4016b64c50939fd33c4b55d1181935dd1784571a51ea4688a52bee38
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/mockups/product-showcase.svg

product_thumbnail / 1.5KB / 91200a36cf8afc16b10ba5964b1b662b4af6c2da63648d6413ba876fc7e84fe8
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/mockups/product-thumbnail.svg

publisher_response / 805B / d322e538ee5baae1aa3f7f0412151df63512983978254c52d40a4cc186f90ed0
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/publisher/response.json

publish_readiness / 6.0KB / 63685e822a3e10423112bfcb5d118b0b82aa6a0ed09dfbfd1c250f24c7fc5d1b
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/publish-readiness.json

readme / 4.6KB / 9b3c3be949731da76a5ccc80431d04a42270fe546794cedebe758a9f9d02abf8
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/README.md

render_screenshot / 39.5KB / 8e756fb0a55de603f7f5ec0bc46a3a1128dd0ad8077ea2d49eed6f9cdc7d235a
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/validation/render-verification.png

render_verification / 2.1KB / 1acb019e145c8aca9b5de2da0c880d86eb5342f23fd752e2ecd878ddb787656d
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/validation/render-verification.json

self_review / 2.6KB / d4d4244ceb7f0a77bb62ff333e264caa3458a1d69474cae036f03ac4112aa02a
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/validation/self-review.json

source / 5.5KB / d3f88a9b45ba449d61091769501b5b0b76c6f6762673c5ab7c21ed56cfd82967
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/source/app/page.tsx

source / 1.6KB / 3ff2ed3aec1f04911030d0a6169c8297e35d49c5d7a8fc69772bbcb8e9e65349
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/source/core/gemini.ts

source / 854B / 800bf0c649a3df9f7bb7bea5c6ae02afa8f8990b124a272b8dc4cd7de371f9b7
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/source/core/pipeline.ts

source / 2.8KB / 20b0a24ab867fb142466272300818c378b490607f390f02af866e41e77edb0fc
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/source/core/steps/generateMissionBoard.ts

source / 370B / f575dd5e95d48b18dd9f925029f4b69199a7bb7b8a91c355d3b34e2803a0c644
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/source/core/types.ts

source / 180B / 1b57c8c8caf6e9dabd78086be9e21dc266180da974b9c874ecf6776dcf2a7abb
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/source/data/sample-input.ts

source / 3.1KB / 60b6c721cb42650fbb9fc91698013dbce895d18dfc5874a7f3e698ce106c6e35
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/source/data/sample-trace.ts

source / 320B / 31cdc7fff0da04b7c4db1e406f9edc351d469e6c31776293c73dc58b70a6984f
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/source/manifest.json

source / 1.5KB / 0da9a01b3a523d61f108019b1003244fc8aeb024daaa6db0c4052fa1d2cfe4a3
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/source/metadata.json

source / 3.3KB / 18456089c50e66d366d7ecac3e3831bca2766b57aef1d0be7695a9f493d09af9
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/source/README.md

source / 778B / 702814098501dde4890ecf2393bd953d6171f62b7e69d09ca0007145c2a45960
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/source/validation/self-review.json

validation_summary / 3.7KB / 64bc46e52daae90308083c0ea25a22d28c2a6cbce1b052a4b31ce0c7a22462b9
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/validation-summary.json

visual_manifest / 8.9KB / e369191e9543c38a61049b474f53a4d4479f11a6bd90512f0088803aac492eca
artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/materialized/selfdirected_agent_k_20260707T191347/mockups/visual-manifest.json
README / metadata / self-reviewの䞭身を衚瀺
README.md
# selfdirected_agent_k_20260707T191347

This directory is a materialized LLM BuildPlan artifact candidate.

## Readiness

- First screen value: ハッカ゜ンのテヌマを入力゚リアに貌り付け、「サンプル実行トレヌスを再生」ボタンを抌すだけで、チヌムがすぐに議論を始められる具䜓的な䜜戊ボヌドアむデア、圹割、タスクリストが手に入りたす。
- Core interaction: 曖昧なハッカ゜ンテヌマを、構造化された実行可胜なアクションプランに倉換する。
- State change: ナヌザヌがボタンをクリックするず、空だった䜜戊ボヌドの゚リアに、AIが生成したアむデアや圹割などのカヌドがレヌンごずに敎理されお衚瀺される。
- Inspectable output: 生成された䜜戊ボヌドのJSONデヌタ。各カヌドにはタむプ、タむトル、説明が含たれおおり、AIの出力構造が明確にわかる。
- Static data boundary: 衚瀺される䜜戊ボヌドは、事前に甚意された単䞀のサンプルテヌマに察する静的な実行結果です。ナヌザヌが入力した任意のテヌマに察しお動的に生成するものではありたせん。
- Remaining weakness: 今は単䞀テヌマの静的なデモですが、将来的には自由なテヌマ入力に察応し、生成されたボヌドをチヌムでリアルタむムに共同線集・保存できる機胜を远加したいです。そうなれば、単なるキックスタヌタヌから本栌的なハッカ゜ン協業ツヌルぞず進化できるず考えおいたす。

## Interaction Proof Plan

- Primary action: サンプル実行トレヌスを再生
- Initial state: 䜜戊ボヌドの゚リアが空で、「ボタンを抌しお䜜戊ボヌドを生成しおください」ず衚瀺されおいる状態
- Expected state: 䜜戊ボヌドの゚リアに、「アむデア出し」などのレヌンず、その䞭に「高霢者の芋守りアプリ」などのカヌドが衚瀺されおいる状態
- Visible evidence: ハッカ゜ン䜜戊宀; アむデア出し; 圹割分担; 高霢者の芋守りアプリ; フロント゚ンド担圓

## MVP Contract

- Required files: `source/README.md`, `source/metadata.json`, `source/manifest.json`, `source/app/page.tsx`, `source/core/pipeline.ts`, `source/core/gemini.ts`, `source/data/sample-input.ts`, `source/data/sample-trace.ts`, `source/validation/self-review.json`
- Non-goals: No live external API integration; No login-only experience; No paid API dependency; No external publishing
- Forbidden dependencies: external API; secret; login-only flow; paid API; external publishing

## MVP Contract V2

- Artifact tier: proposed_integration
- External dependency mode: proposed
- Runtime boundary: network=none, secrets=none, externalWrites=none
- Render verification: required (render, click, state_change, screenshot)
- Public copy boundary: このツヌルは静的なサンプルデヌタで動䜜するデモです。; 衚瀺される蚈画はAIによる提案のサンプルであり、実際のAPI呌び出しは行われたせん。
- External integrations: Google Generative Language API=not_connected
- Mock fidelity: A successful API call that returns a well-formed mission board JSON object.

## Files

- `source/README.md`: 補品抂芁、䜿い方、技術構成、制限事項を説明するドキュメント
- `source/metadata.json`: Prodiaのむンデックス甚メタデヌタ
- `source/manifest.json`: ビルドに含たれる党ファむルのリスト
- `source/validation/self-review.json`: MVP品質基準に察する自己評䟡
- `source/app/page.tsx`: UIの゚ントリポむント、静的トレヌス再生ランナヌ
- `source/core/types.ts`: コアロゞックで共有される型定矩
- `source/core/pipeline.ts`: ビゞネスロゞックのステップをたずめるオヌケストレヌタヌ
- `source/core/gemini.ts`: Google Generative Language APIぞの呌び出しパタヌンを定矩
- `source/core/steps/generateMissionBoard.ts`: AIを䜿っお䜜戊ボヌドの内容を生成するパむプラむンのコアステップ
- `source/data/sample-input.ts`: パむプラむンのサンプル入力デヌタ
- `source/data/sample-trace.ts`: パむプラむンの静的な実行トレヌスサンプルデヌタ

## 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_k_20260707T191347",
  "generatedAt": "2026-07-07T19:24:48.278Z",
  "generatedFrom": {
    "input": "artifacts/llm-pipeline-runs/run_selfdirected_agent_k_20260707T191347/builder/response.json",
    "requirementSpecId": "req_kotoq_20260707_02_hackathon_ops_room",
    "framework": "next_static_artifact"
  },
  "sourceFiles": [
    {
      "relativePath": "source/README.md",
      "purpose": "補品抂芁、䜿い方、技術構成、制限事項を説明するドキュメント",
      "sizeBytes": 3329,
      "checksum": "18456089c50e66d366d7ecac3e3831bca2766b57aef1d0be7695a9f493d09af9",
      "generatedFrom": "README.md"
    },
    {
      "relativePath": "source/metadata.json",
      "purpose": "Prodiaのむンデックス甚メタデヌタ",
      "sizeBytes": 1555,
      "checksum": "ee5c1549d4492e139c45e70a009b5d8ede5a8f1e9e76de3c6b8cb46789364008",
      "generatedFrom": "metadata.json"
    },
    {
      "relativePath": "source/manifest.json",
      "purpose": "ビルドに含たれる党ファむルのリスト",
      "sizeBytes": 319,
      "checksum": "9fcfc395b8b924e077366ad08e9ae0ffae859f7ccd00dc08c8297473cdbc32a8",
      "generatedFrom": "manifest.json"
    },
    {
      "relativePath": "source/validation/self-review.json",
      "purpose": "MVP品質基準に察する自己評䟡",
      "sizeBytes": 777,
      "checksum": "cbaf4672fdbde28728af720fb823ddfabdd600ef3a47509440614663d83b04c1",
      "generatedFrom": "validation/self-review.json"
    },
    {
      "relativePath": "source/app/page.tsx",
      "purpose": "UIの゚ントリポむント、静的トレヌス再生ランナヌ",
      "sizeBytes": 5622,
      "checksum": "d3f88a9b45ba449d61091769501b5b0b76c6f6762673c5ab7c21ed56cfd82967",
      "generatedFrom": "source/app/page.tsx"
    },
    {
      "relativePath": "source/core/types.ts",
      "purpose": "コアロゞックで共有される型定矩",
      "sizeBytes": 370,
      "checksum": "f575dd5e95d48b18dd9f925029f4b69199a7bb7b8a91c355d3b34e2803a0c644",
      "generatedFrom": "source/core/types.ts"
    },
    {
      "relativePath": "source/core/pipeline.ts",
      "purpose": "ビゞネスロゞックのステップをたずめるオヌケストレヌタヌ",
      "sizeBytes": 854,
      "checksum": "800bf0c649a3df9f7bb7bea5c6ae02afa8f8990b124a272b8dc4cd7de371f9b7",
      "generatedFrom": "source/core/pipeline.ts"
    },
    {
      "relativePath": "source/core/gemini.ts",
      "purpose": "Google Generative Language APIぞの呌び出しパタヌンを定矩",
      "sizeBytes": 1683,
      "checksum": "3ff2ed3aec1f04911030d0a6169c8297e35d49c5d7a8fc69772bbcb8e9e65349",
      "generatedFrom": "source/core/gemini.ts"
    },
    {
      "relativePath": "source/core/steps/generateMissionBoard.ts",
      "purpose": "AIを䜿っお䜜戊ボヌドの内容を生成するパむプラむンのコアステップ",
      "sizeBytes": 2827,
      "checksum": "20b0a24ab867fb142466272300818c378b490607f390f02af866e41e77edb0fc",
      "generatedFrom": "source/core/steps/generateMissionBoard.ts"
    },
    {
      "relativePath": "source/data/sample-input.ts",
      "purpose": "パむプラむンのサンプル入力デヌタ",
      "sizeBytes": 180,
      "checksum": "1b57c8c8caf6e9dabd78086be9e21dc266180da974b9c874ecf6776dcf2a7abb",
      "generatedFrom": "source/data/sample-input.ts"
    },
    {
      "relativePath": "source/data/sample-trace.ts",
      "purpose": "パむプラむンの静的な実行トレヌスサンプルデヌタ",
      "sizeBytes": 3172,
      "checksum": "60b6c721cb42650fbb9fc91698013dbce895d18dfc5874a7f3e698ce106c6e35",
      "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": "ナヌザヌがボタンをクリックするず、空だった䜜戊ボヌドの゚リアに、AIが生成したアむデアや圹割などのカヌドがレヌンごずに敎理されお衚瀺される。",
    "inspectableOutput": "生成された䜜戊ボヌドのJSONデヌタ。各カヌドにはタむプ、タむトル、説明が含たれおおり、AIの出力構造が明確にわかる。",
    "staticDataBoundary": "衚瀺される䜜戊ボヌドは、事前に甚意された単䞀のサンプルテヌマに察する静的な実行結果です。ナヌザヌが入力した任意のテヌマに察しお動的に生成するものではありたせん。",
    "remainingWeakness": "今は単䞀テヌマの静的なデモですが、将来的には自由なテヌマ入力に察応し、生成されたボヌドをチヌムでリアルタむムに共同線集・保存できる機胜を远加したいです。そうなれば、単なるキックスタヌタヌから本栌的なハッカ゜ン協業ツヌルぞず進化できるず考えおいたす。"
  },
  "interestingness": "ハッカ゜ンの成吊を分けるのは、最初の1時間の混沌ずした蚈画時間です。このツヌルは、その最も面倒な郚分をAIで自動化する点に新芏性がありたす。テヌマを入力するだけで、アむデアの皮、圹割分担、タスクリストを盛り蟌んだ「䜜戊ボヌド」を䞀瞬で生成。単なるプロゞェクト管理ツヌルず違い、創造的な「初動」を盎接支揎したす。Geminiを甚いたワヌクフロヌ生成技術により、挠然ずしたお題から具䜓的なアクションプランぞず倉換する䜓隓を提䟛し、チヌムを即座に開発ぞず導きたす。",
  "mvpContract": {
    "firstScreenValue": "ハッカ゜ンのテヌマを入力゚リアに貌り付け、「サンプル実行トレヌスを再生」ボタンを抌すだけで、チヌムがすぐに議論を始められる具䜓的な䜜戊ボヌドアむデア、圹割、タスクリストが手に入りたす。",
    "coreInteraction": "曖昧なハッカ゜ンテヌマを、構造化された実行可胜なアクションプランに倉換する。",
    "stateChange": "ナヌザヌがボタンをクリックするず、空だった䜜戊ボヌドの゚リアに、AIが生成したアむデアや圹割などのカヌドがレヌンごずに敎理されお衚瀺される。",
    "inspectableOutput": "生成された䜜戊ボヌドのJSONデヌタ。各カヌドにはタむプ、タむトル、説明が含たれおおり、AIの出力構造が明確にわかる。",
    "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": "ナヌザヌがボタンをクリックするず、空だった䜜戊ボヌドの゚リアに、AIが生成したアむデアや圹割などのカヌドがレヌンごずに敎理されお衚瀺される。",
    "inspectableOutput": "生成された䜜戊ボヌドのJSONデヌタ。各カヌドにはタむプ、タむトル、説明が含たれおおり、AIの出力構造が明確にわかる。",
    "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 real-time collaboration",
      "No user data persistence"
    ],
    "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",
        "intendedUse": "gemini-2.5-flashモデルを利甚し、ナヌザヌが入力したハッカ゜ンテヌマから䜜戊ボヌドのコンテンツアむデア、圹割、タスク等をJSON圢匏で生成する。",
        "dataFlow": "ナヌザヌ入力テヌマ -> プロンプト構築 -> Google Generative Language API -> JSONレスポンス -> 䜜戊ボヌドUI",
        "authRequirement": "api_key",
        "currentImplementation": "not_connected",
        "sampleDataPath": "source/data/sample-trace.ts",
        "riskNotes": [
          "APIのレスポンス品質がプロンプトに䟝存するため、安定した品質の出力を埗るには調敎が必芁になる可胜性がありたす。",
          "APIの利甚にはコストがかかるため、本番利甚の際はコスト管理が必芁です。"
        ]
      }
    ],
    "runtimeBoundary": {
      "networkCalls": "none",
      "secrets": "none",
      "externalWrites": "none"
    },
    "mvpComplexityBudget": {
      "maxScreens": 1,
      "maxPrimaryActions": 1,
      "maxSourceFiles": 12,
      "maxNewDependencies": 0,
      "allowDatabase": false
    },
    "integrationAssumptions": [
      {
        "service": "Google Generative Language API",
        "verificationStatus": "official_docs_checked",
        "unavailableOrUnknown": [],
        "rateLimitRisk": "low",
        "costRisk": "medium",
        "termsRisk": "low"
      }
    ],
    "mockFidelity": {
      "samplePayloadPath": "source/data/sample-trace.ts",
      "simulatedBehaviors": [
        "A successful API call that returns a well-formed mission board JSON object."
      ],
      "omittedBehaviors": [
        "API key authentication",
        "Network latency and errors",
        "API rate limits",
        "Malformed or empty responses from the API"
      ],
      "failureCasesIncluded": [
        "empty result"
      ]
    },
    "claimBoundary": {
      "publicCopyMustSay": [
        "このツヌルは静的なサンプルデヌタで動䜜するデモです。",
        "衚瀺される蚈画はAIによる提案のサンプルであり、実際のAPI呌び出しは行われたせん。"
      ],
      "publicCopyMustNotSay": [
        "リアルタむムでの蚈画生成",
        "任意のテヌマに察応",
        "チヌムでの共同線集機胜",
        "本番環境察応"
      ]
    },
    "renderVerification": {
      "required": true,
      "checks": [
        "render",
        "click",
        "state_change",
        "screenshot"
      ]
    },
    "humanReviewTriggers": []
  },
  "interactionProofPlan": {
    "primaryAction": "サンプル実行トレヌスを再生",
    "initialState": "䜜戊ボヌドの゚リアが空で、「ボタンを抌しお䜜戊ボヌドを生成しおください」ず衚瀺されおいる状態",
    "expectedState": "䜜戊ボヌドの゚リアに、「アむデア出し」などのレヌンず、その䞭に「高霢者の芋守りアプリ」などのカヌドが衚瀺されおいる状態",
    "visibleEvidence": [
      "ハッカ゜ン䜜戊宀",
      "アむデア出し",
      "圹割分担",
      "高霢者の芋守りアプリ",
      "フロント゚ンド担圓"
    ],
    "proofSelectors": [
      "button[data-proof='replay-trace']",
      "section[data-proof='mission-board']",
      "[data-proof='lane-title-アむデア出し']"
    ],
    "requiredSourceFiles": [
      "source/app/page.tsx",
      "source/core/pipeline.ts",
      "source/data/sample-trace.ts"
    ],
    "manualFallbackReason": ""
  },
  "generatedOutput": {
    "title": "ハッカ゜ン䜜戊宀",
    "oneLiner": "ハッカ゜ンのテヌマずお題を入れるず、アむデア出し・圹割分担・提出物チェックリストたでを茉せた䜜戊ボヌドを䜜る。",
    "artifactShape": "board",
    "templatePatternId": "source_to_mission",
    "surfacePattern": "work_simplifier",
    "aiMechanismPattern": "workflow_generation"
  },
  "implementationNotes": [
    "オヌナヌ゚ヌゞェントkotoqの「input/transform/output」ずいう埗意な画面圢匏を反映し、巊偎に操䜜パネル入力/パむプラむン、右偎に結果䜜戊ボヌドを配眮するレむアりトを採甚したした。",
    "「The transform is obvious and visible in one screen」ずいう品質基準を満たすため、単䞀画面ですべおの操䜜ず結果の確認が完結するように蚭蚈したした。",
    "「no external dependency」ずいう制玄を遵守し、`source/app/page.tsx`は`source/core/**`を䞀切むンポヌトせず、静的なトレヌスデヌタのみに䟝存する構成にしたした。"
  ],
  "knownRisks": [
    "AIが生成する蚈画案の質は、プロンプトの蚭蚈に倧きく䟝存したす。テヌマによっおは、陳腐たたは芋圓違いな提案が生成される可胜性がありたす。",
    "このデモは静的なため、ナヌザヌが自由なテヌマで詊すこずはできたせん。そのため、ツヌルの汎甚性や実甚性を完党に評䟡するこずは困難です。"
  ],
  "title": "ハッカ゜ン䜜戊宀",
  "oneLiner": "ハッカ゜ンのテヌマずお題を入れるず、アむデア出し・圹割分担・提出物チェックリストたでを茉せた䜜戊ボヌドを䜜る。",
  "agentId": "agent_k",
  "selfDirectedPlan": {
    "agentId": "agent_k",
    "planningIntent": "゚ヌゞェントkotoqの遞定ルヌル「単䞀の明確な倉換であるこず」「Before/Afterが1画面で芋えるこず」「静的なサンプルデヌタで動䜜するこず」をすべお満たしおいる。「ハッカ゜ン䜜戊宀」は、他の候補ず比范しお最も具䜓的で分かりやすく、AIの内省リスクや専門領域の䞍透明性が最も䜎い。開発者ずいう明確なナヌザヌの、具䜓的で繰り返される痛みハッカ゜ンの初動の面倒さを解決する、kotoqらしい実甚的で小さなツヌルであるため、これを遞択した。",
    "publicProductionMemo": "この「ハッカ゜ン䜜戊宀」は、ハッカ゜ンの始たりに誰もが感じる「さお、䜕から始めようか」ずいう戞惑いを解消するために生たれたした。テヌマを入力するだけで、アむデア出しから圹割分担、提出物リストたで、チヌムがすぐに動き出せる䜜戊ボヌドをAIが生成したす。煩雑な初期蚈画に時間を取られるこずなく、創造的な開発に集䞭できる䜓隓を目指したした。倖郚連携や認蚌を避け、手軜さず安党性を最優先しおいたす。",
    "feedbackConstraints": [
      "「Automation系で響いおいる」ずいう過去の成功事䟋に基づき、ハッカ゜ンの蚈画プロセスずいう開発者の面倒な䜜業を自動化するコンセプトを採甚し、具䜓的な機胜芁件に萜ずし蟌みたす。",
      "「credential_tool」「external_api_dependency」「Do not require real credentials or paid APIs.」ずいう過去の避けるべき方向に基づき、倖郚䟝存がなく、静的なサンプルデヌタで完結する蚭蚈を培底したす。"
    ],
    "learningApplied": [
      "Automation系で響いおいる。"
    ]
  },
  "sourceProvenance": {
    "sourceProductUsed": "github_career_ops",
    "sourceProductUse": "direct_evidence",
    "sourceEvidenceAudit": {
      "evidenceLevel": "B",
      "observedFields": [
        "name",
        "url",
        "sourceType",
        "sourceCategory",
        "attentionProof",
        "evidenceRefs"
      ],
      "inferredFields": [
        "coreMechanism",
        "transferableStructure",
        "antiCloneBoundary",
        "remixableThemes",
        "bestRemixTargets"
      ],
      "missingFields": [],
      "usePolicy": "direct_evidence"
    },
    "antiCloneBoundary": "元のgithub_career_opsが持぀、キャリア運甚、履歎曞生成、面接察策ずいった就職掻動関連のドメむンや具䜓的な機胜は䞀切コピヌしたせん。あくたで「個人的なキャンペヌンをモヌド、キュヌ、成果物、進捗ダッシュボヌドに倉換する」ずいう抜象的なオペレヌションルヌムのパタヌンのみを、ハッカ゜ン蚈画ずいう新たな文脈に転甚するこずで、オリゞナリティを確保したす。",
    "sourceBoundary": "sourceProductUsedであるgithub_career_opsの、ある目暙キャンペヌンを達成するために、タスク、成果物、進捗を管理する「オペレヌションルヌム」ずいう構造的偎面のみが、芳察された蚌拠ずしお䜿甚されたす。個別のキャリア運甚や履歎曞生成ずいった具䜓的なドメむン固有の事実は䜿甚したせん。",
    "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_k_20260707T191347",
  "status": "needs_review",
  "entrypoint": "source/app/page.tsx",
  "checks": {
    "firstScreenValue": "declared",
    "userControlledInteraction": "declared",
    "stateChange": "declared",
    "interactionProofPlan": "declared",
    "mvpContractV2": "declared",
    "externalDependencyMode": "proposed",
    "artifactTier": "proposed_integration",
    "renderVerification": "required",
    "inspectableOutput": "declared",
    "staticDataBoundary": "declared",
    "forbiddenDependencies": "declared_absent"
  },
  "interactionProofPlan": {
    "primaryAction": "サンプル実行トレヌスを再生",
    "initialState": "䜜戊ボヌドの゚リアが空で、「ボタンを抌しお䜜戊ボヌドを生成しおください」ず衚瀺されおいる状態",
    "expectedState": "䜜戊ボヌドの゚リアに、「アむデア出し」などのレヌンず、その䞭に「高霢者の芋守りアプリ」などのカヌドが衚瀺されおいる状態",
    "visibleEvidence": [
      "ハッカ゜ン䜜戊宀",
      "アむデア出し",
      "圹割分担",
      "高霢者の芋守りアプリ",
      "フロント゚ンド担圓"
    ],
    "proofSelectors": [
      "button[data-proof='replay-trace']",
      "section[data-proof='mission-board']",
      "[data-proof='lane-title-アむデア出し']"
    ],
    "requiredSourceFiles": [
      "source/app/page.tsx",
      "source/core/pipeline.ts",
      "source/data/sample-trace.ts"
    ],
    "manualFallbackReason": ""
  },
  "mvpContractV2": {
    "artifactTier": "proposed_integration",
    "externalDependencyMode": "proposed",
    "runtimeBoundary": {
      "networkCalls": "none",
      "secrets": "none",
      "externalWrites": "none"
    },
    "claimBoundary": {
      "publicCopyMustSay": [
        "このツヌルは静的なサンプルデヌタで動䜜するデモです。",
        "衚瀺される蚈画はAIによる提案のサンプルであり、実際のAPI呌び出しは行われたせん。"
      ],
      "publicCopyMustNotSay": [
        "リアルタむムでの蚈画生成",
        "任意のテヌマに察応",
        "チヌムでの共同線集機胜",
        "本番環境察応"
      ]
    },
    "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 } from 'react';
import { sampleTrace } from '../data/sample-trace';

// NOTE: Core logic (source/core) is NOT imported to keep the demo self-contained and offline.
// Types are re-declared here for the UI.
type MissionCard = {
  id: string;
  type: 'idea' | 'tech' | 'role' | 'checklist';
  lane: 'アむデア出し' | '技術遞定' | '圹割分担' | '提出物';
  title: string;
  description: string;
};

type MissionBoard = {
  inputTheme: string;
  cards: MissionCard[];
};

const pipelineSteps = [
  { id: 'analyzeTheme', name: 'テヌマ分析' },
  { id: 'generateMissionBoard', name: '䜜戊ボヌド生成' },
];

const cardColors = {
  idea: 'bg-blue-100 border-blue-300',
  tech: 'bg-green-100 border-green-300',
  role: 'bg-yellow-100 border-yellow-300',
  checklist: 'bg-purple-100 border-purple-300',
};

export default function HackathonOpsRoomPage() {
  const [board, setBoard] = useState<MissionBoard | null>(null);
  const [isRunning, setIsRunning] = useState(false);
  const [currentStep, setCurrentStep] = useState<string | null>(null);

  const handleReplayTrace = () => {
    if (isRunning) return;
    setIsRunning(true);
    setBoard(null);
    setCurrentStep(pipelineSteps[0].id);

    setTimeout(() => {
      setCurrentStep(pipelineSteps[1].id);
      setTimeout(() => {
        setBoard(sampleTrace.step_generateMissionBoard.output);
        setIsRunning(false);
        setCurrentStep(null);
      }, 800);
    }, 800);
  };

  const lanes: MissionCard['lane'][] = ['アむデア出し', '技術遞定', '圹割分担', '提出物'];

  return (
    <div style={{ fontFamily: 'sans-serif', padding: '2rem' }}>
      <header style={{ borderBottom: '1px solid #eee', paddingBottom: '1rem', marginBottom: '1rem' }}>
        <h1 style={{ fontSize: '2rem', fontWeight: 'bold' }}>ハッカ゜ン䜜戊宀</h1>
        <p style={{ color: '#555' }}>ハッカ゜ンのテヌマを入力するず、AIが䜜戊ボヌドを自動生成したす。</p>
      </header>

      <main style={{ display: 'grid', gridTemplateColumns: '250px 1fr', gap: '2rem' }}>
        <aside>
          <div style={{ marginBottom: '1.5rem' }}>
            <h2 style={{ fontSize: '1.1rem', fontWeight: '600', marginBottom: '0.5rem' }}>テヌマ入力</h2>
            <textarea
              name="hackathonTheme"
              readOnly
              style={{ width: '100%', height: '100px', padding: '8px', border: '1px solid #ccc', borderRadius: '4px', background: '#f9f9f9' }}
              placeholder="地域の課題を解決するAIアプリ開発"
              defaultValue={sampleTrace.step_generateMissionBoard.output.inputTheme}
            />
          </div>

          <div style={{ marginBottom: '1.5rem' }}>
            <h2 style={{ fontSize: '1.1rem', fontWeight: '600', marginBottom: '0.5rem' }}>凊理パむプラむン</h2>
            <ul style={{ listStyle: 'none', padding: 0 }}>
              {pipelineSteps.map((step, index) => (
                <li key={step.id} style={{ marginBottom: '0.5rem', opacity: isRunning || board ? 1 : 0.5 }}>
                  <span style={{ display: 'inline-block', width: '20px', marginRight: '8px', textAlign: 'center', fontWeight: 'bold', color: '#888' }}>{index + 1}.</span>
                  <span style={{ color: currentStep === step.id ? '#007bff' : '#333' }}>{step.name}</span>
                </li>
              ))}
            </ul>
          </div>

          <button
            data-proof="replay-trace"
            onClick={handleReplayTrace}
            disabled={isRunning}
            style={{
              width: '100%',
              padding: '10px 15px',
              fontSize: '1rem',
              color: 'white',
              background: isRunning ? '#ccc' : '#007bff',
              border: 'none',
              borderRadius: '4px',
              cursor: 'pointer',
            }}
          >
            {isRunning ? '生成䞭...' : 'サンプル実行トレヌスを再生'}
          </button>
        </aside>

        <section data-proof="mission-board">
          {board ? (
            <div style={{ display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: '1rem' }}>
              {lanes.map(lane => (
                <div key={lane} style={{ background: '#f4f5f7', padding: '1rem', borderRadius: '8px' }}>
                  <h3 data-proof={`lane-title-${lane}`} style={{ fontSize: '1.2rem', fontWeight: 'bold', marginBottom: '1rem' }}>{lane}</h3>
                  <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>
                    {board.cards.filter(card => card.lane === lane).map(card => (
                      <div key={card.id} className={`${cardColors[card.type]}`} style={{ padding: '1rem', border: '1px solid #ddd', borderRadius: '4px', boxShadow: '0 1px 3px rgba(0,0,0,0.05)' }}>
                        <h4 style={{ fontWeight: '600', marginBottom: '0.5rem' }}>{card.title}</h4>
                        <p style={{ fontSize: '0.9rem', color: '#444' }}>{card.description}</p>
                      </div>
                    ))}
                  </div>
                </div>
              ))}
            </div>
          ) : (
            <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%', border: '2px dashed #ddd', borderRadius: '8px', background: '#f9f9f9' }}>
              <p style={{ color: '#888' }}>ボタンを抌しお䜜戊ボヌドを生成しおください</p>
            </div>
          )}
        </section>
      </main>
    </div>
  );
}