{% extends "base.html" %} {% block title %}{{ idea.id }}: {{ idea.title }} - ThinkStorm{% endblock %} {% block content %} {% if idea.lifecycle_state == 'TRASHED' %}
🗑️
This idea is in the Trash Bin

It is withheld from incubation catalogs until restored or permanently emptied.

{% endif %}
{{ idea.id }} {{ idea.lifecycle_state }} Proc: {{ idea.processing_state }} {% if idea.lifecycle_state != 'TRASHED' %}
Level {{ idea.enrichment_level }}
{% for i in range(1, 6) %}
{% endfor %}
{% endif %}

{{ idea.title or "Processing Submission..." }}

{{ idea.summary }}

{% if idea.lifecycle_state == 'TRASHED' %} {% elif idea.lifecycle_state == 'AVAILABLE' %} {% if user and user.role.value != 'ANONYMOUS' %} {% else %} Sign in to Claim {% endif %} {% if idea.enrichment_level < 4 %} {% else %} {% endif %} {% elif idea.lifecycle_state == 'CLAIMED' %}
Claimed by
{{ idea.claimed_by }}
{% if user and (user.username == idea.claimed_by or user.role.value == 'ADMIN') %} {% endif %} {% elif idea.lifecycle_state == 'ACTIVE' %}
Active Work by
{{ idea.claimed_by }}
{% if user and (user.username == idea.claimed_by or user.role.value == 'ADMIN') %} {% endif %} {% elif idea.lifecycle_state == 'DUPLICATE' %} {% else %} {% endif %}
{% if idea.categories and idea.categories|length > 0 %}
Categories: {% for c in idea.categories %} {{ c }} {% endfor %}
{% endif %} {% if idea.tags and idea.tags|length > 0 %}
Tags: {% for t in idea.tags %} #{{ t }} {% endfor %}
{% endif %}
Submitted: {{ idea.submitted_at[:19] }}Z
{% if idea.lifecycle_state == 'DUPLICATE' %}
⚠️ Potential Duplicate Submission Detected

Automatic pipeline flagged this idea as closely matching existing catalog submissions and paused downstream deep research generation to conserve compute. You can override this and force full research generation at any time.

{% endif %}

📝 Immutable Original Submission

🛡️ URL Safety & VirusTotal

{% if idea.urls and idea.urls|length > 0 %}
{% for u in idea.urls %}
{{ u.url }}
{{ u.safety_state }} Policy: {{ u.automation_policy }}
{% endfor %}
{% else %}

No external URLs extracted in submission.

{% endif %}
{% if idea.submission_image and idea.submission_image.present %}

🖼️ Attached Reference Image {{ idea.submission_image.artifact_id }}

{{ idea.submission_image.mime_type }} {{ idea.submission_image.width }}x{{ idea.submission_image.height }} {{ (idea.submission_image.size_bytes / 1024)|round(1) }} KB Source: {{ idea.submission_image.source|capitalize }}
Reference visual artifact for {{ idea.id }}
File: {{ idea.submission_image.original_filename }} SHA-256: {{ idea.submission_image.sha256 }}
{% endif %}
{% if idea.submission_image and idea.submission_image.present %} {% endif %}
{% if idea.submission_image and idea.submission_image.present %}
{% set stage_data = idea.research_stages.IMAGE_CONTEXT if idea.research_stages else None %} {% set failed_image_run = idea.provenance | selectattr("stage", "equalto", "IMAGE_CONTEXT") | selectattr("status", "equalto", "FAILED") | list %} {% if stage_data and stage_data.total_versions > 0 %}
Stage: IMAGE_CONTEXT AI Visual Interpretation {% if stage_data.total_versions > 1 %}
{% else %} v1 (Latest) {% endif %} 🤖 {{ stage_data.latest.model }} {% if stage_data.latest.tokens.total %} ⚡ {{ stage_data.latest.tokens.total }} tokens {% endif %} 🕒 {{ stage_data.latest.started_at[:19].replace('T', ' ') }} UTC
{% for v in stage_data.versions %}
{% endfor %}
{% elif failed_image_run and failed_image_run|length > 0 %}
⚠️

Vision Processing Notice

The reference image was safely preserved, but automated vision analysis was unavailable or encountered an error: {{ failed_image_run[0].error_message or "Model refused or failed image processing." }}. The idea continues with text-only research synthesis.

{% else %}
🖼️

Visual Context Queued

Image interpretation is queued or processing. Visual context will appear here once synthesized.

{% endif %}
{% endif %}
{% set stage_data = idea.research_stages.PRIOR_ART if idea.research_stages else None %} {% if stage_data and stage_data.total_versions > 0 %}
Stage: PRIOR_ART {% if stage_data.total_versions > 1 %}
{% else %} v1 (Latest) {% endif %} 🤖 {{ stage_data.latest.model }} {% if stage_data.latest.tokens.total %} ⚡ {{ stage_data.latest.tokens.total }} tokens {% endif %} 🕒 {{ stage_data.latest.started_at[:19].replace('T', ' ') }} UTC
{% for v in stage_data.versions %}
{% endfor %}
{% else %}
🔍

Prior Art & Competitive Discovery Not Generated

Prior art synthesis was not performed yet or was paused during intake. You can trigger the automated research pipeline to perform market and repository discovery now.

{% endif %}
{% set stage_data = idea.research_stages.RESEARCH if idea.research_stages else None %} {% if stage_data and stage_data.total_versions > 0 %}
Stage: RESEARCH {% if stage_data.total_versions > 1 %}
{% else %} v1 (Latest) {% endif %} 🤖 {{ stage_data.latest.model }} {% if stage_data.latest.tokens.total %} ⚡ {{ stage_data.latest.tokens.total }} tokens {% endif %} 🕒 {{ stage_data.latest.started_at[:19].replace('T', ' ') }} UTC
{% for v in stage_data.versions %}
{% endfor %}
{% else %}
🔬

Deep Research Synthesis Not Generated

Technical analysis and architectural synthesis were not generated yet. You can trigger the automated research engine to analyze this submission now.

{% endif %}
{% set stage_data = idea.research_stages.FEASIBILITY if idea.research_stages else None %} {% if stage_data and stage_data.total_versions > 0 %}
Stage: FEASIBILITY {% if stage_data.total_versions > 1 %}
{% else %} v1 (Latest) {% endif %} 🤖 {{ stage_data.latest.model }} {% if stage_data.latest.tokens.total %} ⚡ {{ stage_data.latest.tokens.total }} tokens {% endif %} 🕒 {{ stage_data.latest.started_at[:19].replace('T', ' ') }} UTC
{% for v in stage_data.versions %}
{% endfor %}
{% else %}
⚖️

Feasibility & Risk Critique Not Generated

Architectural risk assessment and feasibility scoring were not generated yet. You can trigger the critique engine now.

{% endif %}

Independent Work Tracks

Assign multiple work types (Article, Blog Entry, Coding Project, YouTube Video) to produce distinct outputs.

{% if user and (user.username == idea.claimed_by or user.role.value == 'ADMIN') %}
{% endif %}
{% if idea.work_tracks and idea.work_tracks|length > 0 %}
{% for tr in idea.work_tracks %}
{{ tr.id }} {{ tr.name }} {{ tr.work_type_id }} {{ tr.state }} {% if tr.model_override %} 🤖 {{ tr.model_override }} {% endif %}
{% if user and (user.username == idea.claimed_by or user.role.value == 'ADMIN') %} {% if tr.work_type_id == 'CODING_PROJECT' and tr.state == 'COMPLETED' and idea.gitea_publish_allowed %} {% endif %} {% endif %}
{% if tr.external_resources and tr.external_resources|length > 0 %}
{% for ext in tr.external_resources %} 🎉 Graduated Project Repository: {{ ext.url }} ↗ {% endfor %}
{% endif %} {% if tr.outputs and tr.outputs|length > 0 %}

Generated Artifacts & Versions ({{ tr.outputs|length }}):

{% for out in tr.outputs %}
📄 {{ out.name }} {% if out.is_current %} v{{ out.version }} (Latest) {% else %} v{{ out.version }} {% endif %} {% if out.model_used %} 🤖 {{ out.model_used }} {% endif %} 🕒 {{ out.created_at[:19].replace('T', ' ') }} UTC
{% if user and (user.username == idea.claimed_by or user.role.value == 'ADMIN') %} {% endif %}
Path: {{ out.artifact_path }}
{% endfor %}
{% else %}
No artifacts generated yet for this track. {% if user and (user.username == idea.claimed_by or user.role.value == 'ADMIN') %} {% endif %}
{% endif %}
{% endfor %}
{% else %}

No work tracks created yet. Claim this idea to create independent development tracks.

{% endif %}

Execution Provenance & Token Accounting

Total Tokens Consumed: {{ idea.usage_summary.total_tokens }}
{% if idea.provenance and idea.provenance|length > 0 %}
{% for r in idea.provenance %} {% endfor %}
Run ID Processor / Stage Prompt Model Tokens (In/Out/Total) Duration Status
{{ r.id }} {{ r.processor_name }}
{{ r.stage }}
{{ r.prompt_id }} v{{ r.prompt_version }} {{ r.resolved_model }} {{ r.input_tokens }} / {{ r.output_tokens }} / {{ r.total_tokens }} {{ r.duration_ms }}ms {{ r.status }}
{% else %}

No processor execution runs recorded yet.

{% endif %}

Canonical Dossier & Gitea Project

Ideas remain local until a Gitea-linked claimant deliberately publishes them under the thinkstorm organization.

{% if idea.gitea_repo_url %} 🔗 Open Project on Gitea ↗ {% endif %}
🐙 Gitea Project Repository org: thinkstorm
Repo: {% if idea.gitea_repo_url %} {{ idea.gitea_repo_name }} {% else %} Not published {% endif %}
{% if idea.gitea_repo_url %}
Clone: git clone https://git.labyricorn.com/{{ idea.gitea_repo_name }}.git
{% endif %}
{% if idea.gitea_publish_allowed %} {% elif idea.gitea_publish_reason %} {{ idea.gitea_publish_reason }} {% endif %} {% if idea.gitea_repo_url %} Open in Gitea ↗ {% endif %}

Canonical Dossier Files in Store:

📄 idea.md Summary & Original Text
📊 metadata.json Structured Metadata & State
{% if idea.submission_image and idea.submission_image.present %}
🖼️ {{ idea.submission_image.artifact_id }} ({{ idea.submission_image.mime_type }}) Reference Image Artifact
📄 research/image-context.md Visual Interpretation Context
{% endif %}
🔍 research/prior-art.md Competitor Analysis
📚 research/analysis.md Deep Research Synthesis
⚙️ research/feasibility.md Risk & Feasibility Critique
{% for tr in idea.work_tracks %} {% for out in tr.outputs %}
🚀 {{ out.artifact_path }} (v{{ out.version }}) {{ tr.name }}
{% endfor %} {% endfor %}
{% endblock %}