Skip to content

[Bug]: Nextcloud desktop client (macOS) becomes unresponsive at 100% CPU #7377

@danrex

Description

@danrex

⚠️ Before submitting, please verify the following: ⚠️

Bug description

The desktop client starts syncing and then becomes unresponsive quickly. If I pause the sync right after the client starts then it does not crash.

Steps to reproduce

Unknown

Expected behavior

Desktop client should sync the files and stay responsive.

Which files are affected by this bug

I did not manage to deterministically pinpoint it to a specific file.

Operating system

macOS

Which version of the operating system you are running.

macOS Sonoma 14.7 (23H124)

Package

Official macOS 12+ universal pkg

Nextcloud Server version

29.0.7

Nextcloud Desktop Client version

3.14.1

Is this bug present after an update or on a fresh install?

Updated from a minor version (ex. 3.4.2 to 3.4.4)

Are you using the Nextcloud Server Encryption module?

Encryption is Disabled

Are you using an external user-backend?

  • Default internal user-backend
  • LDAP/ Active Directory
  • SSO - SAML
  • Other

Nextcloud Server logs

{"reqId":"[REDACTED]","level":0,"time":"2024-10-21T17:23:38+00:00","remoteAddr":"[REDACTED]","user":"[REDACTED]","app":"text","method":"POST","url":"/remote.php/dav/bulk","message":"Reset document skipped in BeforeNodeWrittenEvent","userAgent":"Mozilla/5.0 (Macintosh) mirall/3.14.1daily (Nextcloud, macos-23.6.0 ClientArchitecture: arm64 OsArchitecture: arm64)","version":"29.0.7.1","exception":{"Exception":"OCP\Files\NotFoundException","Message":"","Code":0,"Trace":[{"file":"/usr/local/nextcloud/apps/text/lib/Listeners/BeforeNodeWrittenListener.php","line":60,"function":"getId","class":"OC\Files\Node\NonExistingFile","type":"->"},{"file":"/usr/local/nextcloud/lib/private/EventDispatcher/ServiceEventListener.php","line":86,"function":"handle","class":"OCA\Text\Listeners\BeforeNodeWrittenListener","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/symfony/event-dispatcher/EventDispatcher.php","line":230,"function":"__invoke","class":"OC\EventDispatcher\ServiceEventListener","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/symfony/event-dispatcher/EventDispatcher.php","line":59,"function":"callListeners","class":"Symfony\Component\EventDispatcher\EventDispatcher","type":"->"},{"file":"/usr/local/nextcloud/lib/private/EventDispatcher/EventDispatcher.php","line":86,"function":"dispatch","class":"Symfony\Component\EventDispatcher\EventDispatcher","type":"->"},{"file":"/usr/local/nextcloud/lib/private/EventDispatcher/EventDispatcher.php","line":98,"function":"dispatch","class":"OC\EventDispatcher\EventDispatcher","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Node/HookConnector.php","line":93,"function":"dispatchTyped","class":"OC\EventDispatcher\EventDispatcher","type":"->"},{"file":"/usr/local/nextcloud/lib/private/legacy/OC_Hook.php","line":105,"function":"write","class":"OC\Files\Node\HookConnector","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/View.php","line":1287,"function":"emit","class":"OC_Hook","type":"::"},{"file":"/usr/local/nextcloud/lib/private/Files/View.php","line":1154,"function":"runHooks","class":"OC\Files\View","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/View.php","line":683,"function":"basicOperation","class":"OC\Files\View","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Node/Folder.php","line":192,"function":"file_put_contents","class":"OC\Files\View","type":"->"},{"function":"newFile","class":"OC\Files\Node\Folder","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Node/LazyFolder.php","line":84,"function":"call_user_func_array"},{"file":"/usr/local/nextcloud/lib/private/Files/Node/LazyFolder.php","line":463,"function":"__call","class":"OC\Files\Node\LazyFolder","type":"->"},{"file":"/usr/local/nextcloud/apps/dav/lib/BulkUpload/BulkUploadPlugin.php","line":92,"function":"newFile","class":"OC\Files\Node\LazyFolder","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpPost","class":"OCA\DAV\BulkUpload\BulkUploadPlugin","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":253,"function":"invokeMethod","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":321,"function":"start","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/apps/dav/lib/Server.php","line":383,"function":"exec","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/apps/dav/appinfo/v2/remote.php","line":35,"function":"exec","class":"OCA\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/remote.php","line":172,"args":["/usr/local/nextcloud/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/usr/local/nextcloud/lib/private/Files/Node/NonExistingFile.php","Line":52,"message":"Reset document skipped in BeforeNodeWrittenEvent","exception":{},"CustomMessage":"Reset document skipped in BeforeNodeWrittenEvent"}}
{"reqId":"[REDACTED]","level":0,"time":"2024-10-21T17:23:38+00:00","remoteAddr":"[REDACTED]","user":"[REDACTED]","app":"no app in context","method":"POST","url":"/remote.php/dav/bulk","message":"dirty table reads: SELECT fileid FROM *PREFIX*filecache WHERE (storage = :dcValue1) AND (path_hash = :dcValue2)","userAgent":"Mozilla/5.0 (Macintosh) mirall/3.14.1daily (Nextcloud, macos-23.6.0 ClientArchitecture: arm64 OsArchitecture: arm64)","version":"29.0.7.1","exception":{"Exception":"Exception","Message":"dirty table reads: SELECT fileid FROM *PREFIX*filecache WHERE (storage = :dcValue1) AND (path_hash = :dcValue2)","Code":0,"Trace":[{"file":"/usr/local/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php","line":348,"function":"executeQuery","class":"OC\DB\Connection","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php","line":384,"function":"executeQuery","class":"Doctrine\DBAL\Query\QueryBuilder","type":"->"},{"file":"/usr/local/nextcloud/lib/private/DB/QueryBuilder/QueryBuilder.php","line":280,"function":"execute","class":"Doctrine\DBAL\Query\QueryBuilder","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Cache/Cache.php","line":497,"function":"execute","class":"OC\DB\QueryBuilder\QueryBuilder","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Cache/Cache.php","line":515,"function":"getId","class":"OC\Files\Cache\Cache","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Cache/Updater.php","line":258,"function":"getParentId","class":"OC\Files\Cache\Cache","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Cache/Updater.php","line":145,"function":"correctParentStorageMtime","class":"OC\Files\Cache\Updater","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/View.php","line":298,"function":"update","class":"OC\Files\Cache\Updater","type":"->","args":["*** sensitive parameters replaced "]},{"file":"/usr/local/nextcloud/lib/private/Files/View.php","line":1188,"function":"writeUpdate","class":"OC\Files\View","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/View.php","line":683,"function":"basicOperation","class":"OC\Files\View","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Node/Folder.php","line":192,"function":"file_put_contents","class":"OC\Files\View","type":"->"},{"function":"newFile","class":"OC\Files\Node\Folder","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Node/LazyFolder.php","line":84,"function":"call_user_func_array"},{"file":"/usr/local/nextcloud/lib/private/Files/Node/LazyFolder.php","line":463,"function":"__call","class":"OC\Files\Node\LazyFolder","type":"->"},{"file":"/usr/local/nextcloud/apps/dav/lib/BulkUpload/BulkUploadPlugin.php","line":92,"function":"newFile","class":"OC\Files\Node\LazyFolder","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpPost","class":"OCA\DAV\BulkUpload\BulkUploadPlugin","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":253,"function":"invokeMethod","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":321,"function":"start","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/apps/dav/lib/Server.php","line":383,"function":"exec","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/apps/dav/appinfo/v2/remote.php","line":35,"function":"exec","class":"OCA\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/remote.php","line":172,"args":["/usr/local/nextcloud/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/usr/local/nextcloud/lib/private/DB/Connection.php","Line":320,"message":"dirty table reads: SELECT fileid FROM *PREFIX*filecache WHERE (storage = :dcValue1) AND (path_hash = :dcValue2)","tables":["oc_authtoken","oc_filecache"],"reads":["oc_filecache"],"exception":{},"CustomMessage":"dirty table reads: SELECT fileid FROM *PREFIX*filecache WHERE (storage = :dcValue1) AND (path_hash = :dcValue2)"}}
{"reqId":"[REDACTED]","level":0,"time":"2024-10-21T17:23:38+00:00","remoteAddr":"[REDACTED]","user":"[REDACTED]","app":"no app in context","method":"POST","url":"/remote.php/dav/bulk","message":"dirty table reads: SELECT path FROM *PREFIX*filecache WHERE (storage = :dcValue1) AND (fileid = :dcValue2)","userAgent":"Mozilla/5.0 (Macintosh) mirall/3.14.1daily (Nextcloud, macos-23.6.0 ClientArchitecture: arm64 OsArchitecture: arm64)","version":"29.0.7.1","exception":{"Exception":"Exception","Message":"dirty table reads: SELECT path FROM *PREFIX*filecache WHERE (storage = :dcValue1) AND (fileid = :dcValue2)","Code":0,"Trace":[{"file":"/usr/local/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php","line":348,"function":"executeQuery","class":"OC\DB\Connection","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php","line":384,"function":"executeQuery","class":"Doctrine\DBAL\Query\QueryBuilder","type":"->"},{"file":"/usr/local/nextcloud/lib/private/DB/QueryBuilder/QueryBuilder.php","line":280,"function":"execute","class":"Doctrine\DBAL\Query\QueryBuilder","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Cache/Cache.php","line":1102,"function":"execute","class":"OC\DB\QueryBuilder\QueryBuilder","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Cache/Cache.php","line":419,"function":"getPathById","class":"OC\Files\Cache\Cache","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Cache/Updater.php","line":264,"function":"update","class":"OC\Files\Cache\Cache","type":"->","args":["
sensitive parameters replaced "]},{"file":"/usr/local/nextcloud/lib/private/Files/Cache/Updater.php","line":145,"function":"correctParentStorageMtime","class":"OC\Files\Cache\Updater","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/View.php","line":298,"function":"update","class":"OC\Files\Cache\Updater","type":"->","args":[" sensitive parameters replaced ***"]},{"file":"/usr/local/nextcloud/lib/private/Files/View.php","line":1188,"function":"writeUpdate","class":"OC\Files\View","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/View.php","line":683,"function":"basicOperation","class":"OC\Files\View","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Node/Folder.php","line":192,"function":"file_put_contents","class":"OC\Files\View","type":"->"},{"function":"newFile","class":"OC\Files\Node\Folder","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Node/LazyFolder.php","line":84,"function":"call_user_func_array"},{"file":"/usr/local/nextcloud/lib/private/Files/Node/LazyFolder.php","line":463,"function":"__call","class":"OC\Files\Node\LazyFolder","type":"->"},{"file":"/usr/local/nextcloud/apps/dav/lib/BulkUpload/BulkUploadPlugin.php","line":92,"function":"newFile","class":"OC\Files\Node\LazyFolder","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpPost","class":"OCA\DAV\BulkUpload\BulkUploadPlugin","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":253,"function":"invokeMethod","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":321,"function":"start","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/apps/dav/lib/Server.php","line":383,"function":"exec","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/apps/dav/appinfo/v2/remote.php","line":35,"function":"exec","class":"OCA\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/remote.php","line":172,"args":["/usr/local/nextcloud/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/usr/local/nextcloud/lib/private/DB/Connection.php","Line":320,"message":"dirty table reads: SELECT path FROM *PREFIX*filecache WHERE (storage = :dcValue1) AND (fileid = :dcValue2)","tables":["oc_authtoken","oc_filecache"],"reads":["oc_filecache"],"exception":{},"CustomMessage":"dirty table reads: SELECT path FROM *PREFIX*filecache WHERE (storage = :dcValue1) AND (fileid = :dcValue2)"}}
{"reqId":"[REDACTED]","level":0,"time":"2024-10-21T17:23:38+00:00","remoteAddr":"[REDACTED]","user":"[REDACTED]","app":"no app in context","method":"POST","url":"/remote.php/dav/bulk","message":"dirty table reads: SELECT filecache.fileid, storage, path, path_hash, filecache.parent, filecache.name, mimetype, mimepart, size, mtime, storage_mtime, encrypted, etag, filecache.permissions, checksum, unencrypted_size, metadata_etag, creation_time, upload_time, meta.json AS meta_json, meta.sync_token AS meta_sync_token FROM *PREFIX*filecache filecache LEFT JOIN *PREFIX*filecache_extended fe ON filecache.fileid = fe.fileid LEFT JOIN *PREFIX*files_metadata meta ON filecache.fileid = meta.file_id WHERE (storage = :dcValue1) AND (path_hash = :dcValue2)","userAgent":"Mozilla/5.0 (Macintosh) mirall/3.14.1daily (Nextcloud, macos-23.6.0 ClientArchitecture: arm64 OsArchitecture: arm64)","version":"29.0.7.1","exception":{"Exception":"Exception","Message":"dirty table reads: SELECT filecache.fileid, storage, path, path_hash, filecache.parent, filecache.name, mimetype, mimepart, size, mtime, storage_mtime, encrypted, etag, filecache.permissions, checksum, unencrypted_size, metadata_etag, creation_time, upload_time, meta.json AS meta_json, meta.sync_token AS meta_sync_token FROM *PREFIX*filecache filecache LEFT JOIN *PREFIX*filecache_extended fe ON filecache.fileid = fe.fileid LEFT JOIN *PREFIX*files_metadata meta ON filecache.fileid = meta.file_id WHERE (storage = :dcValue1) AND (path_hash = :dcValue2)","Code":0,"Trace":[{"file":"/usr/local/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php","line":348,"function":"executeQuery","class":"OC\DB\Connection","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php","line":384,"function":"executeQuery","class":"Doctrine\DBAL\Query\QueryBuilder","type":"->"},{"file":"/usr/local/nextcloud/lib/private/DB/QueryBuilder/QueryBuilder.php","line":280,"function":"execute","class":"Doctrine\DBAL\Query\QueryBuilder","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Cache/Cache.php","line":164,"function":"execute","class":"OC\DB\QueryBuilder\QueryBuilder","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Cache/HomeCache.php","line":57,"function":"get","class":"OC\Files\Cache\Cache","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/View.php","line":1336,"function":"get","class":"OC\Files\Cache\HomeCache","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/View.php","line":1383,"function":"getCacheEntry","class":"OC\Files\View","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Node/HookConnector.php","line":226,"function":"getFileInfo","class":"OC\Files\View","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Node/HookConnector.php","line":115,"function":"getNodeForPath","class":"OC\Files\Node\HookConnector","type":"->"},{"file":"/usr/local/nextcloud/lib/private/legacy/OC_Hook.php","line":105,"function":"postCreate","class":"OC\Files\Node\HookConnector","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/View.php","line":1287,"function":"emit","class":"OC_Hook","type":"::"},{"file":"/usr/local/nextcloud/lib/private/Files/View.php","line":1214,"function":"runHooks","class":"OC\Files\View","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/View.php","line":683,"function":"basicOperation","class":"OC\Files\View","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Node/Folder.php","line":192,"function":"file_put_contents","class":"OC\Files\View","type":"->"},{"function":"newFile","class":"OC\Files\Node\Folder","type":"->"},{"file":"/usr/local/nextcloud/lib/private/Files/Node/LazyFolder.php","line":84,"function":"call_user_func_array"},{"file":"/usr/local/nextcloud/lib/private/Files/Node/LazyFolder.php","line":463,"function":"__call","class":"OC\Files\Node\LazyFolder","type":"->"},{"file":"/usr/local/nextcloud/apps/dav/lib/BulkUpload/BulkUploadPlugin.php","line":92,"function":"newFile","class":"OC\Files\Node\LazyFolder","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpPost","class":"OCA\DAV\BulkUpload\BulkUploadPlugin","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":253,"function":"invokeMethod","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":321,"function":"start","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/apps/dav/lib/Server.php","line":383,"function":"exec","class":"Sabre\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/apps/dav/appinfo/v2/remote.php","line":35,"function":"exec","class":"OCA\DAV\Server","type":"->"},{"file":"/usr/local/nextcloud/remote.php","line":172,"args":["/usr/local/nextcloud/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/usr/local/nextcloud/lib/private/DB/Connection.php","Line":320,"message":"dirty table reads: SELECT filecache.fileid, storage, path, path_hash, filecache.parent, filecache.name, mimetype, mimepart, size, mtime, storage_mtime, encrypted, etag, filecache.permissions, checksum, unencrypted_size, metadata_etag, creation_time, upload_time, meta.json AS meta_json, meta.sync_token AS meta_sync_token FROM *PREFIX*filecache filecache LEFT JOIN *PREFIX*filecache_extended fe ON filecache.fileid = fe.fileid LEFT JOIN *PREFIX*files_metadata meta ON filecache.fileid = meta.file_id WHERE (storage = :dcValue1) AND (path_hash = :dcValue2)","tables":["oc_authtoken","oc_filecache"],"reads":["oc_filecache","oc_filecache_extended","oc_files_metadata"],"exception":{},"CustomMessage":"dirty table reads: SELECT filecache.fileid, storage, path, path_hash, filecache.parent, filecache.name, mimetype, mimepart, size, mtime, storage_mtime, encrypted, etag, filecache.permissions, checksum, unencrypted_size, metadata_etag, creation_time, upload_time, meta.json AS meta_json, meta.sync_token AS meta_sync_token FROM *PREFIX*filecache filecache LEFT JOIN *PREFIX*filecache_extended fe ON filecache.fileid = fe.fileid LEFT JOIN *PREFIX*files_metadata meta ON filecache.fileid = meta.file_id WHERE (storage = :dcValue1) AND (path_hash = :dcValue2)"}}

Additional info

  • The server is running Ubuntu 22.04, but the problem was already present on 20.04.
  • There is 48GB of free space on the server and more than 150GB on the client.
  • I ran occ files:scan --all and occ maintenance:repair.
  • There are no configuration warnings.
  • I tried to pinpoint the issue to specific directories or files but did not reach any conclusive results. I tried both excluding directories via the ignore list and manually removing and re-adding them on both the client and server. At one point or another, the client always becomes unresponsive.
  • I've had this issue across multiple client and server versions. Unfortunately, I don't remember when it started on the client, but on the server, it has been present since before the "Hub" versions were introduced.
  • I tried removing the ".sync" files as suggested in this comment, but with no success.
  • I tried downgrading to several versions, including 3.4.2, but all showed the same symptoms.
  • An excerpt of the server logs is attached. Happy to provide more if needed. Also happy to provide the client logs, but I wasn't sure if they potentially contain any sensitive information.

Metadata

Metadata

Assignees

No one assigned

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions