{% extends "base.html" %} {% import "_output.html" as out %} {% import "_controls.html" as pc %} {% import "_run_control.html" as runctl %} {% block title %}{{ record.artifact.scenario or 'Run' }} | Silisocs Studio{% endblock %} {% block crumb %}Runs/{{ record.artifact.scenario or record.path.name }}{% endblock %} {% block content %}
{{ record.artifact.status or 'legacy' }}

{{ record.artifact.scenario or record.path.name }}

{{ record.id }}

ExploreExport report
Seed{{ record.artifact.seed if record.artifact.seed is not none else '—' }}Model{{ record.artifact.llm_name or '—' }}{% if parent_study %}Study{{ parent_study.name }}{% endif %}
Show CLI / YAML{{ reproduce_command }}Inspect effective YAML
{% if tab == 'overview' %}
Agents{{ record.artifact.num_agents or '—' }}configured participants
Steps{{ record.artifact.num_steps or '—' }}simulation episodes
Tokens{{ record.artifact.llm_usage.totals.total_tokens if record.artifact.llm_usage and record.artifact.llm_usage.totals else '—' }}reported model usage
Game masters{{ record.artifact.manifest.game_masters|length if record.artifact.manifest and record.artifact.manifest.game_masters else 0 }}backend coordinators

Run health

runtime signals
{% for name, value in (record.artifact.health or {}).items() %}
{{ name|replace('_',' ') }}{{ 'clear' if value == 0 else value }}
{% else %}

No health counters were recorded.

{% endfor %}

World topology

game-master field
{% for gm in record.artifact.manifest.game_masters|default([], true) %}{{ gm.name }}{{ gm.backend_type or 'custom backend' }}{% else %}

No game-master metadata was recorded.

{% endfor %}

Provenance

reproducibility
{% for name, value in record.artifact.manifest.provenance|default({}, true)|dictsort %}
{{ name|replace('_',' ') }}{{ value }}
{% else %}

No provenance metadata was recorded.

{% endfor %}
{% elif tab == 'platform' %}

Read-only platform

Platform view

{% for backend in viewer_backends %}{% endfor %}
{{ 'Select a backend' if viewer_backends else 'No platform viewer available' }}

{{ 'Open its run database in the platform viewer.' if viewer_backends else 'This backend did not publish a visualizer capability for the run.' }}

{% elif tab == 'config' %}

Reproducibility

Effective configuration

Changes from scenario baseline

{% if config_diff %}
{% for line in config_diff %}{{ line.text }}
{% endfor %}
{% elif not baseline_available %}
Scenario baseline unavailable

The authored scenario is not present in this workspace; use the effective YAML as the reproducible record.

{% else %}
No configuration changes

The effective configuration matches its authored scenario source.

{% endif %}

Effective YAML

{{ effective_config or 'No effective_config.yaml was recorded for this run.' }}
Show run manifest
{{ manifest_text }}
{% elif tab == 'logs' %}

Process output

Captured logs

{% if log_text %}{% for line in log_text.splitlines() %}{{ line }}{% endfor %}{% else %}No Studio-managed process log is associated with this run.{% endif %}
{% else %} {% if tab == 'watch' and job %}
{{ watch.status }}{{ watch.step }}{{ watch.elapsed }}{{ watch.actions }}{{ watch.usage }}{% if job.status in ('queued','running') %}{% endif %}
{% if interactive and job.status in ('queued','running') %}{{ runctl.bar() }}{% endif %}{% endif %}

Analysis view

{{ view.title }}

{% for name in views %}{{ name|title }}{% endfor %}
{% set live_skipped = (view.skipped|selectattr('missing')|list) if tab == 'watch' else [] %} {% set static_skipped = (view.skipped|rejectattr('missing')|list) if tab == 'watch' else view.skipped %}
{% for panel in view.panels %}

{{ panel.title }}

{{ panel.name|replace('_',' ') }}
{{ pc.render_controls(panel, facets) }}
{{ out.render_output(panel.output) }}
{% endfor %} {# Live placeholders: a panel skipped only because an event stream is not yet recorded gets a stand-in section the SSE artifact_grown handler can match on data-requires and refresh into once that stream grows (see base.html). #} {% for item in live_skipped %}

{{ item.title }}

{{ item.name|replace('_',' ') }}

Awaiting {{ item.missing|join(', ')|replace('_',' ') }} — this panel appears once the run records that data.

{% endfor %}
{% if not view.panels and not live_skipped %}
Nothing to show here

No panel in this view applies to this run's backend.

{% endif %} {% if static_skipped %}

Not shown: {% for item in static_skipped %}{{ item.title }} ({{ item.reason }}){{ '; ' if not loop.last }}{% endfor %}.

{% endif %} {% if tab == 'watch' %}
Live process log
{% if log_text %}{% for line in log_text.splitlines()[-100:] %}{{ line }}{% endfor %}{% else %}Waiting for process output.{% endif %}
{% endif %} {% if tab == 'watch' and job and job.status in ('queued','running') %} {% if interactive %}{{ runctl.script(job.id, 'watchEvents', facets.max_episode if facets else -1) }}{% endif %}{% endif %} {% if tab == 'logs' and job and job.status in ('queued','running') %}{% endif %} {% endif %} {% endblock %}