{% set page_title = 'Installed' %} {% include '_header.html' %}
| Type | Module | Version | From |
|---|---|---|---|
{{ origin.type_name }}
{%- if row.count %}
used by {{ row.count }} check{{ 's' if row.count != 1 else '' }}{#- The node path, not the check's name: the path is the thing the reader can go and look at, so each is a link to that node. -#}
|
{#- The loaded path under the module name, because the
version beside it is the installed metadata's claim:
a source copy earlier on the path shadows an
installed distribution of the same name, and then
the version is answering for code that is not
running. Exactly the case somebody reads this table
to diagnose, so the table shows both.
Against a root the reader has, not absolutely: the
diagnostic is *which root*, and nine tenths of an
absolute path is the same prefix on every row —
starting with somebody's home directory. The whole
string stays one hover away. -#}
{{ origin.module }}
{% if origin.path %} {{ origin.path | loaded_from }}{% endif %} |
{% if origin.version %}{{ origin.version }}{% else %}—{% endif %} | {% if origin.builtin %}built-in{% elif origin.distribution %}{{ origin.distribution }}{% else %}source{% endif %} |
| Package | Registers |
|---|---|
{{ row.origin.package }}
{% if row.origin.distribution %}· {{ row.origin.distribution }} {{ row.origin.version }}{% else %}· source{% endif %}
{%- if row.origin.path %}{{ row.origin.path | loaded_from }}{% endif %} |
{#- Each registration is one fact and must not break
across lines: "slot reason.actions" split after
"slot" reads as two entries, and the column is
narrow enough for that to happen. The list still
wraps *between* items — that is what the breaks
are for. -#}
{%- for item in row.registers %}
{{ item }}{% if not loop.last %} {% endif %} {%- endfor %} |
| Slot | Package | Template | Context | From |
|---|---|---|---|---|
{{ filler.slot }} |
{{ filler.package }} | {{ filler.template }} | {% if filler.context %}provider{% else %}—{% endif %} | {#- Which kind: a dependent package's registration, or the library's own declarative action list, which fills the same slots through the same seam (ADR-0038). Worth naming, because an operator looking here after adding a config action needs to see the difference between "mine" and "theirs". -#}{% if filler.builtin %}built-in{% else %}extension{% endif %} |
| Scheme | Package | Replaces | From |
|---|---|---|---|
{{ row.scheme }}:// |
{{ row.owner }} | {% if row.replaced %}{{ row.replaced }}{% else %}—{% endif %} | {% if row.builtin %}built-in{% else %}extension{% endif %} |
Registered configuration aspects:
{% for name, owner in extra_aspects %}config/{{ name }}{% if owner %} ({{ owner }}){% endif %}{% if not loop.last %}, {% endif %}{% endfor %}
| Door | Route | Provider | Package | Default |
|---|---|---|---|---|
{{ door.name }}{% if door.label != door.name %} ({{ door.label }}){% endif %} |
{{ door.route }} |
{{ door.provider_name }} | {{ door.owner }} | {% if door.default %}default{% else %}—{% endif %} |
{% if choosing_at_login %}
/login offers a choice of the doors above; an
unidentified request still goes to the default door.
{% else %}
/login is the default door's own login step.
{% endif %}
System admin: configured by {{ system_admin.keyword }}=
{%- if system_admin.reference %} ({{ system_admin.reference }}){% endif %},
{% if system_admin.available %}credential resolved.
{%- else %}credential unavailable — that door is
shut ({{ system_admin.problem }}).{% endif %}
No system-admin account is configured: this instance is reachable only through the doors above.
{% endif %}{{ csp_header }}
| Directive | Sources |
|---|---|
{{ directive }} |
{%- for source in sources %}
{{ source.value }}
({{ source.by }})
{%- if not loop.last %}{% endif %} {%- endfor %} |