{% extends "base.html" %} {% from "_links.html" import edge_list, go, kind_dot %} {% from "_map.html" import render_map %} {% block main %}
{% include "_crumbs.html" %}
{{ kind_dot(kind) }}{{ kind_name }} {% if node.level %}Level {{ node.level }}{% endif %} {% if registry_status %}{{ registry_status }}{% endif %} {% if node.attr("evidence_kind") %}{{ node.attr("evidence_kind") }}{% endif %} {% if node.attr("observed") %}Observed {{ node.attr("observed") }}{% endif %}

{{ node.label }}

{{ node.uri }} {% if cascade_route or map_id %}
{% if cascade_route %} What stops being true if this is falsified? {% endif %} {% if map_id %} {# A plain link on purpose: a full load is what makes :target light this node's line on the map. #} Show on the map {% endif %}
{% endif %}
{% if neighbourhood.nodes | length > 1 %}

Neighbourhood

Everything one edge away, in the map's lanes.

{{ render_map(neighbourhood, base) }}
{% endif %}
{% if hypothesis %}

Hypothesis

{{ hypothesis }}
{% if criteria %}

Falsified when

    {% for item in criteria %}
  • {{ item }}
  • {% endfor %}
{% else %}

No falsification criteria are recorded.

{% endif %}
{% endif %} {# The node's own prose, rendered from Markdown with raw HTML disabled: the renderer escapes anything that is not CommonMark, so a note is data and an author cannot put elements onto every reader's page. Relative links between notes are rewritten to the routes of the nodes they name. A requirement renders its text and its scenarios, each anchored by slug, with the code it names linked to the code's page. #} {% if body %}
{{ body }}
{% elif not hypothesis %}

This node carries no prose of its own; its connections say what it is for.

{% endif %} {% if pending %}

Pending delegations

Proposed but not yet archived into openspec/specs/.

    {% for item in pending %}
  • {{ item }}
  • {% endfor %}
{% endif %}
{% endblock %}