{% extends 'base.html' %} {% block title %}Task {{ task.question_id }} · Benchmark Tasks{% endblock %} {% block body_class %}bench-task-page{% endblock %} {% block app_main %}
BENCHMARK TASK
{{ task.question_type }}

{{ task.question }}

{{ task.question_id }} {{ task.namespace }}
{{ task.primary_outcome or "NOT SCORED" }} {% if task.graph_available is true and task.historical_score_with_live_graph %}HISTORICAL SCORE + LIVE SOURCE{% elif task.graph_available is true %}LIVE BENCHMARK GRAPH{% elif task.graph_source_run_id and not task.is_active %}LIVE SOURCE CONFIGURED{% elif task.is_active %}ACTIVE CONFIGURED{% else %}ARTIFACT-ONLY{% endif %}
{% set oc = task.primary_outcome or "NOT SCORED" %} {% if task.source_warning %}
{{ task.source_warning }}
{% endif %}
Run{{ task.run_label }}
Variant{{ task.run_variant }}
Arm{{ task.run_arm or '—' }}
Turns{{ task.turns }}
Assertions{{ task.typed_assertions }}
Scalar views{{ task.scalar_views }}
Turn evidence{{ task.turn_evidence }}
LLM calls{{ task.scalar_llm_calls }}
Consolidated{{ 'Yes' if task.scalar_consolidated else 'No' }}
Ready{{ 'Yes' if task.ready else 'No' }}
Failed{{ task.failed_remaining }}
Attempts{{ task.attempts }}
{% if task.live_graph %}

Live Graph Projection

{% if task.live_graph.audit_pass_id %}
Audit pass: {{ task.live_graph.audit_pass_id }}
{% endif %} {% if task.live_graph.audit_warning %}
{{ task.live_graph.audit_warning }}
{% endif %}

TurnEvidence ({{ task.live_graph.evidence | length }})

{% if task.live_graph.evidence %}
{% for turn in task.live_graph.evidence %}
{{ turn.role }} {{ turn.occurred_at[:16] if turn.occurred_at else '—' }} ingested {{ turn.recorded_at[:16] if turn.recorded_at else '—' }}
{{ turn.text }}
{% if turn.founds %}
FOUNDS assertions: {{ turn.founds | join(', ') }}
{% endif %}
{% endfor %}
{% else %}
No turn evidence is available for this task.
{% endif %}

TypedAssertions ({{ task.live_graph.assertions | length }})

{% if task.live_graph.assertions %} {% for a in task.live_graph.assertions %}
{{ a.subject }}{{ a.attribute }} = {{ a.value }}{{ ' ' + a.unit if a.unit }}
{{ a.operation }} {{ a.value_kind }} {{ a.evidence_tier }} {% if a.binding_pending %}binding pending{% endif %}
“{{ a.stated_span }}”
{% if a.source_quote %}
Source turn
“{{ a.source_quote }}”
{% endif %} {% if a.fold_outcome %}
state {{ a.fold_outcome.state.status }}{% if a.fold_outcome.state.reason %}: {{ a.fold_outcome.state.reason }}{% endif %}
history {{ a.fold_outcome.history.status }}{% if a.fold_outcome.history.reason %}: {{ a.fold_outcome.history.reason }}{% endif %}
{% endif %}
world {{ a.valid_at[:16] if a.valid_at else '—' }} · learned {{ a.learned_at[:16] if a.learned_at else '—' }}
{% endfor %} {% else %}
No typed assertions were extracted for this task.
{% endif %}
SCALAR ROLE MAP

Three different jobs — not interchangeable

Start here when a result looks wrong. Each view answers a different kind of question and has a different authority level.

Absolute sets a value. Delta changes a prior value. Event records an occurrence; it does not claim current ownership or state.
CURRENT SCALAR

ScalarState Views ({{ task.live_graph.views | length }})

Authoritative answer to “What is true now?” It folds absolute values and deltas into one current value per slot.

{% if task.live_graph.views %} {% for v in task.live_graph.views %}
{{ 'CURRENT' if v.current else 'SUPERSEDED' }}
{{ v.display or v.value }}{{ ' ' + v.unit if v.unit }}
{{ v.subject }} · {{ v.attribute }}{{ ' · ' + v.scope if v.scope }}
{% if v.summary %}

{{ v.summary }}

{% endif %}
{{ v.value_kind }}{{ v.derivation }} derivation{{ v.effective_tier or '—' }} tier{{ v.contributor_ids | length }} contributors
valid {{ v.valid_at[:16] if v.valid_at else '—' }}
{% endfor %} {% else %}
No scalar-state view was materialized for this task.
{% endif %}
CHANGE SCALAR

ScalarHistory Views ({{ task.live_graph.history_views | length }})

Advisory answer to “How did the value change?” It preserves the ordered absolute and delta observations without replacing current-state authority.

{% if task.live_graph.history_views %} {% for hv in task.live_graph.history_views %}
ADVISORY HISTORY
{{ hv.subject }} · {{ hv.attribute }}
{{ hv.entry_count or 0 }} entries{{ hv.derivation }} derivation {% if hv.op_counts %}{% for k, v in hv.op_counts.items() %}{{ v }} {{ k }}{% if not loop.last %}, {% endif %}{% endfor %}{% endif %}
{% if hv.entries %} {% for entry in hv.entries %} {% endfor %}
source timeoperationvaluestated span
{{ entry.valid_at[:16] if entry.valid_at else '—' }}{{ entry.operation }}{{ entry.value }}{{ entry.stated_span }}
{% endif %}
{{ hv.first_valid_at[:16] if hv.first_valid_at else '—' }} to {{ hv.last_valid_at[:16] if hv.last_valid_at else '—' }}
{% endfor %} {% else %}
No scalar-history view was materialized for this task.
{% endif %}
EVENT SCALAR

