Skip to content

Instance level implementation status

The goal of this page is to provide an overview of the status of the implementation of features, that can be checked on the instance level. This means that we are not checking how servers interact with each other, or how they interact with users. Instead we are checking simple technical properties.

The code used to generate this page is available at codeberg.org. Contributions are welcome, both in the form of new features to test, and in adding your application.

Results

FEP-2677 FEP-f1d5 RFC 6415
feature feature feature
bovine
brutalinks
catodon
gancio
lemmy
mastodon
mitra
mobilzon
sharkey
wordpress

Test Logs

bovine

Feature: FEP-2677: Identifying the Application Actor # features/fediverse-features/feps/fep-2677.feature:1
  Current draft: https://codeberg.org/fediverse/fep/src/branch/main/fep/2677/fep-2677.md
  Scenario: Application Actor is identified                                                # features/fediverse-features/feps/fep-2677.feature:4
    Given a Fediverse server                                                               # features/steps/nodeinfo.py:15
    When querying /.well-known/nodeinfo                                                    # features/steps/nodeinfo.py:23
    Then The links contain one of type "https://www.w3.org/ns/activitystreams#Application" # features/steps/nodeinfo.py:38
    And This page can be resolved                                                          # features/steps/nodeinfo.py:48
    And The result is an application actor                                                 # features/steps/nodeinfo.py:60
Feature: Nodeinfo # features/fediverse-features/fedi/node_info.feature:1
  Information on nodeinfo is available in
  FEP-f165: https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md
  @nodeinfo-2-0
  Scenario:                                                                                               # features/fediverse-features/fedi/node_info.feature:6
    Given A Fediverse server                                                                              # features/steps/nodeinfo.py:15
    When Querying /.well-known/nodeinfo                                                                   # features/steps/nodeinfo.py:23
    Then The links contain one of type "http://nodeinfo.diaspora.software/ns/schema/2.0"                  # features/steps/nodeinfo.py:38
    And This page can be resolved                                                                         # features/steps/nodeinfo.py:48
    And The body of this page obeys the schema given by "http://nodeinfo.diaspora.software/ns/schema/2.0" # features/steps/nodeinfo.py:65
Feature: Host Meta # features/fediverse-features/ietf/host_meta.feature:7
  As defined in https://www.rfc-editor.org/rfc/rfc6415.html
  Scenario:                                                                                             # features/fediverse-features/ietf/host_meta.feature:10
    Given A Fediverse server                                                                            # features/steps/nodeinfo.py:15
    When Querying /.well-known/host-meta                                                                # features/steps/nodeinfo.py:23
    Then The page must resolve at port 80 or 443                                                        # features/steps/ietf.py:9
    And If both port 80 _and_ 443 work, then they SHOULD return same document                           # features/steps/ietf.py:14
    And The document SHOULD be served with "application/xrd+xml" media type                             # features/steps/ietf.py:19
    And The document's root MUST be an "XRD" element                                                    # features/steps/ietf.py:26
    And The document SHOULD NOT include elements of type "Subject"                                      # features/steps/ietf.py:32
    And The document SHOULD include elements of type "Link"                                             # features/steps/ietf.py:32
    And The "Link" elements should include either "template" or "href" attributes                       # features/steps/ietf.py:46
    And The document should have at least one 'lrdd' document                                           # features/steps/ietf.py:67
    And Fediverse specific: The lrdd document must include template containing WebFinger well-known URI # features/steps/ietf.py:77
Feature: FEP-2677: Identifying the Application Actor # features/fediverse-features/feps/fep-2677.feature:1
  Current draft: https://codeberg.org/fediverse/fep/src/branch/main/fep/2677/fep-2677.md
  Scenario: Application Actor is identified                                                # features/fediverse-features/feps/fep-2677.feature:4
    Given a Fediverse server                                                               # features/steps/nodeinfo.py:15
    When querying /.well-known/nodeinfo                                                    # features/steps/nodeinfo.py:23
    Then The links contain one of type "https://www.w3.org/ns/activitystreams#Application" # features/steps/nodeinfo.py:38
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "features/steps/nodeinfo.py", line 45, in contains_rel
          assert context.link
      AssertionError

    And This page can be resolved                                                          # None
    And The result is an application actor                                                 # None
Feature: Nodeinfo # features/fediverse-features/fedi/node_info.feature:1
  Information on nodeinfo is available in
  FEP-f165: https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md
  @nodeinfo-2-0
  Scenario:                                                                                               # features/fediverse-features/fedi/node_info.feature:6
    Given A Fediverse server                                                                              # features/steps/nodeinfo.py:15
    When Querying /.well-known/nodeinfo                                                                   # features/steps/nodeinfo.py:23
    Then The links contain one of type "http://nodeinfo.diaspora.software/ns/schema/2.0"                  # features/steps/nodeinfo.py:38
    And This page can be resolved                                                                         # features/steps/nodeinfo.py:48
    And The body of this page obeys the schema given by "http://nodeinfo.diaspora.software/ns/schema/2.0" # features/steps/nodeinfo.py:65
