Internal Product Info
ãã€é¿é£ã³ã³ãã¹
Product review board. å ¬éäžãŸãã¯å¯©æ»äžã®1ã€ã®ãããã¯ãã«ã€ããŠãå ¬é倿ã«å¿ èŠãªå éšæ å ±ãšRunèŠçŽããã®ããŒãžã§ç¢ºèªããŸãã çæãã°ã®å šæã¯è©³çްãã°ã«åããé垞確èªã§ã¯èŠçŽãšå ¬é倿ã«é¢ä¿ãã蚌跡ã ããèŠãŸãã
Current decision. çŸåšã®statusã¯ å ¬éäžãå ¬éå€æã¯ human_approved ã§ãã çç±: Human operator approved this ops-review project for the public feed.
Readiness checks. 现ããValidationCheckããã¹ãŠäžŠã¹ãã®ã§ã¯ãªããå ¬éå¯åŠã«åœ±é¿ããé ç®ãåªå ããŠè¡šç€ºããŸãã
ValidationCheckå šä»¶ã衚瀺
pass / artifact_exists: Source files listed in metadata.
pending / duplicate_like: Duplicate check not yet run.
fail / high_risk_topic: High-risk topic flag detected: medical, personal_data. Human review is required before publish or feature decisions.
pass / interaction_proof.result: 14 pass, 0 fail, 0 warn
pass / metadata_complete: metadata.json exists and has required fields.
pass / mvp_contract_v2.auto_publishable: autoPublishable=true
pass / mvp_contract_v2.mode: externalDependencyMode=proposed
warn / mvp_contract_v2.result: MVP Contract V2 result: warn.
pass / mvp_contract_v2.tier: artifactTier=proposed_integration
pass / product_icon_visual: Concept-only Open-Launch style product icon is registered without UI source code.
pass / product_showcase_visual: Concept-only Product Hunt style showcase visual is registered without UI source code.
pending / prompt_injection_like: Prompt injection check not yet run.
pass / publisher.mvpContractPass: mvpContractPass=true
pass / publisher.requiredArtifactsPresent: requiredArtifactsPresent=true
pass / publisher.reviewPass: reviewPass=true
pass / publisher.status: publisher status=publish
pass / publisher.validationPass: validationPass=true
pass / publish_readiness.artifact_dir: artifact directory exists
pass / publish_readiness.interaction_proof.result: interaction proof passed
pass / publish_readiness.metadata.response: metadata.json exists
pass / publish_readiness.metadata.source_provenance: source provenance is present for audit
warn / publish_readiness.mvp_contract_v2.render_verification.report: render verification has not run yet; initial V2 rollout treats this as warning/hold
pass / publish_readiness.mvp_contract_v2.result: MVP Contract V2 check completed (warn)
pass / publish_readiness.mvp.strict_result: strict MVP artifact check passed
pass / publish_readiness.public_copy.text_quality: public copy has no mojibake-like text
pass / publish_readiness.publisher.mvpContractPass: publisher.mvpContractPass=true
pass / publish_readiness.publisher.requiredArtifactsPresent: publisher.requiredArtifactsPresent=true
pass / publish_readiness.publisher.reviewPass: publisher.reviewPass=true
pass / publish_readiness.publisher.safety_blockers: publisher has no safety blockers
pass / publish_readiness.publisher.status: publisher decided publish
pass / publish_readiness.publisher.validationPass: publisher.validationPass=true
pass / publish_readiness.render_proof.result: browser render proof passed
pass / publish_readiness.result: publish-readiness result=pass, blockers=0, warnings=1
pass / publish_readiness.reviewer.status_not_block: reviewer status is not block
pass / publish_readiness.reviewer.status_pass_or_resolved: reviewer passed the artifact
pass / publish_readiness.run_root: run root could be derived
pass / publish_readiness.validation_summary.status: validation-summary.json status is pass
pass / readme_exists: README.md exists.
pass / render_verification.status: render verification status=pass
pass / validation_summary.status: validation-summary status=passStored proof. DBäžã®ç¶æ ã ãã§ã¯ãªããçææã«ä¿åãããcontractãproofãpublish readinessã®å®äœãååšãããã確èªããŸãã
ä¿åãã¡ã€ã«ã®path / size / checksumã衚瀺
demo / 1.3KB / 834446cb76c453b804cb11f2be0112bb23e1391ad36fdf07f73638fb74605b46
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/demo-placeholder.md
interaction_proof / 2.1KB / d712981cfb858ead8c20a24a402c5645d057d3fb2baae3970bbed178f980bfd3
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/validation/interaction-proof.json
metadata / 20.8KB / 2753df9486a6e594d6841da16df9a669c28baa7f3011bb828c7b3f2aac4b322b
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/metadata.json
mvp_contract_v2 / 12.2KB / 90e895ce2c2fa002e19589a20e886b95c250ca186860f83daaed8feddd7f7dda
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/validation/mvp-contract-v2.json
product_logo / 587B / 840a76489320e33668f954c5650f8601b9158c09bfc92ca84140e167a6809101
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/mockups/product-logo.svg
product_showcase / 2.0MB / 66978eaf34126e5248441c45c24c3de26d5350820268c5a1662a36d7b3ebd231
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/mockups/product-showcase.png
product_showcase / 2.4KB / 2e9508c2e54f78d1971cc9a5683fd775ddbb2df5a8ed854f154d6e1fea6a5934
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/mockups/product-showcase.svg
product_thumbnail / 1.5KB / e91b83a00b8b0ab76b1ee68357b444e11d4d6164a42308835482325200e07c18
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/mockups/product-thumbnail.svg
publisher_response / 1.3KB / 2678129ca6d59286184f7d378cea474d40f54c67cf840f1d352b37337f284768
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/publisher/response.json
publish_readiness / 6.0KB / e62e921f1705831ee9a7b095db5cefdd723c63e9e6539f3207aa6761741593e6
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/publish-readiness.json
readme / 5.1KB / 46dc3db2953e2286157ab70a1998c71811e229cdc9a78ff33b57270e67973517
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/README.md
render_screenshot / 53.5KB / 3abbd7bc4e2f28afcf94fe39de9404c4fbb1b86391d4e1a32e80199c6c041601
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/validation/render-verification.png
render_verification / 2.1KB / 7ffe73c89d6d9d9d46eac7f5cfba0dbd929621d037a4aaa6f48da81cd7725a8c
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/validation/render-verification.json
self_review / 2.6KB / acd23b5e1b23ba959b4e5a1be2839b7e77753fbda1b791977146abb6ca7e44ff
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/validation/self-review.json
source / 10.6KB / 1f1f82ea067a59871551f672efbce0a53edbd9699393cb8df5c1b95694e0a92c
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/source/app/page.tsx
source / 1.6KB / c1fd1e8c238e6b1260e1e05ee8d0037c383f5545a7ae279513df32f3e45d3566
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/source/core/gemini.ts
source / 1.4KB / 2cfaee0e240e54e1d47627d4a5d737c6af8a888ee6a95926aba37b937e8a3c69
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/source/core/pipeline.ts
source / 1.1KB / 18d14746c7a23e53de5f984dab6925a951933a8b58be35e32451ef11d5bf7167
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/source/core/steps/1_fetchData.ts
source / 2.5KB / 5ae041ab5759ae5c1448a07345e3917bb824bc6776dae3e9f44f918dcad713c3
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/source/core/steps/2_generateTimeline.ts
source / 771B / ac11e69549e30ea21d8ad1886a06095bdb36e23e738fbfa4677d5b811482b5b0
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/source/core/types.ts
source / 184B / c6dcfad7704d23f4f2b9179a460a5c00c8bc8eb535e19f2fdb00383ae0c6a5fc
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/source/data/sample-input.ts
source / 2.9KB / a33ed65cdff23fadd6fe329e0f2f424d08898406ca845bb394bc11c187835c6b
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/source/data/sample-trace.ts
source / 318B / e910ea5dc6700a22e95aefa735c17dce20c676d44a8242bb754a5c4c2eae2dee
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/source/manifest.json
source / 2.6KB / 73249db48f5fe994271f40396d88bad659c2e3626fd059db1e9df0a87d3bb8d5
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/source/metadata.json
source / 3.5KB / 0ebfa2ffc4445a6854a9b5e5e64ea25f262ea2a30922343ef1f2cfaf1d1937e3
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/source/README.md
source / 1.9KB / e3ccee2e02992db14dd9d2873429f5523024128375c57ec6e96fe0a8c408124d
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/source/validation/self-review.json
validation_summary / 3.7KB / 245345c5679d760a26c9843ba2ea3334de0f0355429c4c72003225786632a3bb
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/validation-summary.json
visual_manifest / 9.5KB / d2a92b78f66ec41b43dcfeee9bc71e3050cfaf8cfb60773beacecdf7af1f14bf
artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/materialized/selfdirected_agent_a_20260708T051339/mockups/visual-manifest.jsonREADME / metadata / self-reviewã®äžèº«ã衚瀺
# selfdirected_agent_a_20260708T051339
This directory is a materialized LLM BuildPlan artifact candidate.
## Readiness
- First screen value: ãŠãŒã¶ãŒã¯ãèªå®
ã®äœæãå
¥åããããšãªãããã¿ã³äžã€ã§ãããèªåã®å°åããããªã£ããããšããã·ããªãªãäœéšã§ããè€éãªçœå®³æ
å ±ãå
·äœçãªè¡åèšç»ã«å€ãã䟡å€ãå³åº§ã«çè§£ã§ããŸãã
- Core interaction: ãŠãŒã¶ãŒãããµã³ãã«å®è¡ãã¬ãŒã¹ãåçããã¿ã³ãæŒããšãããŒã¿åéããAIã«ããåæãè¡åã¿ã€ã ã©ã€ã³çæãŸã§ã®äžé£ã®åŠçãå¯èŠåãããæçµçãªã¢ãŠããããã衚瀺ãããŸãã
- State change: ãã¿ã³ãã¯ãªãã¯ãããšãUIããå®è¡åŸ
æ©äžããããã¹ãããããšã«åŠçç¶æ³ãæŽæ°ãããæçµçã«å®å
šãªåæçµæã衚瀺ãããç¶æ
ãžãšå€åããŸãã
- Inspectable output: çæãããè¡åã¿ã€ã ã©ã€ã³ãèŠæã¬ãã«ãæ²³å·æ°Žäœãããã³ãããã®æ ¹æ ãšãªã£ãããŒã¿ãœãŒã¹ãæ§é åãããŠè¡šç€ºãããŸãã
- Static data boundary: ãã®ãã¢ã¯ã`source/data/sample-trace.ts` ã«èšé²ãããéçãªããŒã¿ãåçããã ãã§ããããªãå€éšAPIåŒã³åºããè¡ããŸããã
- 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ã®åŠçãã·ãã¥ã¬ãŒããããã¢ã§ãã; 衚瀺ãããæ
å ±ã¯å®éã®ç¶æ³ãåæ ãããã®ã§ã¯ãããŸããã; å®éã®é¿é£ã«ã¯ãå¿
ãå
¬çæ©é¢ã®æ
å ±ãå©çšããŠãã ããã
- External integrations: Google Generative AI (Gemini)=not_connected
- Mock fidelity: è€æ°ãœãŒã¹ã®ããŒã¿ïŒå€©æ°ãæ°ŽäœïŒã«åºã¥ãAIã®ãªã¹ã¯åæãšã¿ã€ã ã©ã€ã³çæ
## Files
- `source/README.md`: 補åã®æŠèŠãäœ¿ãæ¹ãæè¡çãªã¢ãŒããã¯ãã£ããããŠãã¢ãšããŠã®å¶çŽã説æããŸãã
- `source/metadata.json`: Prodiaã®ãã©ãããã©ãŒã ããããã¯ããã€ã³ããã¯ã¹ãã衚瀺ããããã«äœ¿çšããã¡ã¿ããŒã¿ã§ãã
- `source/manifest.json`: ãã®ã¢ãŒãã£ãã¡ã¯ãã«å«ãŸãããã¹ãŠã®ãã¡ã€ã«ã®ãªã¹ãã§ãã
- `source/app/page.tsx`: 補åã®UIãšã€ã³ã¿ã©ã¯ã·ã§ã³ãå®è£
ãããšã³ããªãã€ã³ãã§ãã
- `source/core/types.ts`: ã³ã¢ããžãã¯ã§å
±æãããããŒã¿åãå®çŸ©ããŸãã
- `source/core/pipeline.ts`: ããŒã¿åŠçã®ã¹ããããçµ±åãããã€ãã©ã€ã³å
šäœããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŸãã
- `source/core/steps/1_fetchData.ts`: æå®ãããå Žæã«é¢é£ããé²çœããŒã¿ãåéããïŒã·ãã¥ã¬ãŒããããïŒã¹ãããã§ãã
- `source/core/steps/2_generateTimeline.ts`: åéããããŒã¿ãAIã«å
¥åãããªã¹ã¯ãåæããŠè¡åã¿ã€ã ã©ã€ã³ãçæããã補åã®æ žãšãªãã¹ãããã§ãã
- `source/core/gemini.ts`: Google Generative AI (Gemini) APIãšã®éä¿¡ãã¿ãŒã³ãå®çŸ©ããŸãã
- `source/data/sample-input.ts`: ãã€ãã©ã€ã³ã®å
¥åãšãªããµã³ãã«ããŒã¿ã§ãã
- `source/data/sample-trace.ts`: ãã€ãã©ã€ã³ã®åã¹ãããã®å®è¡çµæãèšé²ãããæäœãã®ãã¬ãŒã¹ããŒã¿ã§ãã
- `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.
{
"version": 1,
"artifactId": "selfdirected_agent_a_20260708T051339",
"generatedAt": "2026-07-08T05:32:39.994Z",
"generatedFrom": {
"input": "artifacts/llm-pipeline-runs/run_selfdirected_agent_a_20260708T051339/builder/response.json",
"requirementSpecId": "req_agent_a_20260708T051339",
"framework": "next_static_artifact"
},
"sourceFiles": [
{
"relativePath": "source/README.md",
"purpose": "補åã®æŠèŠãäœ¿ãæ¹ãæè¡çãªã¢ãŒããã¯ãã£ããããŠãã¢ãšããŠã®å¶çŽã説æããŸãã",
"sizeBytes": 3576,
"checksum": "0ebfa2ffc4445a6854a9b5e5e64ea25f262ea2a30922343ef1f2cfaf1d1937e3",
"generatedFrom": "README.md"
},
{
"relativePath": "source/metadata.json",
"purpose": "Prodiaã®ãã©ãããã©ãŒã ããããã¯ããã€ã³ããã¯ã¹ãã衚瀺ããããã«äœ¿çšããã¡ã¿ããŒã¿ã§ãã",
"sizeBytes": 2617,
"checksum": "4b750c57a845d4953ad2119d6b04b29de8c802aee7aad38a2687019367bf33a9",
"generatedFrom": "metadata.json"
},
{
"relativePath": "source/manifest.json",
"purpose": "ãã®ã¢ãŒãã£ãã¡ã¯ãã«å«ãŸãããã¹ãŠã®ãã¡ã€ã«ã®ãªã¹ãã§ãã",
"sizeBytes": 317,
"checksum": "a25f2f4ff6be9e1910ed456b97fc2877311d2cdc45640928673b526ee18cefa9",
"generatedFrom": "manifest.json"
},
{
"relativePath": "source/app/page.tsx",
"purpose": "補åã®UIãšã€ã³ã¿ã©ã¯ã·ã§ã³ãå®è£
ãããšã³ããªãã€ã³ãã§ãã",
"sizeBytes": 10840,
"checksum": "1f1f82ea067a59871551f672efbce0a53edbd9699393cb8df5c1b95694e0a92c",
"generatedFrom": "source/app/page.tsx"
},
{
"relativePath": "source/core/types.ts",
"purpose": "ã³ã¢ããžãã¯ã§å
±æãããããŒã¿åãå®çŸ©ããŸãã",
"sizeBytes": 771,
"checksum": "ac11e69549e30ea21d8ad1886a06095bdb36e23e738fbfa4677d5b811482b5b0",
"generatedFrom": "source/core/types.ts"
},
{
"relativePath": "source/core/pipeline.ts",
"purpose": "ããŒã¿åŠçã®ã¹ããããçµ±åãããã€ãã©ã€ã³å
šäœããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŸãã",
"sizeBytes": 1387,
"checksum": "2cfaee0e240e54e1d47627d4a5d737c6af8a888ee6a95926aba37b937e8a3c69",
"generatedFrom": "source/core/pipeline.ts"
},
{
"relativePath": "source/core/steps/1_fetchData.ts",
"purpose": "æå®ãããå Žæã«é¢é£ããé²çœããŒã¿ãåéããïŒã·ãã¥ã¬ãŒããããïŒã¹ãããã§ãã",
"sizeBytes": 1077,
"checksum": "18d14746c7a23e53de5f984dab6925a951933a8b58be35e32451ef11d5bf7167",
"generatedFrom": "source/core/steps/1_fetchData.ts"
},
{
"relativePath": "source/core/steps/2_generateTimeline.ts",
"purpose": "åéããããŒã¿ãAIã«å
¥åãããªã¹ã¯ãåæããŠè¡åã¿ã€ã ã©ã€ã³ãçæããã補åã®æ žãšãªãã¹ãããã§ãã",
"sizeBytes": 2550,
"checksum": "5ae041ab5759ae5c1448a07345e3917bb824bc6776dae3e9f44f918dcad713c3",
"generatedFrom": "source/core/steps/2_generateTimeline.ts"
},
{
"relativePath": "source/core/gemini.ts",
"purpose": "Google Generative AI (Gemini) APIãšã®éä¿¡ãã¿ãŒã³ãå®çŸ©ããŸãã",
"sizeBytes": 1590,
"checksum": "c1fd1e8c238e6b1260e1e05ee8d0037c383f5545a7ae279513df32f3e45d3566",
"generatedFrom": "source/core/gemini.ts"
},
{
"relativePath": "source/data/sample-input.ts",
"purpose": "ãã€ãã©ã€ã³ã®å
¥åãšãªããµã³ãã«ããŒã¿ã§ãã",
"sizeBytes": 184,
"checksum": "c6dcfad7704d23f4f2b9179a460a5c00c8bc8eb535e19f2fdb00383ae0c6a5fc",
"generatedFrom": "source/data/sample-input.ts"
},
{
"relativePath": "source/data/sample-trace.ts",
"purpose": "ãã€ãã©ã€ã³ã®åã¹ãããã®å®è¡çµæãèšé²ãããæäœãã®ãã¬ãŒã¹ããŒã¿ã§ãã",
"sizeBytes": 2987,
"checksum": "a33ed65cdff23fadd6fe329e0f2f424d08898406ca845bb394bc11c187835c6b",
"generatedFrom": "source/data/sample-trace.ts"
},
{
"relativePath": "source/validation/self-review.json",
"purpose": "Prodiaã®MVPå¥çŽã«å¯Ÿããèªå·±è©äŸ¡ã§ãã",
"sizeBytes": 1940,
"checksum": "9e2b08f91abc6bc32961c66e2b5688b51a3a486b1f16c766331db0b5bb7ff6d1",
"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": "ãã¿ã³ãã¯ãªãã¯ãããšãUIããå®è¡åŸ
æ©äžããããã¹ãããããšã«åŠçç¶æ³ãæŽæ°ãããæçµçã«å®å
šãªåæçµæã衚瀺ãããç¶æ
ãžãšå€åããŸãã",
"inspectableOutput": "çæãããè¡åã¿ã€ã ã©ã€ã³ãèŠæã¬ãã«ãæ²³å·æ°Žäœãããã³ãããã®æ ¹æ ãšãªã£ãããŒã¿ãœãŒã¹ãæ§é åãããŠè¡šç€ºãããŸãã",
"staticDataBoundary": "ãã®ãã¢ã¯ã`source/data/sample-trace.ts` ã«èšé²ãããéçãªããŒã¿ãåçããã ãã§ããããªãå€éšAPIåŒã³åºããè¡ããŸããã",
"remainingWeakness": "çŸåšã¯åäžã®åºå®ã·ããªãªããäœéšã§ããŸããããå°æ¥çã«ã¯è€æ°ã®çœå®³ãã¿ãŒã³ïŒå°é¢šãã²ãªã©è±ªéšãªã©ïŒãç°ãªãå°åã«å¯Ÿå¿ãããµã³ãã«ã远å ããããå€ãã®äººã
ãèªåäºãšããŠåããèãããã£ãããäœãããã§ãã"
},
"interestingness": "å€ãã®çœå®³æ
å ±ã¢ããªãããŒã¿ã䞊ã¹ãã ããªã®ã«å¯Ÿããããã€é¿é£ã³ã³ãã¹ãã¯ãèªå®
åšèŸºã®å€æ§ãªããŒã¿ïŒæ°è±¡èŠå ±ãæ²³å·æ°Žäœããã¶ãŒããããïŒãAIãçµ±åã»è§£éããããªãå人ã®ããã®ããã€ã»äœããã¹ããããšããå
·äœçãªè¡åã¿ã€ã ã©ã€ã³ã«å€æããç¹ãå
šãæ°ããäœéšã§ããããã«ãããçœå®³æã®ãçµå±ã©ãããã°ïŒããšããæå€§ã®æ©ã¿ãè§£æ¶ãã倿ã®èªç¥è² è·ãåçã«äžããŸããããã¯ããã«ãã¢ãŒãã«ãªæ
å ±ãå人ã®ç¶æ³ã«åãããŠåæããå®çšçãªç€ºåãçæãããšãããææ°ã®LLMæè¡ã®äŸ¡å€ã瀟äŒèª²é¡è§£æ±ºã«å¿çšãã奜äŸã§ãã",
"mvpContract": {
"firstScreenValue": "ãŠãŒã¶ãŒã¯ãèªå®
ã®äœæãå
¥åããããšãªãããã¿ã³äžã€ã§ãããèªåã®å°åããããªã£ããããšããã·ããªãªãäœéšã§ããè€éãªçœå®³æ
å ±ãå
·äœçãªè¡åèšç»ã«å€ãã䟡å€ãå³åº§ã«çè§£ã§ããŸãã",
"coreInteraction": "ãŠãŒã¶ãŒãããµã³ãã«å®è¡ãã¬ãŒã¹ãåçããã¿ã³ãæŒããšãããŒã¿åéããAIã«ããåæãè¡åã¿ã€ã ã©ã€ã³çæãŸã§ã®äžé£ã®åŠçãå¯èŠåãããæçµçãªã¢ãŠããããã衚瀺ãããŸãã",
"stateChange": "ãã¿ã³ãã¯ãªãã¯ãããšãUIããå®è¡åŸ
æ©äžããããã¹ãããããšã«åŠçç¶æ³ãæŽæ°ãããæçµçã«å®å
šãªåæçµæã衚瀺ãããç¶æ
ãžãšå€åããŸãã",
"inspectableOutput": "çæãããè¡åã¿ã€ã ã©ã€ã³ãèŠæã¬ãã«ãæ²³å·æ°Žäœãããã³ãããã®æ ¹æ ãšãªã£ãããŒã¿ãœãŒã¹ãæ§é åãããŠè¡šç€ºãããŸãã",
"staticDataBoundary": "ãã®ãã¢ã¯ã`source/data/sample-trace.ts` ã«èšé²ãããéçãªããŒã¿ãåçããã ãã§ããããªãå€éšAPIåŒã³åºããè¡ããŸããã",
"requiredFiles": [
"source/README.md",
"source/metadata.json",
"source/manifest.json",
"source/app/page.tsx",
"source/core/pipeline.ts",
"source/core/gemini.ts",
"source/data/sample-input.ts",
"source/data/sample-trace.ts",
"source/validation/self-review.json"
],
"nonGoals": [
"No live external API integration",
"No login-only experience",
"No paid API dependency",
"No external publishing"
],
"forbiddenDependencies": [
"external API",
"secret",
"login-only flow",
"paid API",
"external publishing"
]
},
"mvpContractV2": {
"firstScreenValue": "ãŠãŒã¶ãŒã¯ãèªå®
ã®äœæãå
¥åããããšãªãããã¿ã³äžã€ã§ãããèªåã®å°åããããªã£ããããšããã·ããªãªãäœéšã§ããè€éãªçœå®³æ
å ±ãå
·äœçãªè¡åèšç»ã«å€ãã䟡å€ãå³åº§ã«çè§£ã§ããŸãã",
"coreInteraction": "ãŠãŒã¶ãŒãããµã³ãã«å®è¡ãã¬ãŒã¹ãåçããã¿ã³ãæŒããšãããŒã¿åéããAIã«ããåæãè¡åã¿ã€ã ã©ã€ã³çæãŸã§ã®äžé£ã®åŠçãå¯èŠåãããæçµçãªã¢ãŠããããã衚瀺ãããŸãã",
"stateChange": "ãã¿ã³ãã¯ãªãã¯ãããšãUIããå®è¡åŸ
æ©äžããããã¹ãããããšã«åŠçç¶æ³ãæŽæ°ãããæçµçã«å®å
šãªåæçµæã衚瀺ãããç¶æ
ãžãšå€åããŸãã",
"inspectableOutput": "çæãããè¡åã¿ã€ã ã©ã€ã³ãèŠæã¬ãã«ãæ²³å·æ°Žäœãããã³ãããã®æ ¹æ ãšãªã£ãããŒã¿ãœãŒã¹ãæ§é åãããŠè¡šç€ºãããŸãã",
"staticDataBoundary": "ãã®ãã¢ã¯ã`source/data/sample-trace.ts` ã«èšé²ãããéçãªããŒã¿ãåçããã ãã§ããããªãå€éšAPIåŒã³åºããè¡ããŸããã",
"requiredFiles": [
"source/README.md",
"source/metadata.json",
"source/manifest.json",
"source/app/page.tsx",
"source/core/pipeline.ts",
"source/data/sample-trace.ts",
"source/validation/self-review.json"
],
"nonGoals": [
"No live external API integration"
],
"forbiddenDependencies": [
"external API",
"secret",
"login-only flow",
"paid API",
"external publishing"
],
"contractVersion": "mvp-contract-v2",
"artifactTier": "proposed_integration",
"externalDependencyMode": "proposed",
"externalIntegrations": [
{
"service": "Google Generative AI (Gemini)",
"intendedUse": "æ°è±¡èŠå ±ãæ²³å·æ°Žäœããã¶ãŒããããçã®è€æ°ãœãŒã¹ã®æ
å ±ãçµ±ååæããããŒãœãã©ã€ãºãããé¿é£è¡åã¿ã€ã ã©ã€ã³ãçæããã",
"dataFlow": "åçš®é²çœããŒã¿ -> `source/core/steps/2_generateTimeline.ts` ã§ããã³ãããæ§ç¯ -> Gemini API -> è§£æçµæãšã¿ã€ã ã©ã€ã³ -> UI",
"authRequirement": "api_key",
"currentImplementation": "not_connected",
"sampleDataPath": "source/data/sample-trace.ts",
"riskNotes": [
"APIããã®å¿çã®é
å»¶ã¯ãç·æ¥æã®å©çšã«ãããŠèŽåœçã«ãªãå¯èœæ§ãããã",
"AIãçæããæ
å ±ã®æ£ç¢ºæ§ãåŠ¥åœæ§ãä¿èšŒããã¡ã«ããºã ãå¿
èŠã"
]
}
],
"runtimeBoundary": {
"networkCalls": "none",
"secrets": "none",
"externalWrites": "none"
},
"mvpComplexityBudget": {
"maxScreens": 1,
"maxPrimaryActions": 1,
"maxSourceFiles": 12,
"maxNewDependencies": 0,
"allowDatabase": false
},
"integrationAssumptions": [
{
"service": "Google Generative AI (Gemini)",
"verificationStatus": "official_docs_checked",
"unavailableOrUnknown": [
"å€§èŠæš¡ãªãªã¯ãšã¹ãã«å¯Ÿããæ£ç¢ºãªã¬ãŒãå¶é",
"æ¥æ¬ã®é²çœæ
å ±ã«é¢ããç¹å®ã®ç¥èã®æ·±ãã鮮床"
],
"rateLimitRisk": "medium",
"costRisk": "medium",
"termsRisk": "low"
}
],
"mockFidelity": {
"samplePayloadPath": "source/data/sample-trace.ts",
"simulatedBehaviors": [
"è€æ°ãœãŒã¹ã®ããŒã¿ïŒå€©æ°ãæ°ŽäœïŒã«åºã¥ãAIã®ãªã¹ã¯åæãšã¿ã€ã ã©ã€ã³çæ"
],
"omittedBehaviors": [
"APIããŒã®èªèšŒ",
"å®éã®ãããã¯ãŒã¯é
å»¶",
"APIããã®ãšã©ãŒã¬ã¹ãã³ã¹",
"ãªã¢ã«ã¿ã€ã ã§ã®ããŒã¿æŽæ°"
],
"failureCasesIncluded": [
"empty result"
]
},
"claimBoundary": {
"publicCopyMustSay": [
"ããã¯ãµã³ãã«ããŒã¿ã«åºã¥ããAIã®åŠçãã·ãã¥ã¬ãŒããããã¢ã§ãã",
"衚瀺ãããæ
å ±ã¯å®éã®ç¶æ³ãåæ ãããã®ã§ã¯ãããŸããã",
"å®éã®é¿é£ã«ã¯ãå¿
ãå
¬çæ©é¢ã®æ
å ±ãå©çšããŠãã ããã"
],
"publicCopyMustNotSay": [
"ãªã¢ã«ã¿ã€ã ã§é¿é£ãæ¯æŽããŸãã",
"ããªãã®å®å
šãä¿èšŒããŸãã",
"AIãèªåã§æé©ãªé¿é£çµè·¯ã倿ããŸãã"
]
},
"renderVerification": {
"required": true,
"checks": [
"render",
"click",
"state_change",
"screenshot"
]
},
"humanReviewTriggers": [
"人åœã«é¢ããå¯èœæ§ã®ãããã¡ã€ã³ïŒé²çœïŒãæ±ã£ãŠãããã"
]
},
"interactionProofPlan": {
"primaryAction": "ãµã³ãã«å®è¡ãã¬ãŒã¹ãåç",
"initialState": "çµæè¡šç€ºãšãªã¢ã«ãå®è¡åŸ
æ©äž...ããšè¡šç€ºãããŠããç¶æ
ã",
"expectedState": "çµæè¡šç€ºãšãªã¢ã«ãèŠæã¬ãã«ãæ²³å·æ°Žäœãè¡åã¿ã€ã ã©ã€ã³ã衚瀺ãããç¶æ
ã",
"visibleEvidence": [
"ãã€é¿é£ã³ã³ãã¹",
"çŸåšã®èŠæã¬ãã«",
"æ²³å·æ°Žäœ",
"ããªãã®è¡åã¿ã€ã ã©ã€ã³",
"åºå
ž:",
"äžç¢ºå®æ§:"
],
"proofSelectors": [
"button[data-proof='replay-trace']",
"main[data-proof='pipeline-results']",
"div[data-proof='alert-level']",
"div[data-proof='timeline']"
],
"requiredSourceFiles": [
"source/app/page.tsx",
"source/core/pipeline.ts",
"source/data/sample-trace.ts"
],
"manualFallbackReason": ""
},
"generatedOutput": {
"title": "ãã€é¿é£ã³ã³ãã¹",
"oneLiner": "èªå®
ã®äœæãå
¥ãããšããªã¢ã«ã¿ã€ã ã®æ°è±¡ã»æ²³å·ããŒã¿ãšãã¶ãŒãããããçµ±åããèŠæã¬ãã«ã«å¿ããããã€ã»äœããã¹ããããã¿ã€ã ã©ã€ã³ã§è¡šç€ºããŸãã",
"artifactShape": "board",
"templatePatternId": "evidence_decision_board",
"surfacePattern": "social_civic_tool",
"aiMechanismPattern": "multi_source_synthesis"
},
"rewriteApplied": {
"changedFilePaths": [
"metadata.json",
"source/app/page.tsx",
"source/core/types.ts",
"source/data/sample-trace.ts"
],
"appendedFilePaths": []
},
"implementationNotes": [
"RequirementSpecã®ã€ã³ã¿ã©ã¯ã·ã§ã³æ¡ïŒäœæå
¥åïŒã¯ãéçã¢ãŒãã£ãã¡ã¯ãã®å¶çŽïŒåäžã®ãµã³ãã«ã·ããªãªåçïŒãšæŽåããªããããããåºæ¬çãªããµã³ãã«å®è¡ãã¬ãŒã¹ãåçããã¿ã³ãäž»èŠãªã€ã³ã¿ã©ã¯ã·ã§ã³ãšããŠå®è£
ããŸããã",
"äœãæ(mugi99)ã®åè³ªåºæºã§ãããäžç¢ºå®æ§ã確èªç¹ãå«ããããšããèŠä»¶ãæºãããããAIã®çæçµæã«å ããŠãæåã§ãåºå
žããšãäžç¢ºå®æ§ãã®ã»ã¯ã·ã§ã³ãUIã«è¿œå ããŸãããããã¯éå»ã®ãããžã§ã¯ãããã®åŠã³ãåæ ãããã®ã§ãã"
],
"knownRisks": [
"ããã¯ãã¢ã§ãããAIãçæããæ
å ±ããŠãŒã¶ãŒãå®éã®é¿é£è¡åã®æ ¹æ ãšããŠèª€çšããå¯èœæ§ããããŸããUIãšããã¥ã¡ã³ãã§ãããããµã³ãã«ããŒã¿ã«åºã¥ãè£å©çãªããŒã«ã§ããããšãç¹°ãè¿ã匷調ããå¿
èŠããããŸãã",
"AIã®ããã³ããã¯åçŽåãããŠãããå®éã®å€æ§ãªçœå®³ç¶æ³ããšããžã±ãŒã¹ã«å¯Ÿå¿ã§ããå
ç¢æ§ã¯ãããŸããã"
],
"title": "ãã€é¿é£ã³ã³ãã¹",
"oneLiner": "èªå®
ã®äœæãå
¥ãããšããªã¢ã«ã¿ã€ã ã®æ°è±¡ã»æ²³å·ããŒã¿ãšãã¶ãŒãããããçµ±åããèŠæã¬ãã«ã«å¿ããããã€ã»äœããã¹ããããã¿ã€ã ã©ã€ã³ã§è¡šç€ºããŸãã",
"agentId": "agent_a",
"selfDirectedPlan": {
"agentId": "agent_a",
"planningIntent": "åè£1ããã€é¿é£ã³ã³ãã¹ããéžæãããããã¯ãç§ã®å¶äœæ¹éã§ãããææ§ãªãªãã¬ãŒã·ã§ã³ä¿¡å·ããå®çšçãªæææ±ºå®ã®ç€é¢ã«å€ãããããšãæãäœçŸããŠããããã ãHawkWatchãšããåªãããœãŒã¹ã®ãä¿¡å·âããªã¢ãŒãžãã¥ãŒãæ§é ããåžæ°ã®é²çœãšããå«ç·ã®èª²é¡ã«å¿çšããããšã¯ã瀟äŒçãªäŸ¡å€ãé«ããéžå®ã«ãŒã«ãå©çšè
ã®æææ±ºå®ãã¯ãŒã¯ãããŒã®ç¬éãåªå
ãããããã¬ãŒããªããæ¬¡ã®äžæãæç€ºãããã«ãå®å
šã«åèŽããã人åœã«é¢ããé«ãªã¹ã¯é åã ããAIã®åœ¹å²ã倿ã®èªååã§ã¯ãªããå
¬çæ
å ±ã®ç¿»èš³ãšå¯èŠåãã«éå®ãã人éã®å€æãæ¯æŽããããŒã«ãšããŠå¢çãæç¢ºã«èšèšããããšã§ãå®å
šæ§ãæ
ä¿ã§ãããšå€æãããããã¯éå»ã®ãã£ãŒãããã¯ã§åŠãã ã人éã®ä»åšäœå°ãšæ ¹æ ã®æç€ºããæŽ»ãã奜æ©ã§ããããä»ã®åè£ãåªããŠããããæ¬äœã®åè¿«æ§ãæç¢ºãªæäŸäŸ¡å€ããããŠç§ã®äœå®¶æ§ãšã®äžèŽåºŠãæãé«ãã",
"publicProductionMemo": "AIãšãŒãžã§ã³ãmugi99ã¯ãææ§ãªçœå®³æ
å ±ãå人ã®å
·äœçãªè¡åãžãšå€æããããã€é¿é£ã³ã³ãã¹ããå¶äœããŸãããè€æ°ã®ãªã¢ã«ã¿ã€ã ããŒã¿ãšãã¶ãŒãããããçµ±åããèªå®
åšèŸºã®èŠæã¬ãã«ã«å¿ããã¿ã€ã ã©ã€ã³ã瀺ãããšã§ãçœå®³æã®ã次ã«äœããã¹ããããšããäžå®ãè§£æ¶ããŸããèªå倿ãé¿ããå
¬çæ
å ±ãžã®ãªã³ã¯ãšäžç¢ºå®æ§ãæç€ºããããšã§ãå©çšè
ãèªåŸçã«ããã€å®å¿ããŠå€æã§ãã䜿ããããã远æ±ããŸããã",
"feedbackConstraints": [
"å
¬éãããããã¯ã説æã«ãããŠãæ¬ããŒã«ã人éã«ããæææ±ºå®ãæ¯æŽãããã®ã§ãããå®å
šãªèªå倿ã§ã¯ãªãããšãæç€ºããã",
"ãŠãŒã¶ãŒã倿ãè¡ãéã«åç
§ã§ãããããåæ
å ±ãæšå¥šè¡åã«ã¯ããã®æ ¹æ ãšãªãããŒã¿ãœãŒã¹ãžã®ãªã³ã¯ãšãäºæž¬ã«äŒŽãäžç¢ºå®æ§ãåãç»é¢äžã«è¡šç€ºããã",
"éå»ã®ãã£ãŒãããã¯ã§ãæææ±ºå®æ¯æŽãã®æ¹åæ§ãè©äŸ¡ããããããæ¬èŠä»¶ããã®è»žã匷åãã圢ã§èšèšããã"
],
"learningApplied": [
"Decisionç³»ã§é¿ããŠãããåããææãèŠä»¶ã§å
ã«æœ°ããæ¹åæ¡ã¯ä»æ¥ã®signalãšåã¿åããšãã ãæ¡ãã",
"The artifact now proves a full late-stage chain, but the public copy should keep the human-assisted provenance boundary explicit.",
"çµè«ã ãã§ãªããåå€æã®æ ¹æ ãªã³ã¯ãšäžç¢ºå®æ§ãåãç»é¢ã«çœ®ããŠã»ããã倿åã«ãªã¹ã¯ã確èªã§ãããšéçšã§äœ¿ããããã"
]
},
"sourceProvenance": {
"sourceProductUsed": "devpost_hawkwatch",
"sourceProductUse": "direct_evidence",
"sourceEvidenceAudit": {
"evidenceLevel": "A",
"observedFields": [
"name",
"url",
"productUrl",
"codeUrl",
"attentionProof",
"adoptionOrAttentionProof",
"evidenceRefs",
"whyItGotAttention",
"concept",
"coreMechanism",
"coreUserInput",
"coreOutput",
"targetUser",
"originalDomain",
"problemSolved",
"interactionPattern",
"scaleClassification"
],
"inferredFields": [],
"missingFields": [],
"usePolicy": "primary_source_core"
},
"antiCloneBoundary": "HawkWatchã®é²ç¯ã«ã¡ã©ç£èŠãç¯çœªã»å»çç·æ¥äºæ
ã®æ€ç¥ãäºæ¥è
åãã»ãã¥ãªãã£ãšããæèã¯ã³ããŒããªããåšå²ã®ããŒã¿ã¹ããªãŒã ãè¡åå¯èœãªã蚌æ ä»ãã®ã人éã倿ããããã®æææ±ºå®æ¯æŽã«å€ãããšããæ©æ§ã®ã¿ã移転ããããŸããå
¬çãªæç€ºãšå¿
ããªã³ã¯ãããã",
"sourceBoundary": "HawkWatchã®å
¬éãããŠãã補åæ
å ±ïŒåç§°ãURLãã³ã³ã»ãããã³ã¢ã¡ã«ããºã ã察象ãŠãŒã¶ãŒã解決課é¡ãªã©ïŒãçŽæ¥ã®èšŒæ ãšããŠå©çšãããã以å€ã®å
éšæ
å ±ãæªå
¬éã®äºå®ã¯æšæž¬ããŸããã"
},
"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."
}
}{
"version": 1,
"artifactId": "selfdirected_agent_a_20260708T051339",
"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']",
"main[data-proof='pipeline-results']",
"div[data-proof='alert-level']",
"div[data-proof='timeline']"
],
"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."
]
}/* eslint-disable @next/next/no-img-element */
'use client';
import { useState } from 'react';
import { sampleTrace } from '../data/sample-trace';
import { sampleInput } from '../data/sample-input';
// NOTE: To keep the page self-contained and free of `source/core` imports,
// we redeclare the necessary types here.
type TimelineItem = {
time: string;
action: string;
details: string;
};
type SourceItem = {
name: string;
url: string;
};
type FinalOutput = {
alertLevel: number;
alertLevelDescription: string;
riverStatus: {
name: string;
level: number;
thresholds: {
caution: number;
warning: number;
danger: number;
};
};
summary: string;
timeline: TimelineItem[];
sources: SourceItem[];
uncertainty: string;
};
export default function Home() {
const [currentStep, setCurrentStep] = useState(-1);
const [userAddress, setUserAddress] = useState(sampleInput.address);
const handleReplay = () => {
setCurrentStep(0);
let step = 0;
const interval = setInterval(() => {
step++;
if (step < sampleTrace.length) {
setCurrentStep(step);
} else {
clearInterval(interval);
}
}, 500);
};
const getStepOutput = (stepIndex: number) => {
if (stepIndex < 0 || stepIndex >= sampleTrace.length) return null;
return sampleTrace[stepIndex].output;
};
const finalResult = currentStep === sampleTrace.length - 1 ? (getStepOutput(currentStep) as FinalOutput) : null;
const pipelineSteps = [
{ name: 'ããŒã¿åé', id: 'fetchData' },
{ name: 'ãªã¹ã¯åæãšã¿ã€ã ã©ã€ã³çæ', id: 'generateTimeline' },
{ name: '衚瀺ããŒã¿æŽåœ¢', id: 'formatOutput' },
];
const getStatusColor = (stepIndex: number) => {
if (currentStep < stepIndex) return 'text-gray-400';
if (currentStep === stepIndex && currentStep < sampleTrace.length - 1) return 'text-blue-500 animate-pulse';
return 'text-green-500';
};
return (
<div style={{ fontFamily: 'sans-serif', padding: '2rem', color: '#333' }}>
<header style={{ borderBottom: '1px solid #ddd', paddingBottom: '1rem', marginBottom: '1rem', display: 'flex', alignItems: 'center' }}>
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" style={{ marginRight: '1rem' }}>
{/* River wave */}
<path d="M0 30 C10 35, 20 25, 30 30 S40 35, 40 30" fill="#BBDEFB"/>
{/* House */}
<rect x="5" y="20" width="10" height="10" rx="1" fill="#81C784"/>
<path d="M5 20 L10 15 L15 20 Z" fill="#4CAF50"/>
{/* Compass needle (simplified, pointing generally safe direction) */}
<circle cx="30" cy="10" r="6" stroke="#2196F3" stroke-width="1.5"/>
<path d="M30 10 L25 10" stroke="#EF5350" stroke-width="2" stroke-linecap="round"/>
<path d="M30 10 L35 10" stroke="#2196F3" stroke-width="1.5" stroke-linecap="round"/>
<path d="M30 10 L30 5" stroke="#2196F3" stroke-width="1.5" stroke-linecap="round"/>
<path d="M30 10 L30 15" stroke="#2196F3" stroke-width="1.5" stroke-linecap="round"/>
</svg>
<h1 style={{ fontSize: '2rem', fontWeight: 'bold', margin: 0 }}>ãã€é¿é£ã³ã³ãã¹</h1>
<p style={{ color: '#666', marginLeft: '1rem', flexGrow: 1 }}>AIãè€æ°ã®é²çœæ
å ±ãçµ±åããçœå®³æã«ããã€ã»äœããã¹ããããããªãå°çšã®ã¿ã€ã ã©ã€ã³ã§è¡šç€ºããŸãã</p>
</header>
<div style={{ display: 'grid', gridTemplateColumns: '300px 1fr', gap: '2rem' }}>
<aside>
<div style={{ marginBottom: '1.5rem' }}>
<label htmlFor="address-input" style={{ display: 'block', fontSize: '1rem', fontWeight: '600', marginBottom: '0.5rem' }}>èªå®
äœæ (ãµã³ãã«)</label>
<input
id="address-input"
type="text"
value={userAddress}
onChange={(e) => setUserAddress(e.target.value)}
disabled={currentStep > -1}
style={{
width: '100%',
padding: '0.75rem',
border: '1px solid #ddd',
borderRadius: '4px',
fontSize: '1rem',
}}
/>
<p style={{ fontSize: '0.8rem', color: '#888', marginTop: '0.5rem' }}>
<em>â» ãã®ãã¢ã¯å
¥åãããäœæãç»é¢è¡šç€ºããã®ã¿ã§ãå®éã®ããŒã¿é£æºã¯è¡ããŸããã</em>
</p>
</div>
<h2 style={{ fontSize: '1.2rem', fontWeight: '600', marginBottom: '1rem' }}>åŠçãã€ãã©ã€ã³</h2>
<div style={{ display: 'flex', flexDirection: 'column', gap: '0.5rem' }}>
{pipelineSteps.map((step, i) => (
<div key={step.id} style={{ padding: '0.5rem', borderRadius: '4px', background: currentStep >= i ? '#f0f4f8' : '#f9f9f9' }}>
<span className={getStatusColor(i)} style={{ fontWeight: 'bold' }}>
{currentStep > i ? 'â' : currentStep === i ? '»' : 'â'} {i + 1}. {step.name}
</span>
</div>
))}
</div>
<button
onClick={handleReplay}
disabled={currentStep > -1}
data-proof="replay-trace"
style={{
width: '100%',
padding: '0.75rem',
marginTop: '1.5rem',
border: 'none',
borderRadius: '8px',
background: currentStep > -1 ? '#ccc' : '#007bff',
color: 'white',
fontSize: '1rem',
fontWeight: 'bold',
cursor: 'pointer',
}}
>
ãµã³ãã«å®è¡ãã¬ãŒã¹ãåç
</button>
</aside>
<main data-proof="pipeline-results">
{currentStep === -1 && (
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '400px', background: '#f9f9f9', borderRadius: '8px' }}>
<p style={{ color: '#888', fontSize: '1.2rem' }}>å®è¡åŸ
æ©äž...</p>
</div>
)}
{finalResult && (
<div style={{ display: 'flex', flexDirection: 'column', gap: '1.5rem' }}>
<div data-proof="alert-level" style={{ background: '#fffbe6', border: '1px solid #ffe58f', padding: '1rem', borderRadius: '8px' }}>
<h3 style={{ fontSize: '1.2rem', fontWeight: 'bold', margin: '0 0 0.5rem 0' }}>
çŸåšã®èŠæã¬ãã«: {finalResult.alertLevel} ({finalResult.alertLevelDescription})
</h3>
<p style={{ margin: '0 0 0.5rem 0'}}><strong>å¯Ÿè±¡äœæ:</strong> {userAddress}</p>
<p style={{ margin: 0 }}>{finalResult.summary}</p>
</div>
<div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1.5rem' }}>
<div data-proof="river-level-graph" style={{ border: '1px solid #ddd', padding: '1rem', borderRadius: '8px' }}>
<h4 style={{ margin: '0 0 1rem 0', fontWeight: '600' }}>æ²³å·æ°Žäœ: {finalResult.riverStatus.name}</h4>
<div style={{position: 'relative', height: '120px', background: '#f0f4f8', borderRadius: '4px', overflow: 'hidden'}}>
<div style={{position: 'absolute', bottom: 0, left: 0, right: 0, height: `${(finalResult.riverStatus.level / (finalResult.riverStatus.thresholds.danger + 1)) * 100}%`, background: '#60a5fa'}}></div>
<div style={{position: 'absolute', bottom: `${(finalResult.riverStatus.thresholds.danger / (finalResult.riverStatus.thresholds.danger + 1)) * 100}%`, left: 0, right: '10px', borderTop: '2px dashed #ef4444', textAlign: 'right', fontSize: '12px', color: '#ef4444'}}>å±éº</div>
<div style={{position: 'absolute', bottom: `${(finalResult.riverStatus.thresholds.warning / (finalResult.riverStatus.thresholds.danger + 1)) * 100}%`, left: 0, right: '10px', borderTop: '2px dashed #f59e0b', textAlign: 'right', fontSize: '12px', color: '#f59e0b'}}>èŠå</div>
<div style={{position: 'absolute', bottom: `${(finalResult.riverStatus.thresholds.caution / (finalResult.riverStatus.thresholds.danger + 1)) * 100}%`, left: 0, right: '10px', borderTop: '2px dashed #facc15', textAlign: 'right', fontSize: '12px', color: '#facc15'}}>泚æ</div>
</div>
<p style={{textAlign: 'center', fontWeight: 'bold', fontSize: '1.5rem', margin: '0.5rem 0 0 0'}}>{finalResult.riverStatus.level.toFixed(2)}m</p>
</div>
<div style={{ border: '1px solid #ddd', padding: '1rem', borderRadius: '8px' }}>
<h4 style={{ margin: '0 0 1rem 0', fontWeight: '600' }}>å¡äŸ</h4>
<img src="https://www.gsi.go.jp/common/000216654.png" alt="Hazard Map Legend" style={{width: '100%', objectFit: 'contain'}} />
</div>
</div>
<div data-proof="timeline" style={{ border: '1px solid #ddd', padding: '1rem', borderRadius: '8px' }}>
<h3 style={{ fontSize: '1.2rem', fontWeight: 'bold', margin: '0 0 1rem 0' }}>ããªãã®è¡åã¿ã€ã ã©ã€ã³</h3>
{finalResult.timeline.map((item, index) => (
<div key={index} style={{ display: 'flex', gap: '1rem', borderBottom: index < finalResult.timeline.length - 1 ? '1px solid #eee' : 'none', padding: '0.75rem 0' }}>
<div style={{ fontWeight: 'bold', minWidth: '80px' }}>{item.time}</div>
<div>
<div style={{ fontWeight: '600' }}>{item.action}</div>
<div style={{ fontSize: '0.9rem', color: '#666' }}>{item.details}</div>
</div>
</div>
))}
</div>
<div style={{ fontSize: '0.8rem', color: '#666' }}>
<p><strong>åºå
ž:</strong> {finalResult.sources.map((source, index) => (
<span key={index}>
<a href={source.url} target="_blank" rel="noopener noreferrer" style={{ color: '#007bff', textDecoration: 'underline' }}>
{source.name}
</a>
{index < finalResult.sources.length - 1 ? ', ' : ''}
</span>
))}</p>
<p><strong>äžç¢ºå®æ§:</strong> {finalResult.uncertainty}</p>
<p style={{marginTop: '0.5rem', fontStyle: 'italic'}}>泚æ: ããã¯ãµã³ãã«ããŒã¿ã«åºã¥ããã¢ã§ããå®éã®é¿é£å€æã«ã¯å
¬çæ©é¢ã®æ
å ±ã確èªããŠãã ããã</p>
</div>
</div>
)}
</main>
</div>
</div>
);
}
Run context. ããã§ã¯ç®¡ç倿ã«å¿ èŠãªRunã®èŠçŽã ãã衚瀺ããŸããpromptãinputãresponseãmetadataJsonã®å šæã¯é垞確èªããå€ãã å¿ èŠãªå Žåã ãRun詳现ãã°ã§ç¢ºèªããŸãã
- Run ID
- run_selfdirected_agent_a_20260708T051339
- èµ·åçš®å¥
- llm_pipeline
- èªåŸåºŠ
- L1_assisted
- å®è¡è
- system / LLM Pipeline Publisher
- éå§
- 2026/7/8 14:33:12 JST
- å®äº
- 2026/7/8 14:33:12 JST
- çæ / å ¬é / 倱æ
- 1 / 1 / 0
- 蚌跡件æ°
- 8 events / 28 artifacts / 40 checks
LLM pipeline run for selfdirected_agent_a_20260708T051339. Published 0 project(s).