EventHistory Views ({{ task.live_graph.event_views | length }})

Query-specific answer to “What happened latest or immediately before it?” Events stay separate occurrences; this view never implies current ownership.

{% if task.live_graph.event_views %} {% for ev in task.live_graph.event_views %}
ORDERED OCCURRENCES
{{ ev.subject }} · {{ ev.predicate }}{% if ev.domain %} · {{ ev.domain }}{% endif %}
{{ ev.entry_count or (ev.entries | length) }} occurrencesevent derivation{{ ev.contributor_ids | length }} contributors
{% if ev.entries %} {% for entry in ev.entries %} {% endfor %}
source timeoccurrencegrounding quote
{{ entry.when[:16] if entry.when else '—' }}{{ entry.what }}{% if entry.object_key %} ({{ entry.object_key }}){% endif %}“{{ entry.quote }}”
{% endif %}
{% endfor %} {% else %}
No event-history view was materialized for this task. That can be correct when the conversation contains state or numeric changes but no admitted completed occurrence.
{% endif %} {% if task.live_graph.event_assertions %}
Grounded event assertions ({{ task.live_graph.event_assertions | length }}) {% for event in task.live_graph.event_assertions %}
{{ event.subject }}{{ event.predicate }}{{ event.object_display }}
{{ event.domain or 'general' }}{{ event.evidence_tier }}{{ event.time_basis }}{% if event.binding_pending %}binding pending{% endif %}{% if event.superseded %}superseded version{% endif %}
“{{ event.stated_span }}”
happened {{ event.valid_at[:16] if event.valid_at else '—' }} · learned {{ event.learned_at[:16] if event.learned_at else '—' }}
{% endfor %}
{% endif %}

Memory

{% if task.live_graph.facts %}

Relationship Facts ({{ task.live_graph.facts | length }})

{% for fact in task.live_graph.facts %}
{{ fact.subject }}{{ fact.relation }}{{ fact.object }} — {{ fact.fact }}
{% endfor %} {% endif %} {% if task.live_graph.memory_inventory %}

Memory Inventory ({{ task.live_graph.memory_inventory | length }})

{% for item in task.live_graph.memory_inventory %}
{% if item.memory_type == 'view' %} VIEW {{ item.view_kind }} {{ item.derivation }} {{ item.subject }} · {{ item.attribute }} = {{ item.value }} {% if item.current %}current{% endif %} {% else %} CONTENT {{ item.subject }} → {{ item.relation }} → {{ item.object }} {% endif %}
{% endfor %} {% endif %} {% if not task.live_graph.facts and not task.live_graph.memory_inventory %}
No relationship facts or memory inventory are available for this task.
{% endif %}
INSPECTION-ONLY PROTOTYPE

Typed Recall Packet

A deterministic presentation of the existing graph. It does not change production recall, ranking, ingestion, or answers.

{% if task.live_graph.recall_packet %}
{{ task.live_graph.recall_packet.version }} production recall changed: no
{% for section in task.live_graph.recall_packet.sections %}
{{ section.label }} {{ section.entries | length }}

{{ section.role }}

{% if section.entries %} {% for entry in section.entries %}
{{ entry.kind }} {{ entry.authority }} {% if entry.derivation %}{{ entry.derivation }}{% endif %}
{{ entry.subject }}{% if entry.attribute %} · {{ entry.attribute }}{% endif %}{% if entry.scope %} · {{ entry.scope }}{% endif %} = {{ entry.value or entry.content }}{% if entry.unit %} {{ entry.unit }}{% endif %}
{% if entry.content and entry.content != entry.value %}
{{ entry.content }}
{% endif %} {% if entry.source_quote %}
“{{ entry.source_quote }}”
{% endif %}
world {{ entry.valid_at or 'unknown' }} · learned {{ entry.learned_at or 'unknown' }}{% if entry.source_ids %} · sources {{ entry.source_ids | join(', ') }}{% endif %}
{% endfor %} {% else %}
none
{% endif %}
{% endfor %}
{% else %}
The typed packet could not be built from this live graph.
{% endif %}
{% else %}

TurnEvidence

Live graph data is unavailable for this run.

TypedAssertions

Live graph data is unavailable for this run.

Scalar Roles

Scalar StateCurrent ScalarWhat is true now?
Scalar HistoryChange ScalarHow did the value change?
Event HistoryEvent ScalarWhat happened latest or immediately before it?
Role definitions are available, but live graph counts and contents are unavailable for this run.

ScalarState Views

Live graph data is unavailable for this run.

ScalarHistory Views

Live graph data is unavailable for this run.

EventHistory Views

Live graph data is unavailable for this run.

Memory

Live graph data is unavailable for this run.

Typed Recall Packet

Live graph data is unavailable, so the inspection packet cannot be built.
{% endif %}

Answer Path

Gold Answer

{{ task.answer }}
{% if task.scores %}

Scores

{% for score in task.scores %} {% endfor %}
ArmCorrectScoreInOut
{{ score.arm }}{{ '✓' if score.correct else '✗' }} {{ score.score }}{{ score.input_tokens }}{{ score.output_tokens }}
{% for score in task.scores %}
{{ score.arm }} response
Model answer
{{ score.response_text }}
Recalled memory
{{ score.recalled or '—' }}
Gold answer
{{ task.answer }}
{% endfor %}
{% else %}
No scored answer path is available for this task.
{% endif %}
{% endblock %} {% block extra_head %} {% endblock %} {% block extra_scripts %} {% endblock %}