Feature: Host Meta # features/fediverse-features/ietf/host_meta.feature:7
  As defined in https://www.rfc-editor.org/rfc/rfc6415.html
  Scenario:                                                                                             # features/fediverse-features/ietf/host_meta.feature:10
    Given A Fediverse server                                                                            # features/steps/nodeinfo.py:15
    When Querying /.well-known/host-meta                                                                # features/steps/nodeinfo.py:23
    Then The page must resolve at port 80 or 443                                                        # features/steps/ietf.py:9
    And If both port 80 _and_ 443 work, then they SHOULD return same document                           # features/steps/ietf.py:14
    And The document SHOULD be served with "application/xrd+xml" media type                             # features/steps/ietf.py:19
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "features/steps/ietf.py", line 21, in check_media_type
          assert media_type in context.content_type
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      AssertionError

    And The document's root MUST be an "XRD" element                                                    # None
    And The document SHOULD NOT include elements of type "Subject"                                      # None
    And The document SHOULD include elements of type "Link"                                             # None
    And The "Link" elements should include either "template" or "href" attributes                       # None
    And The document should have at least one 'lrdd' document                                           # None
    And Fediverse specific: The lrdd document must include template containing WebFinger well-known URI # None

catodon

Feature: FEP-2677: Identifying the Application Actor # features/fediverse-features/feps/fep-2677.feature:1
  Current draft: https://codeberg.org/fediverse/fep/src/branch/main/fep/2677/fep-2677.md
  Scenario: Application Actor is identified                                                # features/fediverse-features/feps/fep-2677.feature:4
    Given a Fediverse server                                                               # features/steps/nodeinfo.py:15
    When querying /.well-known/nodeinfo                                                    # features/steps/nodeinfo.py:23
    Then The links contain one of type "https://www.w3.org/ns/activitystreams#Application" # features/steps/nodeinfo.py:38
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "features/steps/nodeinfo.py", line 45, in contains_rel
          assert context.link
      AssertionError

    And This page can be resolved                                                          # None
    And The result is an application actor                                                 # None
