原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [
"chorus",
"synchronization",
"conflict",
"xml",
"merge",
"send-receive",
"dvcs",
"hg",
"fieldworks",
"hacktoberfest"
],
"is_fork": false,
"size_kb": 58923,
"has_wiki": false,
"homepage": null,
"languages": {
"C#": 2392533,
"CSS": 973,
"HTML": 3955,
"XSLT": 114584,
"Shell": 1311,
"Batchfile": 2908
},
"pushed_at": "2026-07-24T12:55:06Z",
"created_at": "2013-11-05T00:31:14Z",
"owner_type": "Organization",
"updated_at": "2026-07-24T12:26:46Z",
"description": "End-user collaboration library via 3-way xml merging and hg dvcs under the hood",
"is_archived": false,
"is_disabled": false,
"license_spdx": null,
"default_branch": "master",
"license_spdx_raw": null,
"primary_language": "C#",
"significant_languages": [
"C#"
]
},
"owner": {
"blog": "https://www.sil.org/",
"name": "SIL LSDev",
"type": "Organization",
"login": "sillsdev",
"company": null,
"location": null,
"followers": 181,
"avatar_url": "https://avatars.githubusercontent.com/u/1095739?v=4",
"created_at": "2011-10-02T00:05:38Z",
"is_verified": null,
"public_repos": 303,
"account_age_days": 5409
},
"license": {
"state": "absent",
"spdx_id": null,
"raw_spdx": null,
"file_present": false,
"scorecard_found": false,
"profile_has_license": false
},
"activity": {
"releases": [
{
"tag": "v5.1.0",
"kind": "minor",
"published_at": "2023-09-13T09:30:06Z"
},
{
"tag": "v5.0.0",
"kind": "major",
"published_at": "2022-08-26T07:09:56Z"
},
{
"tag": "v4.0.0",
"kind": "major",
"published_at": "2021-05-17T14:58:45Z"
},
{
"tag": "chorus-hub/2.4.15",
"kind": "other",
"published_at": "2015-03-25T19:39:51Z"
}
],
"recent_commits": [
{
"oid": "d8413afcccb631f5484e36090753290341917a0c",
"body": "…HubServerInfo (#379)\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix IndexOutOfRangeException for query segments without '=' in Chorus…",
"author_name": "D. Ror.",
"author_login": "imnasnainaec",
"committed_at": "2026-07-24T12:26:25Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7313dd64833484782da4e0f26655d04da70b5af6",
"body": "LibChorus does not use WinForms directly. The package was only supplying a transitive System.ServiceModel framework reference on net462. Add explicit framework references in LibChorus and ChorusHub instead.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "Remove L10NSharp.Windows.Forms from LibChorus (#388)",
"author_name": "Kevin Hahn",
"author_login": "hahn-kev",
"committed_at": "2026-07-07T04:51:12Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "fa2a2562d75adf4a4ced9745ab42449d8ba4ac43",
"body": null,
"is_bot": false,
"headline": "Bump GHA l10n workflows to windows-latest (#378)",
"author_name": "D. Ror.",
"author_login": "imnasnainaec",
"committed_at": "2026-07-03T10:07:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b115dd02cc92ed8bc103530f2a6693ba53abd6d2",
"body": "Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix thread safety race in UsbDrives property (#383)",
"author_name": "D. Ror.",
"author_login": "imnasnainaec",
"committed_at": "2026-07-02T13:04:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "cdbc34c91d053895ed795f99feea9dcb1df46f86",
"body": "…vice (#380)\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix silent data loss when record identifier is missing in XmlMergeSer…",
"author_name": "D. Ror.",
"author_login": "imnasnainaec",
"committed_at": "2026-07-02T11:58:20Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3571e47f891b579fcb6f4856df80c7a723397f7d",
"body": "Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "[Chorus.Model] Prevent ProtectedData crashes (#384)",
"author_name": "D. Ror.",
"author_login": "imnasnainaec",
"committed_at": "2026-06-25T12:28:04Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "363c8d1064b6a6a0cf4c46eda5ec785dbbcefe96",
"body": "* Update to libpalaso 18 and L10NSharp 10\n\nCo-authored-by: jasonleenaylor <2295227+jasonleenaylor@users.noreply.github.com>",
"is_bot": false,
"headline": "Update to libpalaso 18 and L10NSharp 10 (#368)",
"author_name": "Copilot",
"author_login": "Copilot",
"committed_at": "2026-05-18T18:39:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4848bb333f1219d7e4c1203a75a1482a117ff783",
"body": "* Exceptions during hg push should be errors\n\n* Push to all targets even if some fail",
"is_bot": false,
"headline": "Exceptions during hg push should be errors (#367)",
"author_name": "Robin Munn",
"author_login": "rmunn",
"committed_at": "2026-05-06T07:06:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1ab24b9cd13563145e98a43e1551518c8f9cc303",
"body": null,
"is_bot": false,
"headline": "Update libPalaso dependencies from version 15 to 17",
"author_name": "Mark Kidder",
"author_login": "mark-sil",
"committed_at": "2025-10-09T16:23:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d4165aa0507561af4930a037d21df0faa849bcbb",
"body": null,
"is_bot": false,
"headline": "Update libPalaso dependencies from version 15 to 17",
"author_name": "mark-sil",
"author_login": "mark-sil",
"committed_at": "2025-10-07T13:10:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "af6e5c0e97758aef00bd2104b6c1ccf5719798ef",
"body": "* trace HgRunner.Run calls\n\n* trace individual hg resume pushes and pulls\n\n* trace Synchronizer.cs SyncNow, SendToOthers, PullFromOthers and Merge\n\n* guard against null activity in `TagResumableParameters`",
"is_bot": false,
"headline": "Start tracing send recieve (#360)",
"author_name": "Kevin Hahn",
"author_login": "hahn-kev",
"committed_at": "2025-02-25T02:40:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "51c25ac0698c393584560edaf29b9897ca4f0369",
"body": "* Correctly encode password in ServerSettingsModel\n\n* ubuntu-latest is 24.04 now, we still need 22.04\n\nWe still need a python2 package which 24.04 no longer offers, so run\nthis on 22.04 until the need for the python2 package goes away.",
"is_bot": false,
"headline": "Correctly encode password in ServerSettingsModel (#359)",
"author_name": "Robin Munn",
"author_login": "rmunn",
"committed_at": "2025-02-19T02:12:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "49493f8a9628a1fb0df71b0dd781cd2d8d1130a3",
"body": null,
"is_bot": false,
"headline": "A few more 461 -> 462 updates",
"author_name": "Robin Munn",
"author_login": "rmunn",
"committed_at": "2024-11-27T16:38:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "391b232817f7af68e0e366f97199e2f6e09d2bbe",
"body": "* This brings in a new version of L10nSharp with API changes",
"is_bot": false,
"headline": "Update libpalaso depdencies",
"author_name": "Jason Naylor",
"author_login": "jasonleenaylor",
"committed_at": "2024-11-27T16:38:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0793f88ed96889752f9a833c4af7e70f8a50e1d1",
"body": null,
"is_bot": false,
"headline": "Update framework to 462 and drop 461 build",
"author_name": "Jason Naylor",
"author_login": "jasonleenaylor",
"committed_at": "2024-11-27T16:38:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "56b160941e312a9b53df957fca97fd5cbc43d9a2",
"body": "* Run tests in parallel, one per framework\n\nNow that tests run on three frameworks (net461, net6.0, net8.0), we can\nsave a lot of build time by running each framework's tests in parallel.\n\n* Ensure parallel test runs don't cancel each other\n\n* Don't specify framework for `dotnet build` step\n\n* Attem\n[…]\nneed to re-run the dotnet restore and build steps again.\n\n* Remove net6.0 targets\n\nEverything that uses Chorus now runs on net8.0 or higher.\n\n---------\n\nCo-authored-by: Kevin Hahn <kevin_hahn@sil.org>",
"is_bot": false,
"headline": "Run tests in parallel, one per framework (#354)",
"author_name": "Robin Munn",
"author_login": "rmunn",
"committed_at": "2024-11-18T02:57:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "15f882371a3604e08c683532b3fcbe269a79e285",
"body": "Three env vars are defined, one that sets the path to the Mercurial\r\nexecutable directly (overriding both folder and exe name), one that\r\njust overrides the folder and lets Chorus pick the exe name, and one\r\nthat just overrides the exe name and lets Chorus pick the folder.",
"is_bot": false,
"headline": "Allow overriding hg.exe location with env vars (#353)",
"author_name": "Robin Munn",
"author_login": "rmunn",
"committed_at": "2024-11-07T08:00:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "51bb8f80b4573056b7a2c9490751c54dedfcd2ab",
"body": "* Replace Platform.IsMono with actual OS checks\r\n\r\nSome cases of Platform.IsMono are workarounds for bugs in older versions\r\nof mono. Those can probably be removed, but for safety's sake, we'll\r\nleave them alone for now.\r\n\r\nOther cases are clearly trying to check the platform, to run Linux-only\r\nor \n[…]\nn on Linux these days, it's running under dotnet\r\nrather than mono, and the Platform.IsMono check returns false.\r\n\r\n* Don't try to run Windows diff3.exe on Linux\r\n* Quote filenames with spaces in them",
"is_bot": false,
"headline": "Replace Platform.IsMono with actual OS checks (#356)",
"author_name": "Robin Munn",
"author_login": "rmunn",
"committed_at": "2024-11-07T05:59:13Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a6a70411ab7d7bfad3ec82b86ba30bcd442d25cc",
"body": "v3 is deprecated and will stop working one month from now",
"is_bot": false,
"headline": "Use upload- and download-artifact v4 (#351)",
"author_name": "Robin Munn",
"author_login": "rmunn",
"committed_at": "2024-10-25T07:32:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "526358745e6ecbd73b76fbe805f7a01ea143f29d",
"body": "Many times stderr's contents are just a single newline; there's no need\r\nto write that to the progress log. We also don't need to write double\r\nnewlines to the log, so trim the final trailing newline before writing.",
"is_bot": false,
"headline": "No more unnecessary empty \"stderr:\" lines in log (#349)",
"author_name": "Robin Munn",
"author_login": "rmunn",
"committed_at": "2024-09-23T08:33:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4535fc4bdf27c7d19df6e5dfc368d93494b5a884",
"body": "GetTextFromQuery calls ExecuteErrorsOk, which already logs the value of\r\nstdout and stderr to the progress dialog. So there's no point in logging\r\nthe same value a second time.",
"is_bot": false,
"headline": "Don't duplicate hg process output (#347)",
"author_name": "Robin Munn",
"author_login": "rmunn",
"committed_at": "2024-09-07T06:49:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "41c3d97428b99ac2c3d56458c81b8ae48d9a165c",
"body": "In rare cases, a thread-scheduling race condition can cause a thread's\r\nstate to be ThreadState.Stopped even though it hasn't yet executed its\r\n`finally` block, which can result in result.StandardOutput or Error not\r\nbeing assigned a string, leaving them null. Furthermore, the C# docs say\r\nnot to de\n[…]\n its\r\nResults property; until then, Results is null.\r\n\r\nThis should guarantee the safety of the existing GetTextFromQuery code,\r\nbut to be safe we also make sure it can turn null into an empty string.",
"is_bot": false,
"headline": "Avoid NullReferenceExeption in GetTextFromQuery (#346)",
"author_name": "Robin Munn",
"author_login": "rmunn",
"committed_at": "2024-08-30T06:50:25Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d0b61c6e8542785798eeb0b42cd66db8291e40ad",
"body": "* change how the resumable request urls are made to not lose the port number. Write tests for the URL formatting.\r\n\r\n* increase timeout for test runs\r\n\r\n- increase the timeout for long test runs\r\n- also add concurrency rule to cancel outdated runs still in progress\r\n\r\n---------\r\n\r\nCo-authored-by: Chris Hirt <chris@hirtfamily.net>",
"is_bot": false,
"headline": "fix case where port number is lost using resumable (#343)",
"author_name": "Kevin Hahn",
"author_login": "hahn-kev",
"committed_at": "2024-08-14T01:30:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "104ce40716ad38b52e0794a1bdddf2891ca73d7a",
"body": "…ndows\n\nUse correct hg executable on Windows",
"is_bot": false,
"headline": "Merge pull request #341 from sillsdev/bug/wrong-executable-used-on-wi…",
"author_name": "Kevin Hahn",
"author_login": "hahn-kev",
"committed_at": "2024-05-21T22:37:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c8a55243717b22a4178f731c76766c6d5c0a373c",
"body": null,
"is_bot": false,
"headline": "Use correct hg executable on Windows",
"author_name": "Tim Haasdyk",
"author_login": "myieye",
"committed_at": "2024-05-16T11:34:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "38ecab3a4af8a5bba05ed1d65805bb219aa2464b",
"body": "Most code paths replaced the user's Send/Receive password with a string\r\nof asterisks, but there was one code path where this was missed.",
"is_bot": false,
"headline": "Do not log Send/Receive passwords (#339)",
"author_name": "Robin Munn",
"author_login": "rmunn",
"committed_at": "2024-04-26T08:20:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ccdf57d9d260821c7d567951e660b3ce02d53601",
"body": "* refactor thread aborting to use tasks and cancellation tokens\r\n\r\n* use cancellation token for HgServeRunner.cs instead of thread abort\r\n\r\n* Fix HgProcessReaderTests on Linux\r\n\r\n* Fix ProcessStreamTests on Linux\r\n\r\n* Fix one last test on Linux\r\n\r\n* simplify client cleanup to happen when stopped\r\n\r\n---------\r\n\r\nCo-authored-by: Robin Munn <rmunn@pobox.com>",
"is_bot": false,
"headline": "switch away from thread abort where we can (#336)",
"author_name": "Kevin Hahn",
"author_login": "hahn-kev",
"committed_at": "2024-04-15T20:27:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "04e1e281629260cdc89e718f418d9c0491859a44",
"body": "* Also build for net8.0\r\n* Make GHA workflow run .NET 6 and 8\r\n* Update setup-dotnet action\r\n\r\nv2.1.0 was still trying to build against win7-x32 runtimes, which are no\r\nlonger offered in .NET 8. If we're using recent .NET, we need a recent\r\nsetup-dotnet version.\r\n\r\n* Fix RuntimeIdentifiers\r\n* Suppre\n[…]\nns, which is exactly the scenario that makes this test\r\nuseless. It's already disabled on Windows; there's no reason for it to\r\ncause the CI build to fail all the time when it's the only failing test.",
"is_bot": false,
"headline": "Also build for net8.0 (#332)",
"author_name": "Robin Munn",
"author_login": "rmunn",
"committed_at": "2024-03-20T17:51:13Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "04eda7903f3fe09d92cfc3edf91acea598c92744",
"body": "We'll start by more than doubling the time we allocate for this test to\r\nrun, since the filesystem on a GitHub Actions runner appears slow. If\r\nthat isn't enough to fix it, we should remove the test entirely.",
"is_bot": false,
"headline": "Try to fix flaky test (#330)",
"author_name": "Robin Munn",
"author_login": "rmunn",
"committed_at": "2023-12-15T02:26:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3de3771529ce85f6ad4e0eb2ffa6d2c1fc975af4",
"body": "* ChorusMerge: no more need to change input encoding\r\n\r\nWith the changes in Mercurial 6.5.1 and Python3, ChorusMerge now gets\r\ncorrectly-encoded Unicode filenames as input, without needing to go\r\nthrough a step where UTF-8 is double-encoded as CP1252.\r\n\r\n* Change/delete prompt text is different in h\n[…]\n* Update SIL.Chorus.Mercurial from 3.0.3 to 6.5.1\r\n* Update GeneratedMercurial.wxs file\r\n* Update GeneratedMercurialExtensions.wxs file\r\n* Update CHANGELOG to mention Mercurial 6.5.1\r\n\r\n+semver: major",
"is_bot": false,
"headline": "Update Chorus to use Mercurial 6.5.1 and Python 3 (#329)",
"author_name": "Robin Munn",
"author_login": "rmunn",
"committed_at": "2023-12-14T16:27:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "74871cb48a472282142e60e19088702825af2692",
"body": "remove usage of BinaryFormatter",
"is_bot": false,
"headline": "Merge pull request #328 from sillsdev/remove-binary-formatter",
"author_name": "Kevin Hahn",
"author_login": "hahn-kev",
"committed_at": "2023-10-27T12:28:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a51e777d0bceb0c44d77494673b0967d2d824e95",
"body": "…factor Revision.cs to support serialization +semver:major",
"is_bot": false,
"headline": "remove usage of BinaryFormatter, transition to json serialization. Re…",
"author_name": "Kevin Hahn",
"author_login": "hahn-kev",
"committed_at": "2023-10-27T02:28:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dc230d52371a6ef475548eb5f26a42cf58d97371",
"body": "* Copy l10n.proj etc. from Palaso\r\n* Update packages and fix paths\r\n* Remove .tmx files, ignore .xlf files\r\n\r\n* Update a l10n ID (to match identical strings) and a comment\r\n\r\n* Include GitHub Actions workflows in the solution and rename `dotnet` GHA to `ci+cd` for clarity\r\n\r\n* Exclude a flaky test on the platform that takes more time\r\n\r\n* Remove some dead code",
"is_bot": false,
"headline": "Implement and Document Localization (#326)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2023-10-18T21:11:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c1b1e6cb12e770abb4ebc14107495bdc6f7a8a36",
"body": "This is necessary so that Flex Bridge can supply required cloning information and start a repo download without direct/manual user input. This order will come from Fieldworks when launched from CMD or protocol handler with the proper arguments.\n\nRequired for https://github.com/sillsdev/languageforge\n[…]\nne\n\n* Revert user/pass after API clone\n\nWe want to give callers the option to revert, e.g. if they know the user/pass is JWT, but default it to saving them.\n\nCo-Authored-By: Hasso <hasso_pape@sil.org>",
"is_bot": false,
"headline": "Add public StartClone() method (#325)",
"author_name": "josephmyers",
"author_login": "josephmyers",
"committed_at": "2023-10-13T14:33:12Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "84e6de03441f166579171d56d002914c7d0a0745",
"body": null,
"is_bot": false,
"headline": "Update changelog",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2023-09-13T09:29:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "271b640d6ba47b0b6d6dc2bed049d10934f7ee02",
"body": "* The files were still checked by the LargeFileFilter even though\n they were never included in the repo causing unneeded warnings",
"is_bot": false,
"headline": "Add ChorusStorage (the bundle cache) as an Excluded folder (LT-21408)",
"author_name": "Jason Naylor",
"author_login": "jasonleenaylor",
"committed_at": "2023-08-03T15:03:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "80bee2fd6f5e19bcd648d941c6969a5dbacf1cbf",
"body": "- Fix check for empty project name\r\n- Save Internet URL only if logged in\r\n- Autogenerate Binding Redirects\r\n\r\nFixes https://jira.sil.org/browse/LT-21462",
"is_bot": false,
"headline": "Prevent S&R to Internet w/o full URL (#322)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2023-07-12T22:12:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fdc43b0c9640068cd611a5940bdca76b121164b8",
"body": "* While our meta tags are the recommended format for html, we sometimes parse the content as xml, so they must be closed",
"is_bot": false,
"headline": "Generate html header with self closing <meta/> (#321)",
"author_name": "Jason Naylor",
"author_login": "jasonleenaylor",
"committed_at": "2023-07-10T22:29:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aee4a178827ce6b93653497b886cd19e67061e6b",
"body": "* This fixes Fieldworks bug https://jira.sil.org/browse/LT-21086",
"is_bot": false,
"headline": "Add meta tag so that utf8 is used in conflict details views",
"author_name": "Jason Naylor",
"author_login": "jasonleenaylor",
"committed_at": "2023-07-03T15:03:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "26016928416c8760bbffa831da63457cc643a069",
"body": null,
"is_bot": false,
"headline": "Add webm as audio-file-type so it gets 10MB limit",
"author_name": "Tim Haasdyk",
"author_login": "myieye",
"committed_at": "2023-06-21T14:11:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fa4a8c6a2e31600301a62d85cf351078d7d2e930",
"body": "+semver: minor",
"is_bot": false,
"headline": "Update PackageReferences to palaso version 12",
"author_name": "Jason Naylor",
"author_login": "jasonleenaylor",
"committed_at": "2023-06-14T14:51:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f0a6a6f3e0404e77df44d89de6a549afb019f5a",
"body": "to allow tests to run in .NET Framework (https://github.com/nunit/nunit-console/issues/1176)",
"is_bot": false,
"headline": "Update to NUnit3TestAdapter 4.4.2 (#317)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2023-03-07T17:07:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7504501e0dfb15ee733924960e19da1f674625f4",
"body": "* Escape credentials used in URLs\r\nSome users use their email addresses as their logins. When we overhauled the Get from Internet UX, we inadvertently stopped escaping credentials.\r\n* Allow users to type spaces in the password field\r\n* Properly encode spaces in passwords (not usernames)\r\nWe are not \n[…]\ns (some had been needlessly excluded)\r\n* Foolproof a test against developer machines set to use the QA server\r\n\r\nAddresses https://jira.sil.org/browse/LT-20157 and https://jira.sil.org/browse/LT-21275",
"is_bot": false,
"headline": "Allow special characters in credentials (LT-20157, LT-21275) (#316)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2023-03-02T19:14:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "954760857d7b96c81a1e2df3cf7d70d6b6db7d69",
"body": "* Build Chorus Hub Installer with GitHub Actions\r\n* Update a deprecated WiX attribute\r\n* clean up (completes https://github.com/sillsdev/chorus/issues/299)\r\n* check out help in a clean location",
"is_bot": false,
"headline": "Build Chorus Hub Installer with GHA (#314)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2022-12-12T16:10:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "33fd8cfbdfa13f4255f2a43ff7dabde5ef1a7f60",
"body": "When it is opened from the FieldWorks Welcome dialog (and perhaps other times),\r\nit is the only dialog, so the application disappears from the taskbar entirely.",
"is_bot": false,
"headline": "Show the Receive Project dialog in the taskbar (#315)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2022-12-09T20:22:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6196ffdab2519f9fb196effc0767d9d57ef2e872",
"body": "Bumps [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) to 13.0.2.\r\n<details>\r\n<summary>Release notes</summary>\r\n<p><em>Sourced from <a href=\"https://github.com/JamesNK/Newtonsoft.Json/releases\">Newtonsoft.Json's releases</a>.</em></p>\r\n<blockquote>\r\n<h2>13.0.2</h2>\r\n<ul>\r\n<li>New featur\n[…]\nK/Newtonsoft.Json/issues/2711\">#2711</a>)</li>\r\n<li>Additional commits viewable in <a href=\"https://github.com/JamesNK/Newtonsoft.Json/compare/12.0.3...13.0.2\">compare view</a></li>\r\n</ul>\r\n</details>",
"is_bot": false,
"headline": "Update to Newtonsoft.JSON to 13.0.2 (#312)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2022-12-08T22:47:59Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c4dd68da7138fbcbf5aa3a6201099949a80c6a2d",
"body": "* Publish NuGet package for ChorusMergeModule.msm\r\n\r\nAddresses https://github.com/sillsdev/chorus/issues/299",
"is_bot": false,
"headline": "Build ChorusMergeModule (#310)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2022-12-08T20:25:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "52c91118a39a0ceb1ad5754b5e72b03222aca279",
"body": "* Update the EnricoMi/publish-unit-test-result-action (Fixes warnings about save-state and set-output deprecation)\r\n* install python2 prior to test execution\r\n* Update Deprecated API Calls: Assembly.CodeBase is now Assembly.Location\r\n* Fix unit test failures\r\n* Clean up some using directives\r\n\r\nCo-authored-by: Jason Naylor <jason_naylor@sil.org>",
"is_bot": false,
"headline": "Fix Unit Tests (#307)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2022-12-05T16:20:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aa17de8b97f129b44689015643e04003d0a965da",
"body": null,
"is_bot": false,
"headline": "increase audio and picture file size limit to 10MB (#301)",
"author_name": "Christopher Hirt",
"author_login": "megahirt",
"committed_at": "2022-12-01T22:39:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "327aa7e32df8a00a37e3beb4f4f07ee716dea8a8",
"body": "* Move Custom URL to the top so it's out of the Language Forge flow but still adjacent to Login (username) and Password\r\n* Comment on the use of '.languageforge.org'\r\n\r\nAddresses https://jira.sil.org/browse/LT-21209",
"is_bot": false,
"headline": "Reorder Custom URL outside Language Forge workflow (#304)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2022-12-01T17:19:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "265024782bef447297626fbac383d8a7afdd26c4",
"body": "* Add Help button to Get from Internet Dialog\r\n* Adjust OK button position\r\n* Add &H to another Help (consistent with other usages)\r\n* Clarify that languageforge.org is Language Depot and update localization notes.\r\n\r\nPart of https://jira.sil.org/browse/LT-21209",
"is_bot": false,
"headline": "Clarify that languageforge.org is Language Depot (#305)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2022-11-30T14:10:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "30b1a9b739e0775775705a4b055bac9d40541290",
"body": "* Always show the log in URL (so users know into where they're logging)\r\n* Hide the folder name (and download button) control until the user has logged in or specified Custom URL\r\n* Revert the log in button's text to \"&Log in\"\r\n* Move the Log in button above the Custom URL control so it's closer to the username and password\r\n* Remove the obsolete TranslationMemory.Tmx\r\n\r\nThis addresses https://jira.sil.org/browse/LT-21209",
"is_bot": false,
"headline": "Improve Get from Internet UX (attempt) (#302)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2022-11-30T09:57:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "12ec329637edc123532ab2415c9f4e0d2e8b725d",
"body": "And don't fail fast",
"is_bot": false,
"headline": "Upgrade to Palaso 11 and Mercurial 3.0.3.6 (#300)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2022-10-13T15:13:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7d1b3e3ff1263a48741f82babe3a1215aa0331aa",
"body": "LibChorus now also runs its suite on .NET6. The bug was preventing LfMerge from a successful S/R in LanguageForge. There is another issue (in LfMerge) that is already fixed there. With these two fixes, LfMerge successfully uses the .NET6 version of ChorusMerge to resolve merge issues. Below are the \n[…]\nx change\r\n\r\nIt's certainly possible this actually specific to Mono, but I think it in fact applies to Linux as a whole, and the previous was a slight oversight. We'll see what the build server thinks.",
"is_bot": false,
"headline": ".hgrc points to chorusmerge on Linux (bugfix) (#297)",
"author_name": "josephmyers",
"author_login": "josephmyers",
"committed_at": "2022-09-22T07:16:18Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9549415e9daa32031ca6870d11fa024335d2a2e4",
"body": "LGTM doesn't support .NET 6 yet, so we're always getting failed\nchecks. This change modifies things so that LGTM tries to analyze\nthe code without building it first, which is less accurate but\nat least doesn't fail the check.",
"is_bot": false,
"headline": "Disable LGTM checks",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2022-09-14T17:41:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c78ae74674304430e7addd225cd07919ee6b7ef1",
"body": "`ExternalFileModification_NotifiesIndices_ButSaveDoesNot` doesn't work\nreliably when run on GHA. This change ignores that test (or rather the\n`SkipOnBuildServer` test category) when running on Windows on GHA.",
"is_bot": false,
"headline": "Skip flaky test on Windows",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2022-09-14T17:41:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0afd696006e23e165b8b6ac202ab674e7c4fda3c",
"body": null,
"is_bot": false,
"headline": "Ignore tests that require UI when testing with GHA",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2022-09-14T17:41:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b5df687556c91d0abec6922923573266401301dc",
"body": "According to the docs [^1] it is recommended to add\nMicrosoft.NET.Test.Sdk to all projects so that the tests can be\ndiscovered in VS.\n\nAlso add NUnit3TestAdapter to all test projects which is now\nrequired [^2] and remove NUnit from Tests-ChorusPlugin where it's\nnot used.\n\n[^1]: https://docs.nunit.org/articles/vs-test-adapter/Adapter-Installation.html\n[^2]: https://www.nuget.org/packages/NUnit3TestAdapter/4.2.1#readme-body-tab",
"is_bot": false,
"headline": "Add Microsoft.NET.Test.Sdk to test projects",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2022-09-14T17:41:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8a713080a92e045e9e90e9840f7a37d4926f075a",
"body": "ExternalFileModification_NotifiesIndices_ButSaveDoesNot() failed\nwith GitHub Actions. This change increases the total time we are\nwilling to wait to 10s instead of 30ms.",
"is_bot": false,
"headline": "Increase retries on flaky test",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2022-09-13T14:28:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "39809613deea39c52f25f4e423960cc16e334efe",
"body": "This is necessary to trigger a build when pushing a git tag which\nthen will create non-prerelease packages.",
"is_bot": false,
"headline": "Run GHA on tag push",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2022-09-13T14:28:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e7ab5bcca7ae571374eb9c8d742a1975aec453f3",
"body": "Removing `build/` subdirectory since we're building with GHA\nnow. `TestInstallerBuild.bat` (and the targets it calls in\n`Chorus.proj`) might still be relevant, but are terribly outdated\nso that it no longer works.",
"is_bot": false,
"headline": "Remove `build/` subdirectory",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2022-08-29T22:22:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "be02ce90d03a0d41c08a9b5ee1b5c515ff4a3bb3",
"body": "Standardize DateTime formats (LT-20698), Clean Up",
"is_bot": false,
"headline": "Merge pull request #289 from sillsdev/fix/dateFormat",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2022-08-29T17:11:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "83c5e355203ae01df6b244383030f3bc55a1a592",
"body": null,
"is_bot": false,
"headline": "Merge branch 'master' into fix/dateFormat",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2022-08-29T16:01:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "897cc4856e3457b2de7f099e29fa604ea43470fb",
"body": null,
"is_bot": false,
"headline": "Remove outdated app.config",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2022-08-29T16:01:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6523ea2ce1709c9ff3f0d5ecda6116f6aebc0364",
"body": null,
"is_bot": false,
"headline": "Merge branch 'master' into fix/dateFormat",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2022-08-29T15:27:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "45c506efc9b816f743a74d5c737ca7b1b5357878",
"body": "This change updates `CHANGELOG.md` - we never released a v5.0.0\ndespite the entry in the changelog, and adjust the wording to\nreality since the non-existing release.\n\nAlso up-ing the minor version number because the previous\ncommit added support for netstandard 2.0/.net 6.\n\n+semver:minor",
"is_bot": false,
"headline": "Update changelog and readme",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2022-08-29T15:24:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ed714768295d759819fe27940513ac079bbd3ff5",
"body": "Deprecate LiftTimeFormatWithTimeZone\n\n+semver:minor",
"is_bot": false,
"headline": "Prefer Palaso's LiftDateTimeFormat",
"author_name": "Hasso",
"author_login": "papeh",
"committed_at": "2022-08-29T14:54:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c2deb29dad6da61aae03f0c91512ee9c996aeecb",
"body": null,
"is_bot": false,
"headline": "Show test results",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2022-08-26T11:15:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "283b77439d8eee69da67bfbaa19e0eef734cf1fe",
"body": "Inspired by https://jira.sil.org/browse/LT-20698",
"is_bot": false,
"headline": "Standardize DateTime formats (LT-20698)",
"author_name": "Hasso",
"author_login": "papeh",
"committed_at": "2022-08-25T18:14:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2948734b05024ba4281d15e8c4e620606168320b",
"body": "Added .NET Standard target to LibChorus and .NET6 to ChorusMerge.\r\n\r\nReferenced the appropriate libpalaso .NET Standard DLL's, which drop support for USB operations (RepositoryAddress.cs). For the .NET Standard version, those operations now return null. These methods were already returning null in o\n[…]\nrtedException, etc.\r\n\r\nUpgraded Autofac to v4.\r\n\r\nReplaced AppVeyor with GHA.\r\n\r\nCo-authored-by: Robin Munn <rmunn@pobox.com>\r\nCo-authored-by: Eberhard Beilharz <ermshiperete@users.noreply.github.com>",
"is_bot": false,
"headline": "Added .NET Standard target to LibChorus and .NET6 to ChorusMerge. (#279)",
"author_name": "josephmyers",
"author_login": "josephmyers",
"committed_at": "2022-08-25T07:44:02Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "552108a6c4479ba0e22525cf1a801de750dbe543",
"body": "* Update Mercurial to the version of SIL.Chorus.Mercurial package that explicitly uses Python 2.\r\n* Use SharpZipLib instead of deprecated ICSharpCode.SharpZipLib\r\n* Update GitVersion and SourceLink packages",
"is_bot": false,
"headline": "Update dependencies (#288)",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2022-08-09T21:07:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bc62c4a9a801369c634ee571c93b02b46dd59ca3",
"body": "* In https://jira.sil.org/browse/LT-20807 the problem seems to come up\n when multiple processes are trying to write the file\n\n+semver:minor",
"is_bot": false,
"headline": "Fix file locking problem on Chorus Notes (LT-20807)",
"author_name": "Jason Naylor",
"author_login": "jasonleenaylor",
"committed_at": "2022-08-04T15:47:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6f2d87ee06192da3cb8c6eca31045f1cbdb775ca",
"body": "If a ReflectionTypeLoadException is thrown by a unit test, include details in the test report.",
"is_bot": false,
"headline": "More helpful message for unit test failure (#285)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2022-08-03T14:21:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a6377abc3ca6991774c3c8bb552cd111fd946bab",
"body": null,
"is_bot": false,
"headline": "Switch two problematic ldml elements to Atomic",
"author_name": "Jason Naylor",
"author_login": "jasonleenaylor",
"committed_at": "2022-07-28T15:02:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "de093b37567e7789465918f8df101cb29671f8fe",
"body": null,
"is_bot": false,
"headline": "Update NUnit and icu.net to the latest stable",
"author_name": "Hasso",
"author_login": "papeh",
"committed_at": "2022-07-25T15:45:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "44bda12853d807f6a1aab103a505bb5dd051d40d",
"body": null,
"is_bot": false,
"headline": "Upgrade to Palaso 10.* and Newtonsoft.Json 13.0.1",
"author_name": "Hasso",
"author_login": "papeh",
"committed_at": "2022-07-25T15:45:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3079d1cf7b5ca411b725f4042d41d5d3bd7f4f7e",
"body": "LT-20867: Cleanup Flexbridge login dialog",
"is_bot": false,
"headline": "Merge pull request #281 from sillsdev/feature/LT-20867",
"author_name": "Mark Kidder",
"author_login": "mark-sil",
"committed_at": "2022-06-14T20:06:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "206ea9fa7491b9f401805b41503e462265eddf97",
"body": "1. Change the ‘Log in’ button to “Log in to continue’.\n2. Disable the ‘Log in to continue’ button when logged in and no\n edits have been made to either the username or password fields.\n3. Changed the Bandwidth and Project Id combo boxes so they are not\n clipped.\n4. Change the Download button so it remains in the same relative\n position when the dialog is resized.",
"is_bot": false,
"headline": "LT-20867: Cleanup Flexbridge login dialog",
"author_name": "Mark Kidder",
"author_login": "mark-sil",
"committed_at": "2022-06-14T19:43:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8ab57109ac35c3de8de2697e01cb6bb6918b7ab5",
"body": "1. Change the ‘Log in’ button to “Log in to continue’.\n2. Disable the ‘Log in to continue’ button when logged in and no\n edits have been made to either the username or password fields.\n3. Changed the Bandwidth and Project Id combo boxes so they are not\n clipped.\n4. Change the Download button so it remains in the same relative\n position when the dialog is resized.",
"is_bot": false,
"headline": "LT-20867: Cleanup Flexbridge login dialog",
"author_name": "Mark Kidder",
"author_login": "mark-sil",
"committed_at": "2022-06-14T16:10:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e7907605b28d8c7c02b3e2c7469cc7adcbd94c2a",
"body": "LT-20999: Move the location of the local Chorus cache",
"is_bot": false,
"headline": "Merge pull request #280 from sillsdev/feature/LT-20999",
"author_name": "Mark Kidder",
"author_login": "mark-sil",
"committed_at": "2022-05-09T17:48:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "141ce9dd7eea1b4c0e0b5c6585613af381581491",
"body": "Move the location of the local Chorus cache from AppData to the\nspecific FLEX or WeSay project. The problem we were seeing was when\nthe cache in AppData was being used by two applications; in this\ncase FLEX and WeSay. (Note that the same problem would exist if two\nlocal WeSay projects or two local \n[…]\nct information. This\nresults in one cache per application/project, so the cache should\nnever have more up to date chorus data than the local FLEX or\nWeSay project.\nhttps://jira.sil.org/browse/LT-20999",
"is_bot": false,
"headline": "LT-20999: Move the location of the local Chorus cache",
"author_name": "Mark Kidder",
"author_login": "mark-sil",
"committed_at": "2022-04-29T01:39:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2b9cfef5c47712b49fb062231b4ae90cfebf479f",
"body": "Move the location of the local Chorus cache from AppData to the\nspecific FLEX or WeSay project. The problem we were seeing was when\nthe cache in AppData was being used by two applications; in this\ncase FLEX and WeSay. (Note that the same problem would exist if two\nlocal WeSay projects or two local \n[…]\nct folder, along with the other project information. This\nresults in one cache per application/project, so the cache should\nnever have more up to date chorus data than the local FLEX or\nWeSay project.",
"is_bot": false,
"headline": "LT-20999: Move the location of the local Chorus cache",
"author_name": "Mark Kidder",
"author_login": "mark-sil",
"committed_at": "2022-04-28T18:38:13Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4600f3979ff5403f20f94795cef7bb77249b1ba6",
"body": "Also remove unnecessary direct L10NSharp references (source through Palaso dependency).\n\nPart of https://jira.sil.org/browse/LT-20973 and https://jira.sil.org/browse/LT-20978",
"is_bot": false,
"headline": "Update L10NSharp to match what Palaso uses (#276)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2022-03-01T19:48:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0c5190bfdfb06e01daf4fe7b87540350711914f8",
"body": "* Log any caught exceptions\n* Log an informative message if the URL is malformed or the password contains reserved characters",
"is_bot": false,
"headline": "Improve logging when testing internet repo connections (#275)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2022-02-14T16:50:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9cf88cbc7b625eec8dd6bd7af8bba82c137e7897",
"body": "Add static bool ServerSettingsModel.IsPrivateServer; if set to true, will use the private LanguageForge server.\r\n\r\n- Show the server URL label next to the Log in button when using the private or QA server\r\n- Try to list private projects, but continue with a warning on errors\r\n- TODO (server side): i\n[…]\nntials and use the main interface rather than entering a \"custom\" URL\r\n- Addresses https://jira.sil.org/browse/LT-20567 and https://jira.sil.org/browse/LT-20571\r\n\r\n+semver: minor\r\n\r\n- Update changelog",
"is_bot": false,
"headline": "[API] Add public property to use private LanguageForge (#273)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2022-01-11T17:23:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1b0d009a58aa718bae5185dd9e5dc0eff6af83f9",
"body": null,
"is_bot": false,
"headline": "Add instructions to register to use the test server (#270)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2021-12-21T19:27:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "62e91ca61714ca6897ee3f871805c103d2b5dad2",
"body": "some users have problems with their USB drive (hardware?) such that GetDrives throws an exception which if not caught, results in a fatal exception for Chorus",
"is_bot": false,
"headline": "#261: Ignore USB GetDrives crash (#272)",
"author_name": "bobeaton",
"author_login": "bobeaton",
"committed_at": "2021-11-01T16:57:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ce80374ec6f35ae9fe1b5163a5441111bcb5fd63",
"body": "Changed the size of the Send/Receive Settings dialog so some\ncontrols are not cut off. Also populate the ‘Project Id’ combo\nbox if there is only one valid option.",
"is_bot": false,
"headline": "LT-20815: Change Send/Receive Settings dialog size",
"author_name": "Mark Kidder",
"author_login": "mark-sil",
"committed_at": "2021-10-27T14:09:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6779090ba4c603e6aa8b75188e14bde59724d9b2",
"body": "Because only release artifacts are available for Palaso, its Debug.Assert call does nothing, even though we register a custom TraceListener.",
"is_bot": false,
"headline": "Verify settings use CrossPlatformSettingsProvider (#267)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2021-10-21T13:51:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "38dfb543d715ac517543598228ed7b05c9069d64",
"body": "Not quite sure where they originated. I downloaded them from\nhttps://build.palaso.org/buildConfiguration/FLExBridgeDevelopWin32InstallerSansPublish/197613?buildTab=artifacts#%2FBuildMaster%2Fobjects%2FFLExBridge%2Flocalizations\nand wanted to check them in so they're easier to find.",
"is_bot": false,
"headline": "Check in old localizations",
"author_name": "Hasso",
"author_login": "papeh",
"committed_at": "2021-10-06T22:40:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5d0a443f3d52670a8ec4336adde4df4815c4131a",
"body": "PR #256 moved common properties Directory.Build.props but missed\n`Chorus.csproj`.",
"is_bot": false,
"headline": "Use common props file in Chorus.csproj",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2021-10-01T16:47:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2cc7f544e5be6affc63a02c43c776d20744e026f",
"body": "This makes settings more robust during upgrades.\r\nThis addresses https://jira.sil.org/browse/LT-20801",
"is_bot": false,
"headline": "Use CrossPlatformSettingsProvider (#265)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2021-09-16T14:41:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6dec2f4f0273200377135660c098b39078d8d3a1",
"body": "+semver:major",
"is_bot": false,
"headline": "Update to the latest version of palaso libraries",
"author_name": "Jason Naylor",
"author_login": "jasonleenaylor",
"committed_at": "2021-09-13T13:59:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "200187c779466ceb23c556d08eaa6717fbd9752b",
"body": "and rename commandToLog to clarify its purpose.",
"is_bot": false,
"headline": "Authenticate using the real password (#262)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2021-09-09T13:19:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ea5d3715ec7577d1afec5c4a09d61cbee1934be6",
"body": "* Catch exception trying to read the LastWriteTime from\n the ChorusNotes file and retry\n* Ignore failures after the retry instead of crashing\n* Fixes FB issue LT-20685",
"is_bot": false,
"headline": "Address ChorusNotes UnauthorizedAccess exception (#260)",
"author_name": "Jason Naylor",
"author_login": "jasonleenaylor",
"committed_at": "2021-09-02T21:07:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "49b9f35a97ad5399325dc6c870dd9d02b9fd0cc1",
"body": null,
"is_bot": false,
"headline": "Require newer L10nSharp (#259)",
"author_name": "papeh",
"author_login": "papeh",
"committed_at": "2021-08-20T18:48:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a95a48bb3d7651e27137c15126d57313e88aae4d",
"body": "* And a few refactorings",
"is_bot": false,
"headline": "Move common properties to Directory.Build.props (#256)",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2021-08-20T15:03:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e2ba2df50bfbb04017e24ddeb5aac4037d9e1d65",
"body": "The Send/Receive code does a lot of `hg log -rREV --template \"{node}\"`\r\ncalls in order to learn the long hash of a revision number. This happens\r\nvery often during a Send/Receive process: the Chorus logs are full of\r\n`hg log -r0` operations. Thing is, every single call to `hg log` incurs\r\na cost as \n[…]\nng backwards from tip\", i.e.\r\nrunning `hg log -r-1 --template \"{node}\" gets the long hash of the tip\r\nrevision. We therefore should not cache negative revision numbers as\r\nthose are subject to change.",
"is_bot": false,
"headline": "Speed up Send/Receive operations significantly (#258)",
"author_name": "Robin Munn",
"author_login": "rmunn",
"committed_at": "2021-08-20T12:31:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a3efadb4c281b5c3d6fe62f35bd67390aa504083",
"body": "Building the ChorusHubInstaller should not depend on running the\nunit tests but instead on the compile (build) step.",
"is_bot": false,
"headline": "Fix ChorusHubInstaller build",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2021-05-18T07:16:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "df1efd6403f286f8b3e2bd4d19d1ccf25009ff5e",
"body": "Merge feature/nuget into master",
"is_bot": false,
"headline": "Merge pull request #254 from ermshiperete/master",
"author_name": "Eberhard Beilharz",
"author_login": "ermshiperete",
"committed_at": "2021-05-17T14:53:03Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 4,
"commits_last_year": 9,
"latest_release_at": "2023-09-13T09:30:06Z",
"latest_release_tag": "v5.1.0",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 6,
"days_since_latest_release": 1045,
"mean_days_between_releases": 1031.2
},
"community": {
"has_readme": true,
"has_license": false,
"has_description": true,
"has_contributing": false,
"health_percentage": 37,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "SIL.Chorus.App",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "nuget",
"matches_repo": true,
"registry_url": "https://www.nuget.org/packages/SIL.Chorus.App",
"is_deprecated": false,
"latest_version": "5.1.0",
"repository_url": "https://github.com/sillsdev/chorus",
"versions_count": 3,
"total_downloads": 82689,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2023-06-13T18:29:26.553000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 1136
},
{
"name": "SIL.Chorus.ChorusHub",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "nuget",
"matches_repo": true,
"registry_url": "https://www.nuget.org/packages/SIL.Chorus.ChorusHub",
"is_deprecated": false,
"latest_version": "5.1.0",
"repository_url": "https://github.com/sillsdev/chorus",
"versions_count": 3,
"total_downloads": 72804,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2023-06-13T18:29:27.143000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 1136
},
{
"name": "SIL.Chorus.LibChorus",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "nuget",
"matches_repo": true,
"registry_url": "https://www.nuget.org/packages/SIL.Chorus.LibChorus",
"is_deprecated": false,
"latest_version": "5.1.0",
"repository_url": "https://github.com/sillsdev/chorus",
"versions_count": 3,
"total_downloads": 79612,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2023-06-13T18:29:28.687000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 1136
},
{
"name": "SIL.Chorus.ChorusMerge",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "nuget",
"matches_repo": true,
"registry_url": "https://www.nuget.org/packages/SIL.Chorus.ChorusMerge",
"is_deprecated": false,
"latest_version": "5.1.0",
"repository_url": "https://github.com/sillsdev/chorus",
"versions_count": 3,
"total_downloads": 65568,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2023-06-13T18:29:28.140000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 1136
},
{
"name": "SIL.Chorus.ChorusHubApp",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "nuget",
"matches_repo": true,
"registry_url": "https://www.nuget.org/packages/SIL.Chorus.ChorusHubApp",
"is_deprecated": false,
"latest_version": "5.1.0",
"repository_url": "https://github.com/sillsdev/chorus",
"versions_count": 3,
"total_downloads": 72988,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2023-06-13T18:29:27.660000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 1136
},
{
"name": "SIL.Chorus.LibChorus.TestUtilities",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "nuget",
"matches_repo": true,
"registry_url": "https://www.nuget.org/packages/SIL.Chorus.LibChorus.TestUtilities",
"is_deprecated": false,
"latest_version": "5.1.0",
"repository_url": "https://github.com/sillsdev/chorus",
"versions_count": 3,
"total_downloads": 33690,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2023-06-13T18:29:29.260000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 1136
}
]
},
"popularity": {
"forks": 26,
"stars": 5,
"watchers": 11,
"fork_history": {
"days": [
{
"date": "2014-04-15",
"count": 1
},
{
"date": "2014-05-12",
"count": 1
},
{
"date": "2014-06-06",
"count": 1
},
{
"date": "2014-08-18",
"count": 1
},
{
"date": "2014-08-26",
"count": 1
},
{
"date": "2014-09-02",
"count": 1
},
{
"date": "2014-11-03",
"count": 1
},
{
"date": "2014-12-12",
"count": 1
},
{
"date": "2015-04-29",
"count": 1
},
{
"date": "2016-07-29",
"count": 1
},
{
"date": "2016-10-17",
"count": 1
},
{
"date": "2017-05-02",
"count": 1
},
{
"date": "2017-06-02",
"count": 1
},
{
"date": "2017-06-07",
"count": 1
},
{
"date": "2017-08-11",
"count": 1
},
{
"date": "2017-09-21",
"count": 1
},
{
"date": "2017-11-01",
"count": 1
},
{
"date": "2018-12-13",
"count": 1
},
{
"date": "2019-10-17",
"count": 1
},
{
"date": "2019-10-24",
"count": 1
},
{
"date": "2020-02-27",
"count": 1
},
{
"date": "2020-03-17",
"count": 1
},
{
"date": "2022-04-25",
"count": 1
},
{
"date": "2022-12-08",
"count": 1
},
{
"date": "2023-06-20",
"count": 1
},
{
"date": "2024-06-16",
"count": 1
}
],
"complete": true,
"collected": 26,
"total_forks": 26
},
"star_history": null,
"open_issues_and_prs": 20
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"src/Chorus.Tests/Chorus.Tests.csproj",
"src/Chorus/Chorus.csproj",
"src/ChorusHub/ChorusHub.csproj",
"src/ChorusHubApp/ChorusHubApp.csproj",
"src/ChorusHubTests/ChorusHubTests.csproj",
"src/ChorusMerge.Tests/ChorusMerge.Tests.csproj",
"src/ChorusMerge/ChorusMerge.csproj",
"src/LibChorus.TestUtilities/LibChorus.TestUtilities.csproj",
"src/LibChorus/LibChorus.csproj",
"src/LibChorusTests/LibChorus.Tests.csproj",
"src/SampleApp/SampleApp.csproj",
"src/Tests-ChorusPlugin/Tests-ChorusPlugin.csproj"
],
"largest_source_bytes": 78425,
"source_files_sampled": 438,
"oversized_source_files": 1,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 21,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 7,
"direct_affected_count": 0
},
"ecosystems": [],
"dependencies": [
{
"name": "GitVersion.MsBuild",
"manifest": "src/Chorus.Tests/Chorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "5.10.3"
},
{
"name": "Microsoft.NET.Test.Sdk",
"manifest": "src/Chorus.Tests/Chorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "17.14.1"
},
{
"name": "Microsoft.SourceLink.GitHub",
"manifest": "src/Chorus.Tests/Chorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "1.1.1"
},
{
"name": "NUnit",
"manifest": "src/Chorus.Tests/Chorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "3.13.3"
},
{
"name": "NUnit3TestAdapter",
"manifest": "src/Chorus.Tests/Chorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "4.3.2"
},
{
"name": "GitVersion.MsBuild",
"manifest": "src/Chorus/Chorus.csproj",
"ecosystem": "nuget",
"version_constraint": "5.10.3"
},
{
"name": "Microsoft.SourceLink.GitHub",
"manifest": "src/Chorus/Chorus.csproj",
"ecosystem": "nuget",
"version_constraint": "1.1.1"
},
{
"name": "SIL.ReleaseTasks",
"manifest": "src/Chorus/Chorus.csproj",
"ecosystem": "nuget",
"version_constraint": "3.0.0"
},
{
"name": "SIL.Windows.Forms",
"manifest": "src/Chorus/Chorus.csproj",
"ecosystem": "nuget",
"version_constraint": "18.0.0-*"
},
{
"name": "Vulcan.Uczniowie.HelpProvider",
"manifest": "src/Chorus/Chorus.csproj",
"ecosystem": "nuget",
"version_constraint": "1.0.16"
},
{
"name": "GitVersion.MsBuild",
"manifest": "src/ChorusHub/ChorusHub.csproj",
"ecosystem": "nuget",
"version_constraint": "5.10.3"
},
{
"name": "Microsoft.SourceLink.GitHub",
"manifest": "src/ChorusHub/ChorusHub.csproj",
"ecosystem": "nuget",
"version_constraint": "1.1.1"
},
{
"name": "SIL.ReleaseTasks",
"manifest": "src/ChorusHub/ChorusHub.csproj",
"ecosystem": "nuget",
"version_constraint": "3.0.0"
},
{
"name": "SIL.BuildTasks",
"manifest": "src/ChorusHub/ChorusHub.csproj",
"ecosystem": "nuget",
"version_constraint": "3.0.0"
},
{
"name": "GitVersion.MsBuild",
"manifest": "src/ChorusHubApp/ChorusHubApp.csproj",
"ecosystem": "nuget",
"version_constraint": "5.10.3"
},
{
"name": "Microsoft.SourceLink.GitHub",
"manifest": "src/ChorusHubApp/ChorusHubApp.csproj",
"ecosystem": "nuget",
"version_constraint": "1.1.1"
},
{
"name": "SIL.ReleaseTasks",
"manifest": "src/ChorusHubApp/ChorusHubApp.csproj",
"ecosystem": "nuget",
"version_constraint": "3.0.0"
},
{
"name": "SIL.Windows.Forms",
"manifest": "src/ChorusHubApp/ChorusHubApp.csproj",
"ecosystem": "nuget",
"version_constraint": "18.0.0-*"
},
{
"name": "Vulcan.Uczniowie.HelpProvider",
"manifest": "src/ChorusHubApp/ChorusHubApp.csproj",
"ecosystem": "nuget",
"version_constraint": "1.0.16"
},
{
"name": "GitVersion.MsBuild",
"manifest": "src/ChorusHubTests/ChorusHubTests.csproj",
"ecosystem": "nuget",
"version_constraint": "5.10.3"
},
{
"name": "Microsoft.NET.Test.Sdk",
"manifest": "src/ChorusHubTests/ChorusHubTests.csproj",
"ecosystem": "nuget",
"version_constraint": "17.14.1"
},
{
"name": "Microsoft.SourceLink.GitHub",
"manifest": "src/ChorusHubTests/ChorusHubTests.csproj",
"ecosystem": "nuget",
"version_constraint": "1.1.1"
},
{
"name": "NUnit",
"manifest": "src/ChorusHubTests/ChorusHubTests.csproj",
"ecosystem": "nuget",
"version_constraint": "3.13.3"
},
{
"name": "NUnit3TestAdapter",
"manifest": "src/ChorusHubTests/ChorusHubTests.csproj",
"ecosystem": "nuget",
"version_constraint": "4.3.2"
},
{
"name": "GitVersion.MsBuild",
"manifest": "src/ChorusMerge.Tests/ChorusMerge.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "5.10.3"
},
{
"name": "Microsoft.NET.Test.Sdk",
"manifest": "src/ChorusMerge.Tests/ChorusMerge.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "17.14.1"
},
{
"name": "Microsoft.SourceLink.GitHub",
"manifest": "src/ChorusMerge.Tests/ChorusMerge.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "1.1.1"
},
{
"name": "Newtonsoft.Json",
"manifest": "src/ChorusMerge.Tests/ChorusMerge.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "13.0.4"
},
{
"name": "NUnit",
"manifest": "src/ChorusMerge.Tests/ChorusMerge.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "3.13.3"
},
{
"name": "NUnit3TestAdapter",
"manifest": "src/ChorusMerge.Tests/ChorusMerge.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "4.3.2"
},
{
"name": "SIL.TestUtilities",
"manifest": "src/ChorusMerge.Tests/ChorusMerge.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "18.0.0-*"
},
{
"name": "GitVersion.MsBuild",
"manifest": "src/ChorusMerge/ChorusMerge.csproj",
"ecosystem": "nuget",
"version_constraint": "5.10.3"
},
{
"name": "Microsoft.SourceLink.GitHub",
"manifest": "src/ChorusMerge/ChorusMerge.csproj",
"ecosystem": "nuget",
"version_constraint": "1.1.1"
},
{
"name": "SIL.ReleaseTasks",
"manifest": "src/ChorusMerge/ChorusMerge.csproj",
"ecosystem": "nuget",
"version_constraint": "3.0.0"
},
{
"name": "System.Runtime.InteropServices.RuntimeInformation",
"manifest": "src/ChorusMerge/ChorusMerge.csproj",
"ecosystem": "nuget",
"version_constraint": "4.3.0"
},
{
"name": "System.Text.Encoding.CodePages",
"manifest": "src/ChorusMerge/ChorusMerge.csproj",
"ecosystem": "nuget",
"version_constraint": "4.0.1"
},
{
"name": "GitVersion.MsBuild",
"manifest": "src/LibChorus.TestUtilities/LibChorus.TestUtilities.csproj",
"ecosystem": "nuget",
"version_constraint": "5.10.3"
},
{
"name": "Microsoft.SourceLink.GitHub",
"manifest": "src/LibChorus.TestUtilities/LibChorus.TestUtilities.csproj",
"ecosystem": "nuget",
"version_constraint": "1.1.1"
},
{
"name": "NUnit",
"manifest": "src/LibChorus.TestUtilities/LibChorus.TestUtilities.csproj",
"ecosystem": "nuget",
"version_constraint": "3.13.3"
},
{
"name": "SIL.Core",
"manifest": "src/LibChorus.TestUtilities/LibChorus.TestUtilities.csproj",
"ecosystem": "nuget",
"version_constraint": "18.0.0-*"
},
{
"name": "SIL.ReleaseTasks",
"manifest": "src/LibChorus.TestUtilities/LibChorus.TestUtilities.csproj",
"ecosystem": "nuget",
"version_constraint": "3.0.0"
},
{
"name": "SIL.TestUtilities",
"manifest": "src/LibChorus.TestUtilities/LibChorus.TestUtilities.csproj",
"ecosystem": "nuget",
"version_constraint": "18.0.0-*"
},
{
"name": "Autofac",
"manifest": "src/LibChorus/LibChorus.csproj",
"ecosystem": "nuget",
"version_constraint": "4.9.4"
},
{
"name": "GitVersion.MsBuild",
"manifest": "src/LibChorus/LibChorus.csproj",
"ecosystem": "nuget",
"version_constraint": "5.10.3"
},
{
"name": "icu.net",
"manifest": "src/LibChorus/LibChorus.csproj",
"ecosystem": "nuget",
"version_constraint": "3.0.1"
},
{
"name": "Icu4c.Win.Min",
"manifest": "src/LibChorus/LibChorus.csproj",
"ecosystem": "nuget",
"version_constraint": "59.1.7"
},
{
"name": "L10NSharp",
"manifest": "src/LibChorus/LibChorus.csproj",
"ecosystem": "nuget",
"version_constraint": "10.0.0-*"
},
{
"name": "Microsoft.SourceLink.GitHub",
"manifest": "src/LibChorus/LibChorus.csproj",
"ecosystem": "nuget",
"version_constraint": "1.1.1"
},
{
"name": "NDesk.DBus",
"manifest": "src/LibChorus/LibChorus.csproj",
"ecosystem": "nuget",
"version_constraint": "0.15.0"
},
{
"name": "SIL.Chorus.Mercurial",
"manifest": "src/LibChorus/LibChorus.csproj",
"ecosystem": "nuget",
"version_constraint": "6.5.*"
},
{
"name": "SIL.Core",
"manifest": "src/LibChorus/LibChorus.csproj",
"ecosystem": "nuget",
"version_constraint": "18.0.0-*"
},
{
"name": "SIL.Lift",
"manifest": "src/LibChorus/LibChorus.csproj",
"ecosystem": "nuget",
"version_constraint": "18.0.0-*"
},
{
"name": "SIL.ReleaseTasks",
"manifest": "src/LibChorus/LibChorus.csproj",
"ecosystem": "nuget",
"version_constraint": "3.0.0"
},
{
"name": "System.ComponentModel.Composition",
"manifest": "src/LibChorus/LibChorus.csproj",
"ecosystem": "nuget",
"version_constraint": "6.0.0"
},
{
"name": "System.Diagnostics.DiagnosticSource",
"manifest": "src/LibChorus/LibChorus.csproj",
"ecosystem": "nuget",
"version_constraint": "9.0.2"
},
{
"name": "System.Resources.Extensions",
"manifest": "src/LibChorus/LibChorus.csproj",
"ecosystem": "nuget",
"version_constraint": "6.0.0"
},
{
"name": "System.ServiceModel.Primitives",
"manifest": "src/LibChorus/LibChorus.csproj",
"ecosystem": "nuget",
"version_constraint": "4.8.1"
},
{
"name": "GitVersion.MsBuild",
"manifest": "src/LibChorusTests/LibChorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "5.10.3"
},
{
"name": "Microsoft.NET.Test.Sdk",
"manifest": "src/LibChorusTests/LibChorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "17.14.1"
},
{
"name": "Microsoft.SourceLink.GitHub",
"manifest": "src/LibChorusTests/LibChorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "1.1.1"
},
{
"name": "Newtonsoft.Json",
"manifest": "src/LibChorusTests/LibChorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "13.0.4"
},
{
"name": "NUnit",
"manifest": "src/LibChorusTests/LibChorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "3.13.3"
},
{
"name": "NUnit3TestAdapter",
"manifest": "src/LibChorusTests/LibChorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "4.3.2"
},
{
"name": "SharpZipLib",
"manifest": "src/LibChorusTests/LibChorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "1.3.3"
},
{
"name": "SIL.Core",
"manifest": "src/LibChorusTests/LibChorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "18.0.0-*"
},
{
"name": "SIL.TestUtilities",
"manifest": "src/LibChorusTests/LibChorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "18.0.0-*"
},
{
"name": "SIL.WritingSystems.Tests",
"manifest": "src/LibChorusTests/LibChorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "18.0.0-*"
},
{
"name": "System.IO.FileSystem.Primitives",
"manifest": "src/LibChorusTests/LibChorus.Tests.csproj",
"ecosystem": "nuget",
"version_constraint": "4.3.0"
},
{
"name": "GitVersion.MsBuild",
"manifest": "src/SampleApp/SampleApp.csproj",
"ecosystem": "nuget",
"version_constraint": "5.10.3"
},
{
"name": "Microsoft.SourceLink.GitHub",
"manifest": "src/SampleApp/SampleApp.csproj",
"ecosystem": "nuget",
"version_constraint": "1.1.1"
},
{
"name": "SharpZipLib",
"manifest": "src/SampleApp/SampleApp.csproj",
"ecosystem": "nuget",
"version_constraint": "1.3.3"
},
{
"name": "GitVersion.MsBuild",
"manifest": "src/Tests-ChorusPlugin/Tests-ChorusPlugin.csproj",
"ecosystem": "nuget",
"version_constraint": "5.10.3"
},
{
"name": "Microsoft.SourceLink.GitHub",
"manifest": "src/Tests-ChorusPlugin/Tests-ChorusPlugin.csproj",
"ecosystem": "nuget",
"version_constraint": "1.1.1"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "Autofac",
"direct": true,
"version": "4.9.4",
"ecosystem": "nuget"
},
{
"name": "GitVersion.MsBuild",
"direct": true,
"version": "5.10.3",
"ecosystem": "nuget"
},
{
"name": "icu.net",
"direct": true,
"version": "3.0.1",
"ecosystem": "nuget"
},
{
"name": "Icu4c.Win.Min",
"direct": true,
"version": "59.1.7",
"ecosystem": "nuget"
},
{
"name": "L10NSharp",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "Microsoft.NET.Test.Sdk",
"direct": true,
"version": "17.14.1",
"ecosystem": "nuget"
},
{
"name": "Microsoft.SourceLink.GitHub",
"direct": true,
"version": "1.1.1",
"ecosystem": "nuget"
},
{
"name": "NDesk.DBus",
"direct": true,
"version": "0.15.0",
"ecosystem": "nuget"
},
{
"name": "Newtonsoft.Json",
"direct": true,
"version": "13.0.4",
"ecosystem": "nuget"
},
{
"name": "NUnit",
"direct": true,
"version": "3.13.3",
"ecosystem": "nuget"
},
{
"name": "NUnit3TestAdapter",
"direct": true,
"version": "4.3.2",
"ecosystem": "nuget"
},
{
"name": "SharpZipLib",
"direct": true,
"version": "1.3.3",
"ecosystem": "nuget"
},
{
"name": "SIL.BuildTasks",
"direct": true,
"version": "3.0.0",
"ecosystem": "nuget"
},
{
"name": "SIL.Chorus.Mercurial",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "SIL.Core",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "SIL.Lift",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "SIL.ReleaseTasks",
"direct": true,
"version": "3.0.0",
"ecosystem": "nuget"
},
{
"name": "SIL.TestUtilities",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "SIL.Windows.Forms",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "SIL.WritingSystems.Tests",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "System.ComponentModel.Composition",
"direct": true,
"version": "6.0.0",
"ecosystem": "nuget"
},
{
"name": "System.Diagnostics.DiagnosticSource",
"direct": true,
"version": "9.0.2",
"ecosystem": "nuget"
},
{
"name": "System.IO.FileSystem.Primitives",
"direct": true,
"version": "4.3.0",
"ecosystem": "nuget"
},
{
"name": "System.Resources.Extensions",
"direct": true,
"version": "6.0.0",
"ecosystem": "nuget"
},
{
"name": "System.Runtime.InteropServices.RuntimeInformation",
"direct": true,
"version": "4.3.0",
"ecosystem": "nuget"
},
{
"name": "System.ServiceModel.Primitives",
"direct": true,
"version": "4.8.1",
"ecosystem": "nuget"
},
{
"name": "System.Text.Encoding.CodePages",
"direct": true,
"version": "4.0.1",
"ecosystem": "nuget"
},
{
"name": "Vulcan.Uczniowie.HelpProvider",
"direct": true,
"version": "1.0.16",
"ecosystem": "nuget"
}
],
"collected": true,
"truncated": false,
"total_count": 28,
"direct_count": 28,
"indirect_count": 0
}
},
"maintainership": {
"issues": {
"open_prs": 5,
"merged_prs": 290,
"open_issues": 15,
"closed_ratio": 0.659,
"closed_issues": 29,
"closed_unmerged_prs": 50
},
"bus_factor": 3,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "regnrand",
"commits": 681,
"avatar_url": "https://avatars.githubusercontent.com/u/639605?v=4"
},
{
"type": "User",
"login": "hatton",
"commits": 570,
"avatar_url": "https://avatars.githubusercontent.com/u/8448?v=4"
},
{
"type": "User",
"login": "jasonleenaylor",
"commits": 253,
"avatar_url": "https://avatars.githubusercontent.com/u/2295227?v=4"
},
{
"type": "User",
"login": "cambell-prince",
"commits": 203,
"avatar_url": "https://avatars.githubusercontent.com/u/599797?v=4"
},
{
"type": "User",
"login": "ermshiperete",
"commits": 145,
"avatar_url": "https://avatars.githubusercontent.com/u/181336?v=4"
},
{
"type": "User",
"login": "JohnThomson",
"commits": 130,
"avatar_url": "https://avatars.githubusercontent.com/u/1360521?v=4"
},
{
"type": "User",
"login": "papeh",
"commits": 118,
"avatar_url": "https://avatars.githubusercontent.com/u/4933670?v=4"
},
{
"type": "User",
"login": "megahirt",
"commits": 108,
"avatar_url": "https://avatars.githubusercontent.com/u/3444521?v=4"
},
{
"type": "User",
"login": "gmartin7",
"commits": 102,
"avatar_url": "https://avatars.githubusercontent.com/u/2300551?v=4"
},
{
"type": "User",
"login": "StephenMcConnel",
"commits": 57,
"avatar_url": "https://avatars.githubusercontent.com/u/2228246?v=4"
}
],
"contributors_sampled": 37,
"top_contributor_share": 0.259
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci+cd.yml",
"l10n-packaging.yml",
"l10n-source.yml",
"test-results.yml"
],
"has_docs_dir": false,
"linter_configs": [],
"has_editorconfig": true,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 6,
"reason": "binaries present in source code",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": null,
"reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 3,
"reason": "9 out of 26 merged PRs checked by a CI test -- score normalized to 3",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 10,
"reason": "all changesets reviewed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 6 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 0,
"reason": "license file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 6,
"reason": "8 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 6",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 6,
"reason": "dependency not pinned by hash detected -- score normalized to 6",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 0,
"reason": "Project has not signed or included provenance with any releases.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "d8413afcccb631f5484e36090753290341917a0c",
"ran_at": "2026-07-24T13:41:47Z",
"aggregate_score": 4.6,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-24T13:37:04Z",
"oldest_open_prs": [
{
"number": 364,
"created_at": "2025-07-14T06:23:29Z",
"last_comment_at": "2025-07-23T05:46:53Z",
"last_comment_author": "rmunn"
},
{
"number": 369,
"created_at": "2026-04-28T16:34:09Z",
"last_comment_at": "2026-04-28T17:42:52Z",
"last_comment_author": "github-actions"
},
{
"number": 370,
"created_at": "2026-04-28T16:36:18Z",
"last_comment_at": "2026-04-28T17:50:53Z",
"last_comment_author": "github-actions"
},
{
"number": 386,
"created_at": "2026-06-22T19:49:29Z",
"last_comment_at": "2026-07-08T07:27:43Z",
"last_comment_author": "hahn-kev"
},
{
"number": 389,
"created_at": "2026-07-06T09:56:48Z",
"last_comment_at": "2026-07-23T08:02:58Z",
"last_comment_author": "hahn-kev"
}
],
"last_merged_pr_at": "2026-07-24T12:26:25Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 178,
"created_at": "2018-07-11T21:11:46Z",
"last_comment_at": "2018-07-12T15:51:53Z",
"last_comment_author": "wasta-mxb"
},
{
"number": 184,
"created_at": "2019-05-08T18:20:09Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 192,
"created_at": "2019-09-26T14:42:01Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 193,
"created_at": "2019-09-26T14:42:46Z",
"last_comment_at": "2023-12-16T04:04:41Z",
"last_comment_author": "rmunn"
},
{
"number": 261,
"created_at": "2021-09-03T02:37:55Z",
"last_comment_at": "2026-06-22T20:54:39Z",
"last_comment_author": "imnasnainaec"
},
{
"number": 298,
"created_at": "2022-09-22T03:57:32Z",
"last_comment_at": "2024-10-22T04:52:28Z",
"last_comment_author": "rmunn"
},
{
"number": 299,
"created_at": "2022-09-23T07:16:29Z",
"last_comment_at": "2022-12-12T16:57:40Z",
"last_comment_author": "papeh"
},
{
"number": 331,
"created_at": "2024-01-30T16:09:18Z",
"last_comment_at": "2024-02-14T07:12:49Z",
"last_comment_author": "Marcool04"
},
{
"number": 342,
"created_at": "2024-06-11T20:44:11Z",
"last_comment_at": "2024-06-12T15:21:04Z",
"last_comment_author": "hahn-kev"
},
{
"number": 361,
"created_at": "2025-07-08T03:21:37Z",
"last_comment_at": "2025-07-14T05:53:38Z",
"last_comment_author": "rmunn"
},
{
"number": 362,
"created_at": "2025-07-08T09:50:01Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 363,
"created_at": "2025-07-14T06:20:31Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 371,
"created_at": "2026-06-22T14:52:22Z",
"last_comment_at": "2026-06-22T14:58:30Z",
"last_comment_author": "imnasnainaec"
},
{
"number": 376,
"created_at": "2026-06-22T15:51:48Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 387,
"created_at": "2026-06-22T20:27:18Z",
"last_comment_at": "2026-06-22T20:27:37Z",
"last_comment_author": "imnasnainaec"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/sillsdev/chorus",
"host": "github.com",
"name": "chorus",
"owner": "sillsdev"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"security": 57,
"vitality": 46,
"community": 38,
"governance": 72,
"engineering": 56
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "at_risk",
"name": "Vitality",
"value": 46,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"commits_last_year": 9,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 6
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "6/52 weeks with commits",
"points": 4.2,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 6
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "9 commits in the last year",
"points": 9,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 9
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "8 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 6",
"points": 6,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "at_risk",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 32,
"inputs": {
"releases_count": 4,
"latest_release_tag": "v5.1.0",
"releases_from_tags": false,
"days_since_latest_release": 1045,
"mean_days_between_releases": 1031.2
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "4 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 4
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 1045 days ago",
"points": 0,
"status": "missed",
"details": [
{
"code": "release_recency",
"params": {
"days": 1045
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~1031.2 days",
"points": 5.4,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 1031.2
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 0,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 0 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 0
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "at_risk",
"name": "Community & Adoption",
"value": 38,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 27,
"inputs": {
"forks": 26,
"stars": 5,
"watchers": 11,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "5 stars",
"points": 9.8,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 5
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "26 forks",
"points": 11.7,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 26
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "11 watchers",
"points": 5.6,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 11
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "critical",
"name": "Community health",
"note": null,
"notes": [],
"value": 25,
"inputs": {
"has_readme": true,
"has_license": false,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "no license file detected",
"points": 0,
"status": "missed",
"details": [
{
"code": "license_absent",
"params": {}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "good",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 73,
"inputs": {
"packages": [
"SIL.Chorus.App",
"SIL.Chorus.ChorusHub",
"SIL.Chorus.LibChorus",
"SIL.Chorus.ChorusMerge",
"SIL.Chorus.ChorusHubApp",
"SIL.Chorus.LibChorus.TestUtilities"
],
"dependents": null,
"ecosystems": "nuget",
"total_downloads": 407351,
"monthly_downloads": null
},
"components": [
{
"key": "total_downloads",
"name": "Total downloads",
"detail": "407,351 downloads all-time across nuget",
"points": 58.3,
"status": "partial",
"details": [
{
"code": "downloads_total",
"params": {
"count": 407351,
"ecosystems": "nuget"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "good",
"name": "Sustainability & Governance",
"value": 72,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "good",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 76,
"inputs": {
"bus_factor": 3,
"contributors_sampled": 37,
"top_contributor_share": 0.259
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "3 contributor(s) cover half of all commits",
"points": 36,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 3
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 26% of commits",
"points": 16.7,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 26
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "37 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 37
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 6 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 78,
"inputs": {
"merged_prs": 290,
"open_issues": 15,
"closed_issues": 29,
"issue_closed_ratio": 0.659,
"closed_unmerged_prs": 50
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "66% of issues closed",
"points": 30.8,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 66
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "290/340 decided PRs merged",
"points": 32.6,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 290,
"decided": 340
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "all changesets reviewed",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "good",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 71,
"inputs": {
"followers": 181,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "sillsdev",
"public_repos": 303,
"account_age_days": 5409
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "181 followers of sillsdev",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 181,
"login": "sillsdev"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "303 public repos, account ~14 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 303
}
},
{
"code": "account_age_years",
"params": {
"years": 14
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "moderate",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 61,
"inputs": {
"packages": [
"SIL.Chorus.App",
"SIL.Chorus.ChorusHub",
"SIL.Chorus.LibChorus",
"SIL.Chorus.ChorusMerge",
"SIL.Chorus.ChorusHubApp",
"SIL.Chorus.LibChorus.TestUtilities"
],
"ecosystems": "nuget",
"any_deprecated": false,
"min_days_since_publish": 1136
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "6 package(s) on nuget",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 6,
"ecosystems": "nuget"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 1136 days ago",
"points": 4,
"status": "partial",
"details": [
{
"code": "publish_recency",
"params": {
"days": 1136
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "3 published versions",
"points": 12,
"status": "partial",
"details": [
{
"code": "published_versions",
"params": {
"count": 3
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "moderate",
"name": "Engineering Quality",
"value": 56,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": true,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "4 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 4
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 6.4,
"status": "met",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "9 out of 26 merged PRs checked by a CI test -- score normalized to 3",
"points": 6,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"topics": [
"chorus",
"synchronization",
"conflict",
"xml",
"merge",
"send-receive",
"dvcs",
"hg",
"fieldworks",
"hacktoberfest"
],
"has_wiki": false,
"homepage": null,
"has_readme": true,
"has_docs_dir": false,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "10 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 10
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 57,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 46,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 4.6
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "binaries present in source code",
"points": 4.5,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "9 out of 26 merged PRs checked by a CI test -- score normalized to 3",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "all changesets reviewed",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 6 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "8 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 6",
"points": 4.5,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 6",
"points": 3,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 21 resolved dependencies against OSV; 7 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories",
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 21
}
},
{
"code": "advisories_unassessed",
"params": {
"count": 7
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 21,
"unassessed_packages": 7,
"affected_by_severity": "none",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 21,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 3
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 61,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.77,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "77 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 77,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 62,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.05,
"toolchain_manifests": [
"src/Chorus.Tests/Chorus.Tests.csproj",
"src/Chorus/Chorus.csproj",
"src/ChorusHub/ChorusHub.csproj",
"src/ChorusHubApp/ChorusHubApp.csproj",
"src/ChorusHubTests/ChorusHubTests.csproj",
"src/ChorusMerge.Tests/ChorusMerge.Tests.csproj",
"src/ChorusMerge/ChorusMerge.csproj",
"src/LibChorus.TestUtilities/LibChorus.TestUtilities.csproj",
"src/LibChorus/LibChorus.csproj",
"src/LibChorusTests/LibChorus.Tests.csproj",
"src/SampleApp/SampleApp.csproj",
"src/Tests-ChorusPlugin/Tests-ChorusPlugin.csproj"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "src/Chorus.Tests/Chorus.Tests.csproj, src/Chorus/Chorus.csproj, src/ChorusHub/ChorusHub.csproj (toolchain convention, no task runner)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "toolchain_convention",
"params": {
"files": "src/Chorus.Tests/Chorus.Tests.csproj, src/Chorus/Chorus.csproj, src/ChorusHub/ChorusHub.csproj"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "C# (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "C#"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "5 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 5,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 6",
"points": 6,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "C#",
"largest_source_bytes": 78425,
"source_files_sampled": 438,
"oversized_source_files": 1
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "C# (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "C#"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "1/438 source files over 60KB",
"points": 54.9,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 438,
"oversized": 1
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
],
"report_type": "repository",
"generated_at": "2026-07-24T13:42:19.948303Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/sillsdev/chorus.svg",
"full_name": "sillsdev/chorus",
"license_state": "absent",
"license_spdx": null
}