{% extends "base.html" %} {% block title %}{{ node.id }} · {{ node.title }} · {{ project_name }}{% endblock %} {% block content %} {# Breadcrumb = location, H1 = identity (V0.1.2 final polish §4/§5). The trail starts at the project and keeps ancestors as `id + title`; the current node contributes its id only, because the full title is already the H1 one line below. The complete title of every crumb — the current one included — stays available through the `title` attribute. #} {# --------------------------------------------------------- sticky header #}

{{ node.id }}{{ node.title }}

{% if node.is_focus %} {{ t("node.focus_flag") }} {% endif %} {{ node.status.label }}{% if node.status.i18n %} {{ node.status.raw }}{% endif %} {{ node.type }} {% if node.last_updated %} {{ t("node.updated") }} {{ node.last_updated }} {% endif %}

{% for track in tracks %}
{{ track.label }}
{{ track.status_label }}{% if track.i18n %} {{ track.raw }}{% endif %}
{% endfor %}

{{ t("node.tracks.hint") }}

{# ------------------------------------------------------------ next action #}

{{ t("node.next_action") }}

{% if node.next_action %}

{{ node.next_action }}

{% else %}

{{ t("node.next_action.empty") }}

{% endif %}
{# -------------------------------------------------------------- objective #}

{{ t("node.objective") }}

{% if node.objective %}

{{ node.objective }}

{% else %}

{{ t("node.objective.empty") }}

{% endif %}
{# ----------------------------------------------------------- scope boundary #}

{{ t("node.scope") }}

{{ t("node.scope.hint") }}

{{ t("node.scope.in") }} {{ node.scope | length }}

{% if node.scope %}
    {% for item in node.scope %}
  • {{ item }}
  • {% endfor %}
{% else %}

{{ t("node.scope.in.empty") }}

{% endif %}

{{ t("node.scope.out") }} {{ node.out_of_scope | length }}

{% if node.out_of_scope %}
    {% for item in node.out_of_scope %}
  • {{ item }}
  • {% endfor %}
{% else %}

{{ t("node.scope.out.empty") }}

{% endif %}
{# --------------------------------------------------------------- decisions #} {# UI-D4 ranking: blocking, open, own frozen, inherited frozen, deferred. #} {# A blocking section is rendered only when there is something to block on. #} {% if node.blocking.count %}

{{ t("node.decisions.blocking") }} {{ node.blocking.count }}

{% if node.blocking.shared_source %}

{{ t("node.decisions.source") }} {{ node.blocking.shared_source }}

{% endif %}
{% endif %}

{{ t("node.decisions.open") }}{% if node.open.count %} {{ node.open.count }}{% endif %}

{% if node.open.count %} {% if node.open.shared_source %}

{{ t("node.decisions.source") }} {{ node.open.shared_source }}

{% endif %} {% else %}

{{ t("node.decisions.open.empty") }}

{% endif %}

{{ t("node.decisions.frozen") }}

{{ t("node.decisions.frozen.own") }}{% if node.frozen.count %} {{ node.frozen.count }}{% else %} {{ t("node.decisions.frozen.empty") }}{% endif %}

{% if node.frozen.count %} {% if node.frozen.shared_source %}

{{ t("node.decisions.source") }} {{ node.frozen.shared_source }}

{% endif %} {% endif %}

{{ t("node.decisions.inherited") }}{% if inherited_frozen %} {{ t("node.decisions.inherited.hint") }}{% else %} {{ t("node.decisions.inherited.empty") }}{% endif %}

{% if inherited_frozen %} {% for group in inherited_frozen %}
{{ group.ancestor.id }} {{ group.ancestor.title }} {{ t("node.decisions.count", n=group.group.count) }} {% if group.group.shared_source %} {{ t("node.decisions.source") }} {{ group.group.shared_source_short }} {% elif group.group.source_count %} {{ t("node.decisions.sources_n", n=group.group.source_count) }} {% endif %}
{% endfor %} {% endif %}

{{ t("node.decisions.deferred") }}{% if node.deferred.count %} {{ node.deferred.count }}{% endif %}

{% if node.deferred.count %}
{{ t("node.decisions.deferred") }} {{ t("node.decisions.count", n=node.deferred.count) }} {% if node.deferred.shared_source %} {{ t("node.decisions.source") }} {{ node.deferred.shared_source_short }} {% endif %}
{% else %}

{{ t("node.decisions.deferred.empty") }}

{% endif %}
{# --------------------------------------------------------------- relations #}

{{ t("node.relations") }}

{{ t("node.rel.depends") }}
{% if dependencies %}
    {% for ref in dependencies %}
  • {% if ref.known %}{{ ref.id }} {{ ref.title }} {{ ref.status.label }}{% else %}{{ ref.id }} {{ t("node.rel.unknown") }}{% endif %}
  • {% endfor %}
{% else %} {{ t("node.rel.none") }} {% endif %}
{{ t("node.rel.blocks") }}
{% if blocks %}
    {% for ref in blocks %}
  • {% if ref.known %}{{ ref.id }} {{ ref.title }} {{ ref.status.label }}{% else %}{{ ref.id }} {{ t("node.rel.unknown") }}{% endif %}
  • {% endfor %}
{% else %} {{ t("node.rel.none") }} {% endif %}
{{ t("node.rel.related") }}
{% if related %} {% else %} {{ t("node.rel.none") }} {% endif %}
{% if supersedes %}
{{ t("node.rel.supersedes") }}
    {% for ref in supersedes %}
  • {% if ref.known %}{{ ref.id }} {{ ref.title }}{% else %}{{ ref.id }} {{ t("node.rel.unknown") }}{% endif %}
  • {% endfor %}
{% endif %} {% if superseded_by %}
{{ t("node.rel.superseded_by") }}
{% endif %}
{# ----------------------------------------------------------------- sources #}

{{ t("node.sources") }}

{{ t("node.sources.canonical") }}

{% if node.canonical_sources %}
    {% for source in node.canonical_sources %}
  • {{ source.path }}{% if source.label %} {{ source.label }}{% endif %}
  • {% endfor %}
{% else %}

{{ t("node.sources.none") }}

{% endif %}

{{ t("node.sources.evidence") }}

{% if node.evidence_sources %}
    {% for source in node.evidence_sources %}
  • {{ source.path }}{% if source.label %} {{ source.label }}{% endif %}
  • {% endfor %}
{% else %}

{{ t("node.sources.none") }}

{% endif %}
{# ------------------------------------------------------------------ resume #}

{{ t("node.resume") }} {{ capsule_stats.summary }}

{{ t("node.resume.hint", cmd="pcp context " ~ node.id) }}

{{ t("node.resume.show") }} {{ capsule_stats.summary }}
{{ capsule }}
{% endblock %}