Feature: Nodeinfo # features/fediverse-features/fedi/node_info.feature:1
  Information on nodeinfo is available in
  FEP-f165: https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md
  @nodeinfo-2-0
  Scenario:                                                                                               # features/fediverse-features/fedi/node_info.feature:6
    Given A Fediverse server                                                                              # features/steps/nodeinfo.py:15
    When Querying /.well-known/nodeinfo                                                                   # features/steps/nodeinfo.py:23
    Then The links contain one of type "http://nodeinfo.diaspora.software/ns/schema/2.0"                  # features/steps/nodeinfo.py:38
    And This page can be resolved                                                                         # features/steps/nodeinfo.py:48
    And The body of this page obeys the schema given by "http://nodeinfo.diaspora.software/ns/schema/2.0" # features/steps/nodeinfo.py:65
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 157, in wrapped_decorator
          return step_decorator(astep_func, context, *args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 124, in step_decorator
          loop.run_until_complete(astep_func(context, *args, **kwargs))
        File "/usr/local/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
          return future.result()
                 ^^^^^^^^^^^^^^^
        File "features/steps/nodeinfo.py", line 74, in validate
          jsonschema.validate(context.page_body, schema)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/jsonschema/validators.py", line 1308, in validate
          raise error
      jsonschema.exceptions.ValidationError: Additional properties are not allowed ('homepage' was unexpected)

      Failed validating 'additionalProperties' in schema['properties']['software']:
          {'additionalProperties': False,
           'description': 'Metadata about server software in use.',
           'properties': {'name': {'description': 'The canonical name of this '
                                                  'server software.',
                                   'pattern': '^[a-z0-9-]+$',
                                   'type': 'string'},
                          'version': {'description': 'The version of this server '
                                                     'software.',
                                      'type': 'string'}},
           'required': ['name', 'version'],
           'type': 'object'}

      On instance['software']:
          {'homepage': 'https://catodon.social/',
           'name': 'catodon',
           'version': '23.12-alpha.3'}
Feature: Host Meta # features/fediverse-features/ietf/host_meta.feature:7
  As defined in https://www.rfc-editor.org/rfc/rfc6415.html
  Scenario:                                                                                             # features/fediverse-features/ietf/host_meta.feature:10
    Given A Fediverse server                                                                            # features/steps/nodeinfo.py:15
    When Querying /.well-known/host-meta                                                                # features/steps/nodeinfo.py:23
    Then The page must resolve at port 80 or 443                                                        # features/steps/ietf.py:9
    And If both port 80 _and_ 443 work, then they SHOULD return same document                           # features/steps/ietf.py:14
    And The document SHOULD be served with "application/xrd+xml" media type                             # features/steps/ietf.py:19
    And The document's root MUST be an "XRD" element                                                    # features/steps/ietf.py:26
    And The document SHOULD NOT include elements of type "Subject"                                      # features/steps/ietf.py:32
    And The document SHOULD include elements of type "Link"                                             # features/steps/ietf.py:32
    And The "Link" elements should include either "template" or "href" attributes                       # features/steps/ietf.py:46
    And The document should have at least one 'lrdd' document                                           # features/steps/ietf.py:67
    And Fediverse specific: The lrdd document must include template containing WebFinger well-known URI # features/steps/ietf.py:77

gancio

Feature: FEP-2677: Identifying the Application Actor # features/fediverse-features/feps/fep-2677.feature:1
  Current draft: https://codeberg.org/fediverse/fep/src/branch/main/fep/2677/fep-2677.md
  Scenario: Application Actor is identified                                                # features/fediverse-features/feps/fep-2677.feature:4
    Given a Fediverse server                                                               # features/steps/nodeinfo.py:15
    When querying /.well-known/nodeinfo                                                    # features/steps/nodeinfo.py:23
    Then The links contain one of type "https://www.w3.org/ns/activitystreams#Application" # features/steps/nodeinfo.py:38
    And This page can be resolved                                                          # features/steps/nodeinfo.py:48
    And The result is an application actor                                                 # features/steps/nodeinfo.py:60
Feature: Nodeinfo # features/fediverse-features/fedi/node_info.feature:1
  Information on nodeinfo is available in
  FEP-f165: https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md
  @nodeinfo-2-0
  Scenario:                                                                                               # features/fediverse-features/fedi/node_info.feature:6
    Given A Fediverse server                                                                              # features/steps/nodeinfo.py:15
    When Querying /.well-known/nodeinfo                                                                   # features/steps/nodeinfo.py:23
    Then The links contain one of type "http://nodeinfo.diaspora.software/ns/schema/2.0"                  # features/steps/nodeinfo.py:38
    And This page can be resolved                                                                         # features/steps/nodeinfo.py:48
    And The body of this page obeys the schema given by "http://nodeinfo.diaspora.software/ns/schema/2.0" # features/steps/nodeinfo.py:65
Feature: Host Meta # features/fediverse-features/ietf/host_meta.feature:7
  As defined in https://www.rfc-editor.org/rfc/rfc6415.html
  Scenario:                                                                                             # features/fediverse-features/ietf/host_meta.feature:10
    Given A Fediverse server                                                                            # features/steps/nodeinfo.py:15
    When Querying /.well-known/host-meta                                                                # features/steps/nodeinfo.py:23
    Then The page must resolve at port 80 or 443                                                        # features/steps/ietf.py:9
    And If both port 80 _and_ 443 work, then they SHOULD return same document                           # features/steps/ietf.py:14
    And The document SHOULD be served with "application/xrd+xml" media type                             # features/steps/ietf.py:19
    And The document's root MUST be an "XRD" element                                                    # features/steps/ietf.py:26
    And The document SHOULD NOT include elements of type "Subject"                                      # features/steps/ietf.py:32
    And The document SHOULD include elements of type "Link"                                             # features/steps/ietf.py:32
    And The "Link" elements should include either "template" or "href" attributes                       # features/steps/ietf.py:46
    And The document should have at least one 'lrdd' document                                           # features/steps/ietf.py:67
    And Fediverse specific: The lrdd document must include template containing WebFinger well-known URI # features/steps/ietf.py:77

lemmy

Feature: FEP-2677: Identifying the Application Actor # features/fediverse-features/feps/fep-2677.feature:1
  Current draft: https://codeberg.org/fediverse/fep/src/branch/main/fep/2677/fep-2677.md
  Scenario: Application Actor is identified                                                # features/fediverse-features/feps/fep-2677.feature:4
    Given a Fediverse server                                                               # features/steps/nodeinfo.py:15
    When querying /.well-known/nodeinfo                                                    # features/steps/nodeinfo.py:23
    Then The links contain one of type "https://www.w3.org/ns/activitystreams#Application" # features/steps/nodeinfo.py:38
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "features/steps/nodeinfo.py", line 45, in contains_rel
          assert context.link
      AssertionError

    And This page can be resolved                                                          # None
    And The result is an application actor                                                 # None
Feature: Nodeinfo # features/fediverse-features/fedi/node_info.feature:1
  Information on nodeinfo is available in
  FEP-f165: https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md
  @nodeinfo-2-0
  Scenario:                                                                                               # features/fediverse-features/fedi/node_info.feature:6
    Given A Fediverse server                                                                              # features/steps/nodeinfo.py:15
    When Querying /.well-known/nodeinfo                                                                   # features/steps/nodeinfo.py:23
    Then The links contain one of type "http://nodeinfo.diaspora.software/ns/schema/2.0"                  # features/steps/nodeinfo.py:38
    And This page can be resolved                                                                         # features/steps/nodeinfo.py:48
    And The body of this page obeys the schema given by "http://nodeinfo.diaspora.software/ns/schema/2.0" # features/steps/nodeinfo.py:65
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 157, in wrapped_decorator
          return step_decorator(astep_func, context, *args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 124, in step_decorator
          loop.run_until_complete(astep_func(context, *args, **kwargs))
        File "/usr/local/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
          return future.result()
                 ^^^^^^^^^^^^^^^
        File "features/steps/nodeinfo.py", line 74, in validate
          jsonschema.validate(context.page_body, schema)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/jsonschema/validators.py", line 1308, in validate
          raise error
      jsonschema.exceptions.ValidationError: 'services' is a required property

      Failed validating 'required' in schema:
          {'$schema': 'http://json-schema.org/draft-04/schema#',
           'additionalProperties': False,
           'description': 'NodeInfo schema version 2.0.',
           'id': 'http://nodeinfo.diaspora.software/ns/schema/2.0#',
           'properties': {'metadata': {'additionalProperties': True,
                                       'description': 'Free form key value pairs '
                                                      'for software specific '
                                                      'values. Clients should '
                                                      'not rely on any specific '
                                                      'key present.',
                                       'minProperties': 0,
                                       'type': 'object'},
                          'openRegistrations': {'description': 'Whether this '
                                                               'server allows '
                                                               'open '
                                                               'self-registration.',
                                                'type': 'boolean'},
                          'protocols': {'description': 'The protocols supported '
                                                       'on this server.',
                                        'items': {'enum': ['activitypub',
                                                           'buddycloud',
                                                           'dfrn',
                                                           'diaspora',
                                                           'libertree',
                                                           'ostatus',
                                                           'pumpio',
                                                           'tent',
                                                           'xmpp',
                                                           'zot']},
                                        'minItems': 1,
                                        'type': 'array'},
                          'services': {'additionalProperties': False,
                                       'description': 'The third party sites '
                                                      'this server can connect '
                                                      'to via their application '
                                                      'API.',
                                       'properties': {'inbound': {'description': 'The '
                                                                                 'third '
                                                                                 'party '
                                                                                 'sites '
                                                                                 'this '
                                                                                 'server '
                                                                                 'can '
                                                                                 'retrieve '
                                                                                 'messages '
                                                                                 'from '
                                                                                 'for '
                                                                                 'combined '
                                                                                 'display '
                                                                                 'with '
                                                                                 'regular '
                                                                                 'traffic.',
                                                                  'items': {'enum': ['atom1.0',
                                                                                     'gnusocial',
                                                                                     'imap',
                                                                                     'pnut',
                                                                                     'pop3',
                                                                                     'pumpio',
                                                                                     'rss2.0',
                                                                                     'twitter']},
                                                                  'minItems': 0,
                                                                  'type': 'array'},
                                                      'outbound': {'description': 'The '
                                                                                  'third '
                                                                                  'party '
                                                                                  'sites '
                                                                                  'this '
                                                                                  'server '
                                                                                  'can '
                                                                                  'publish '
                                                                                  'messages '
                                                                                  'to '
                                                                                  'on '
                                                                                  'the '
                                                                                  'behalf '
                                                                                  'of '
                                                                                  'a '
                                                                                  'user.',
                                                                   'items': {'enum': ['atom1.0',
                                                                                      'blogger',
                                                                                      'buddycloud',
                                                                                      'diaspora',
                                                                                      'dreamwidth',
                                                                                      'drupal',
                                                                                      'facebook',
                                                                                      'friendica',
                                                                                      'gnusocial',
                                                                                      'google',
                                                                                      'insanejournal',
                                                                                      'libertree',
                                                                                      'linkedin',
                                                                                      'livejournal',
                                                                                      'mediagoblin',
                                                                                      'myspace',
                                                                                      'pinterest',
                                                                                      'pnut',
                                                                                      'posterous',
                                                                                      'pumpio',
                                                                                      'redmatrix',
                                                                                      'rss2.0',
                                                                                      'smtp',
                                                                                      'tent',
                                                                                      'tumblr',
                                                                                      'twitter',
                                                                                      'wordpress',
                                                                                      'xmpp']},
                                                                   'minItems': 0,
                                                                   'type': 'array'}},
                                       'required': ['inbound', 'outbound'],
                                       'type': 'object'},
                          'software': {'additionalProperties': False,
                                       'description': 'Metadata about server '
                                                      'software in use.',
                                       'properties': {'name': {'description': 'The '
                                                                              'canonical '
                                                                              'name '
                                                                              'of '
                                                                              'this '
                                                                              'server '
                                                                              'software.',
                                                               'pattern': '^[a-z0-9-]+$',
                                                               'type': 'string'},
                                                      'version': {'description': 'The '
                                                                                 'version '
                                                                                 'of '
                                                                                 'this '
                                                                                 'server '
                                                                                 'software.',
                                                                  'type': 'string'}},
                                       'required': ['name', 'version'],
                                       'type': 'object'},
                          'usage': {'additionalProperties': False,
                                    'description': 'Usage statistics for this '
                                                   'server.',
                                    'properties': {'localComments': {'description': 'The '
                                                                                    'amount '
                                                                                    'of '
                                                                                    'comments '
                                                                                    'that '
                                                                                    'were '
                                                                                    'made '
                                                                                    'by '
                                                                                    'users '
                                                                                    'that '
                                                                                    'are '
                                                                                    'registered '
                                                                                    'on '
                                                                                    'this '
                                                                                    'server.',
                                                                     'minimum': 0,
                                                                     'type': 'integer'},
                                                   'localPosts': {'description': 'The '
                                                                                 'amount '
                                                                                 'of '
                                                                                 'posts '
                                                                                 'that '
                                                                                 'were '
                                                                                 'made '
                                                                                 'by '
                                                                                 'users '
                                                                                 'that '
                                                                                 'are '
                                                                                 'registered '
                                                                                 'on '
                                                                                 'this '
                                                                                 'server.',
                                                                  'minimum': 0,
                                                                  'type': 'integer'},
                                                   'users': {'additionalProperties': False,
                                                             'description': 'statistics '
                                                                            'about '
                                                                            'the '
                                                                            'users '
                                                                            'of '
                                                                            'this '
                                                                            'server.',
                                                             'properties': {'activeHalfyear': {'description': 'The '
                                                                                                              'amount '
                                                                                                              'of '
                                                                                                              'users '
                                                                                                              'that '
                                                                                                              'signed '
                                                                                                              'in '
                                                                                                              'at '
                                                                                                              'least '
                                                                                                              'once '
                                                                                                              'in '
                                                                                                              'the '
                                                                                                              'last '
                                                                                                              '180 '
                                                                                                              'days.',
                                                                                               'minimum': 0,
                                                                                               'type': 'integer'},
                                                                            'activeMonth': {'description': 'The '
                                                                                                           'amount '
                                                                                                           'of '
                                                                                                           'users '
                                                                                                           'that '
                                                                                                           'signed '
                                                                                                           'in '
                                                                                                           'at '
                                                                                                           'least '
                                                                                                           'once '
                                                                                                           'in '
                                                                                                           'the '
                                                                                                           'last '
                                                                                                           '30 '
                                                                                                           'days.',
                                                                                            'minimum': 0,
                                                                                            'type': 'integer'},
                                                                            'total': {'description': 'The '
                                                                                                     'total '
                                                                                                     'amount '
                                                                                                     'of '
                                                                                                     'on '
                                                                                                     'this '
                                                                                                     'server '
                                                                                                     'registered '
                                                                                                     'users.',
                                                                                      'minimum': 0,
                                                                                      'type': 'integer'}},
                                                             'type': 'object'}},
                                    'required': ['users'],
                                    'type': 'object'},
                          'version': {'description': 'The schema version, must '
                                                     'be 2.0.',
                                      'enum': ['2.0']}},
           'required': ['version',
                        'software',
                        'protocols',
                        'services',
                        'openRegistrations',
                        'usage',
                        'metadata'],
           'type': 'object'}

      On instance:
          {'openRegistrations': True,
           'protocols': ['activitypub'],
           'software': {'name': 'lemmy', 'version': '0.19.2'},
           'usage': {'localComments': 426123,
                     'localPosts': 111450,
                     'users': {'activeHalfyear': 8204,
                               'activeMonth': 2692,
                               'total': 50377}},
           'version': '2.0'}
Feature: Host Meta # features/fediverse-features/ietf/host_meta.feature:7
  As defined in https://www.rfc-editor.org/rfc/rfc6415.html
  Scenario:                                                                                             # features/fediverse-features/ietf/host_meta.feature:10
    Given A Fediverse server                                                                            # features/steps/nodeinfo.py:15
    When Querying /.well-known/host-meta                                                                # features/steps/nodeinfo.py:23
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 157, in wrapped_decorator
          return step_decorator(astep_func, context, *args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 124, in step_decorator
          loop.run_until_complete(astep_func(context, *args, **kwargs))
        File "/usr/local/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
          return future.result()
                 ^^^^^^^^^^^^^^^
        File "features/steps/nodeinfo.py", line 29, in query_path
          response.raise_for_status()
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/aiohttp/client_reqrep.py", line 1059, in raise_for_status
          raise ClientResponseError(
      aiohttp.client_exceptions.ClientResponseError: 404, message='Not Found', url=URL('https://lemmy.ml/.well-known/host-meta')

    Then The page must resolve at port 80 or 443                                                        # None
    And If both port 80 _and_ 443 work, then they SHOULD return same document                           # None
    And The document SHOULD be served with "application/xrd+xml" media type                             # None
    And The document's root MUST be an "XRD" element                                                    # None
    And The document SHOULD NOT include elements of type "Subject"                                      # None
    And The document SHOULD include elements of type "Link"                                             # None
    And The "Link" elements should include either "template" or "href" attributes                       # None
    And The document should have at least one 'lrdd' document                                           # None
    And Fediverse specific: The lrdd document must include template containing WebFinger well-known URI # None

mastodon

Feature: FEP-2677: Identifying the Application Actor # features/fediverse-features/feps/fep-2677.feature:1
  Current draft: https://codeberg.org/fediverse/fep/src/branch/main/fep/2677/fep-2677.md
  Scenario: Application Actor is identified                                                # features/fediverse-features/feps/fep-2677.feature:4
    Given a Fediverse server                                                               # features/steps/nodeinfo.py:15
    When querying /.well-known/nodeinfo                                                    # features/steps/nodeinfo.py:23
    Then The links contain one of type "https://www.w3.org/ns/activitystreams#Application" # features/steps/nodeinfo.py:38
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "features/steps/nodeinfo.py", line 45, in contains_rel
          assert context.link
      AssertionError

    And This page can be resolved                                                          # None
    And The result is an application actor                                                 # None
Feature: Nodeinfo # features/fediverse-features/fedi/node_info.feature:1
  Information on nodeinfo is available in
  FEP-f165: https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md
  @nodeinfo-2-0
  Scenario:                                                                                               # features/fediverse-features/fedi/node_info.feature:6
    Given A Fediverse server                                                                              # features/steps/nodeinfo.py:15
    When Querying /.well-known/nodeinfo                                                                   # features/steps/nodeinfo.py:23
    Then The links contain one of type "http://nodeinfo.diaspora.software/ns/schema/2.0"                  # features/steps/nodeinfo.py:38
    And This page can be resolved                                                                         # features/steps/nodeinfo.py:48
    And The body of this page obeys the schema given by "http://nodeinfo.diaspora.software/ns/schema/2.0" # features/steps/nodeinfo.py:65
Feature: Host Meta # features/fediverse-features/ietf/host_meta.feature:7
  As defined in https://www.rfc-editor.org/rfc/rfc6415.html
  Scenario:                                                                                             # features/fediverse-features/ietf/host_meta.feature:10
    Given A Fediverse server                                                                            # features/steps/nodeinfo.py:15
    When Querying /.well-known/host-meta                                                                # features/steps/nodeinfo.py:23
    Then The page must resolve at port 80 or 443                                                        # features/steps/ietf.py:9
    And If both port 80 _and_ 443 work, then they SHOULD return same document                           # features/steps/ietf.py:14
    And The document SHOULD be served with "application/xrd+xml" media type                             # features/steps/ietf.py:19
    And The document's root MUST be an "XRD" element                                                    # features/steps/ietf.py:26
    And The document SHOULD NOT include elements of type "Subject"                                      # features/steps/ietf.py:32
    And The document SHOULD include elements of type "Link"                                             # features/steps/ietf.py:32
    And The "Link" elements should include either "template" or "href" attributes                       # features/steps/ietf.py:46
    And The document should have at least one 'lrdd' document                                           # features/steps/ietf.py:67
    And Fediverse specific: The lrdd document must include template containing WebFinger well-known URI # features/steps/ietf.py:77

mitra

Feature: FEP-2677: Identifying the Application Actor # features/fediverse-features/feps/fep-2677.feature:1
  Current draft: https://codeberg.org/fediverse/fep/src/branch/main/fep/2677/fep-2677.md
  Scenario: Application Actor is identified                                                # features/fediverse-features/feps/fep-2677.feature:4
    Given a Fediverse server                                                               # features/steps/nodeinfo.py:15
    When querying /.well-known/nodeinfo                                                    # features/steps/nodeinfo.py:23
    Then The links contain one of type "https://www.w3.org/ns/activitystreams#Application" # features/steps/nodeinfo.py:38
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "features/steps/nodeinfo.py", line 45, in contains_rel
          assert context.link
      AssertionError

    And This page can be resolved                                                          # None
    And The result is an application actor                                                 # None
Feature: Nodeinfo # features/fediverse-features/fedi/node_info.feature:1
  Information on nodeinfo is available in
  FEP-f165: https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md
  @nodeinfo-2-0
  Scenario:                                                                                               # features/fediverse-features/fedi/node_info.feature:6
    Given A Fediverse server                                                                              # features/steps/nodeinfo.py:15
    When Querying /.well-known/nodeinfo                                                                   # features/steps/nodeinfo.py:23
    Then The links contain one of type "http://nodeinfo.diaspora.software/ns/schema/2.0"                  # features/steps/nodeinfo.py:38
    And This page can be resolved                                                                         # features/steps/nodeinfo.py:48
    And The body of this page obeys the schema given by "http://nodeinfo.diaspora.software/ns/schema/2.0" # features/steps/nodeinfo.py:65
Feature: Host Meta # features/fediverse-features/ietf/host_meta.feature:7
  As defined in https://www.rfc-editor.org/rfc/rfc6415.html
  Scenario:                                                                                             # features/fediverse-features/ietf/host_meta.feature:10
    Given A Fediverse server                                                                            # features/steps/nodeinfo.py:15
    When Querying /.well-known/host-meta                                                                # features/steps/nodeinfo.py:23
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 157, in wrapped_decorator
          return step_decorator(astep_func, context, *args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 124, in step_decorator
          loop.run_until_complete(astep_func(context, *args, **kwargs))
        File "/usr/local/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
          return future.result()
                 ^^^^^^^^^^^^^^^
        File "features/steps/nodeinfo.py", line 29, in query_path
          response.raise_for_status()
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/aiohttp/client_reqrep.py", line 1059, in raise_for_status
          raise ClientResponseError(
      aiohttp.client_exceptions.ClientResponseError: 404, message='Not Found', url=URL('https://mitra.social/.well-known/host-meta')

    Then The page must resolve at port 80 or 443                                                        # None
    And If both port 80 _and_ 443 work, then they SHOULD return same document                           # None
    And The document SHOULD be served with "application/xrd+xml" media type                             # None
    And The document's root MUST be an "XRD" element                                                    # None
    And The document SHOULD NOT include elements of type "Subject"                                      # None
    And The document SHOULD include elements of type "Link"                                             # None
    And The "Link" elements should include either "template" or "href" attributes                       # None
    And The document should have at least one 'lrdd' document                                           # None
    And Fediverse specific: The lrdd document must include template containing WebFinger well-known URI # None

mobilzon

Feature: FEP-2677: Identifying the Application Actor # features/fediverse-features/feps/fep-2677.feature:1
  Current draft: https://codeberg.org/fediverse/fep/src/branch/main/fep/2677/fep-2677.md
  Scenario: Application Actor is identified                                                # features/fediverse-features/feps/fep-2677.feature:4
    Given a Fediverse server                                                               # features/steps/nodeinfo.py:15
    When querying /.well-known/nodeinfo                                                    # features/steps/nodeinfo.py:23
    Then The links contain one of type "https://www.w3.org/ns/activitystreams#Application" # features/steps/nodeinfo.py:38
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "features/steps/nodeinfo.py", line 45, in contains_rel
          assert context.link
      AssertionError

    And This page can be resolved                                                          # None
    And The result is an application actor                                                 # None
Feature: Nodeinfo # features/fediverse-features/fedi/node_info.feature:1
  Information on nodeinfo is available in
  FEP-f165: https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md
  @nodeinfo-2-0
  Scenario:                                                                                               # features/fediverse-features/fedi/node_info.feature:6
    Given A Fediverse server                                                                              # features/steps/nodeinfo.py:15
    When Querying /.well-known/nodeinfo                                                                   # features/steps/nodeinfo.py:23
    Then The links contain one of type "http://nodeinfo.diaspora.software/ns/schema/2.0"                  # features/steps/nodeinfo.py:38
    And This page can be resolved                                                                         # features/steps/nodeinfo.py:48
    And The body of this page obeys the schema given by "http://nodeinfo.diaspora.software/ns/schema/2.0" # features/steps/nodeinfo.py:65
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 157, in wrapped_decorator
          return step_decorator(astep_func, context, *args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 124, in step_decorator
          loop.run_until_complete(astep_func(context, *args, **kwargs))
        File "/usr/local/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
          return future.result()
                 ^^^^^^^^^^^^^^^
        File "features/steps/nodeinfo.py", line 74, in validate
          jsonschema.validate(context.page_body, schema)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/jsonschema/validators.py", line 1308, in validate
          raise error
      jsonschema.exceptions.ValidationError: 'Mobilizon' does not match '^[a-z0-9-]+$'

      Failed validating 'pattern' in schema['properties']['software']['properties']['name']:
          {'description': 'The canonical name of this server software.',
           'pattern': '^[a-z0-9-]+$',
           'type': 'string'}

      On instance['software']['name']:
          'Mobilizon'
Feature: Host Meta # features/fediverse-features/ietf/host_meta.feature:7
  As defined in https://www.rfc-editor.org/rfc/rfc6415.html
  Scenario:                                                                                             # features/fediverse-features/ietf/host_meta.feature:10
    Given A Fediverse server                                                                            # features/steps/nodeinfo.py:15
    When Querying /.well-known/host-meta                                                                # features/steps/nodeinfo.py:23
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 157, in wrapped_decorator
          return step_decorator(astep_func, context, *args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 124, in step_decorator
          loop.run_until_complete(astep_func(context, *args, **kwargs))
        File "/usr/local/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
          return future.result()
                 ^^^^^^^^^^^^^^^
        File "features/steps/nodeinfo.py", line 29, in query_path
          response.raise_for_status()
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/aiohttp/client_reqrep.py", line 1059, in raise_for_status
          raise ClientResponseError(
      aiohttp.client_exceptions.ClientResponseError: 404, message='Not Found', url=URL('https://demo.mobilizon.org/.well-known/host-meta')

    Then The page must resolve at port 80 or 443                                                        # None
    And If both port 80 _and_ 443 work, then they SHOULD return same document                           # None
    And The document SHOULD be served with "application/xrd+xml" media type                             # None
    And The document's root MUST be an "XRD" element                                                    # None
    And The document SHOULD NOT include elements of type "Subject"                                      # None
    And The document SHOULD include elements of type "Link"                                             # None
    And The "Link" elements should include either "template" or "href" attributes                       # None
    And The document should have at least one 'lrdd' document                                           # None
    And Fediverse specific: The lrdd document must include template containing WebFinger well-known URI # None

sharkey

Feature: FEP-2677: Identifying the Application Actor # features/fediverse-features/feps/fep-2677.feature:1
  Current draft: https://codeberg.org/fediverse/fep/src/branch/main/fep/2677/fep-2677.md
  Scenario: Application Actor is identified                                                # features/fediverse-features/feps/fep-2677.feature:4
    Given a Fediverse server                                                               # features/steps/nodeinfo.py:15
    When querying /.well-known/nodeinfo                                                    # features/steps/nodeinfo.py:23
    Then The links contain one of type "https://www.w3.org/ns/activitystreams#Application" # features/steps/nodeinfo.py:38
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "features/steps/nodeinfo.py", line 45, in contains_rel
          assert context.link
      AssertionError

    And This page can be resolved                                                          # None
    And The result is an application actor                                                 # None
Feature: Nodeinfo # features/fediverse-features/fedi/node_info.feature:1
  Information on nodeinfo is available in
  FEP-f165: https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md
  @nodeinfo-2-0
  Scenario:                                                                                               # features/fediverse-features/fedi/node_info.feature:6
    Given A Fediverse server                                                                              # features/steps/nodeinfo.py:15
    When Querying /.well-known/nodeinfo                                                                   # features/steps/nodeinfo.py:23
    Then The links contain one of type "http://nodeinfo.diaspora.software/ns/schema/2.0"                  # features/steps/nodeinfo.py:38
    And This page can be resolved                                                                         # features/steps/nodeinfo.py:48
    And The body of this page obeys the schema given by "http://nodeinfo.diaspora.software/ns/schema/2.0" # features/steps/nodeinfo.py:65
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 157, in wrapped_decorator
          return step_decorator(astep_func, context, *args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 124, in step_decorator
          loop.run_until_complete(astep_func(context, *args, **kwargs))
        File "/usr/local/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
          return future.result()
                 ^^^^^^^^^^^^^^^
        File "features/steps/nodeinfo.py", line 74, in validate
          jsonschema.validate(context.page_body, schema)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/jsonschema/validators.py", line 1308, in validate
          raise error
      jsonschema.exceptions.ValidationError: Additional properties are not allowed ('homepage' was unexpected)

      Failed validating 'additionalProperties' in schema['properties']['software']:
          {'additionalProperties': False,
           'description': 'Metadata about server software in use.',
           'properties': {'name': {'description': 'The canonical name of this '
                                                  'server software.',
                                   'pattern': '^[a-z0-9-]+$',
                                   'type': 'string'},
                          'version': {'description': 'The version of this server '
                                                     'software.',
                                      'type': 'string'}},
           'required': ['name', 'version'],
           'type': 'object'}

      On instance['software']:
          {'homepage': 'https://github.com/transfem-org/sharkey',
           'name': 'sharkey',
           'version': '2024.1.0.beta2'}
Feature: Host Meta # features/fediverse-features/ietf/host_meta.feature:7
  As defined in https://www.rfc-editor.org/rfc/rfc6415.html
  Scenario:                                                                                             # features/fediverse-features/ietf/host_meta.feature:10
    Given A Fediverse server                                                                            # features/steps/nodeinfo.py:15
    When Querying /.well-known/host-meta                                                                # features/steps/nodeinfo.py:23
    Then The page must resolve at port 80 or 443                                                        # features/steps/ietf.py:9
    And If both port 80 _and_ 443 work, then they SHOULD return same document                           # features/steps/ietf.py:14
    And The document SHOULD be served with "application/xrd+xml" media type                             # features/steps/ietf.py:19
    And The document's root MUST be an "XRD" element                                                    # features/steps/ietf.py:26
    And The document SHOULD NOT include elements of type "Subject"                                      # features/steps/ietf.py:32
    And The document SHOULD include elements of type "Link"                                             # features/steps/ietf.py:32
    And The "Link" elements should include either "template" or "href" attributes                       # features/steps/ietf.py:46
    And The document should have at least one 'lrdd' document                                           # features/steps/ietf.py:67
    And Fediverse specific: The lrdd document must include template containing WebFinger well-known URI # features/steps/ietf.py:77

wordpress

Feature: FEP-2677: Identifying the Application Actor # features/fediverse-features/feps/fep-2677.feature:1
  Current draft: https://codeberg.org/fediverse/fep/src/branch/main/fep/2677/fep-2677.md
  Scenario: Application Actor is identified                                                # features/fediverse-features/feps/fep-2677.feature:4
    Given a Fediverse server                                                               # features/steps/nodeinfo.py:15
    When querying /.well-known/nodeinfo                                                    # features/steps/nodeinfo.py:23
    Then The links contain one of type "https://www.w3.org/ns/activitystreams#Application" # features/steps/nodeinfo.py:38
    And This page can be resolved                                                          # features/steps/nodeinfo.py:48
    And The result is an application actor                                                 # features/steps/nodeinfo.py:60
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "features/steps/nodeinfo.py", line 62, in check_application_actor
          assert context.page_body["type"] == "Application"
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      AssertionError
Feature: Nodeinfo # features/fediverse-features/fedi/node_info.feature:1
  Information on nodeinfo is available in
  FEP-f165: https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md
  @nodeinfo-2-0
  Scenario:                                                                                               # features/fediverse-features/fedi/node_info.feature:6
    Given A Fediverse server                                                                              # features/steps/nodeinfo.py:15
    When Querying /.well-known/nodeinfo                                                                   # features/steps/nodeinfo.py:23
    Then The links contain one of type "http://nodeinfo.diaspora.software/ns/schema/2.0"                  # features/steps/nodeinfo.py:38
    And This page can be resolved                                                                         # features/steps/nodeinfo.py:48
    And The body of this page obeys the schema given by "http://nodeinfo.diaspora.software/ns/schema/2.0" # features/steps/nodeinfo.py:65
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 157, in wrapped_decorator
          return step_decorator(astep_func, context, *args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/api/async_step.py", line 124, in step_decorator
          loop.run_until_complete(astep_func(context, *args, **kwargs))
        File "/usr/local/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
          return future.result()
                 ^^^^^^^^^^^^^^^
        File "features/steps/nodeinfo.py", line 74, in validate
          jsonschema.validate(context.page_body, schema)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/jsonschema/validators.py", line 1308, in validate
          raise error
      jsonschema.exceptions.ValidationError: 'webmention' is not one of ['activitypub', 'buddycloud', 'dfrn', 'diaspora', 'libertree', 'ostatus', 'pumpio', 'tent', 'xmpp', 'zot']

      Failed validating 'enum' in schema['properties']['protocols']['items']:
          {'enum': ['activitypub',
                    'buddycloud',
                    'dfrn',
                    'diaspora',
                    'libertree',
                    'ostatus',
                    'pumpio',
                    'tent',
                    'xmpp',
                    'zot']}

      On instance['protocols'][1]:
          'webmention'
Feature: Host Meta # features/fediverse-features/ietf/host_meta.feature:7
  As defined in https://www.rfc-editor.org/rfc/rfc6415.html
  Scenario:                                                                                             # features/fediverse-features/ietf/host_meta.feature:10
    Given A Fediverse server                                                                            # features/steps/nodeinfo.py:15
    When Querying /.well-known/host-meta                                                                # features/steps/nodeinfo.py:23
    Then The page must resolve at port 80 or 443                                                        # features/steps/ietf.py:9
    And If both port 80 _and_ 443 work, then they SHOULD return same document                           # features/steps/ietf.py:14
    And The document SHOULD be served with "application/xrd+xml" media type                             # features/steps/ietf.py:19
    And The document's root MUST be an "XRD" element                                                    # features/steps/ietf.py:26
    And The document SHOULD NOT include elements of type "Subject"                                      # features/steps/ietf.py:32
      Traceback (most recent call last):
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/model.py", line 1329, in run
          match.run(runner.context)
        File "/woodpecker/src/codeberg.org/helge/fediverse-features-tests/venv/lib/python3.11/site-packages/behave/matchers.py", line 98, in run
          self.func(context, *args, **kwargs)
        File "features/steps/ietf.py", line 40, in element_types
          raise ValueError(f"Contains elements of type {element_type}")
      ValueError: Contains elements of type Subject

    And The document SHOULD include elements of type "Link"                                             # None
    And The "Link" elements should include either "template" or "href" attributes                       # None
    And The document should have at least one 'lrdd' document                                           # None
    And Fediverse specific: The lrdd document must include template containing WebFinger well-known URI # None