Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-24 13:42 UTC

sillsdev / chorus

End-user collaboration library via 3-way xml merging and hg dvcs under the hood

C#Sin licencia detectada★ 5 estrellas⑂ 26 forksdesde nov 2013Ver en GitHub ↗

sillsdev/chorus tiene un índice de salud de 55 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Sustainability & Governance (72/100) y la más baja, Community & Adoption (38/100). Se actualizó por última vez hoy. 3 personas concentran la mayor parte del trabajo reciente.

55
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

55
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

SIL LSDevOrganización
181 seguidores303 repositorios públicosdesde oct 2011

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
NuGetSIL.Chorus.App5.1.0-3hace 1136 días
NuGetSIL.Chorus.ChorusHub5.1.0-3hace 1136 días
NuGetSIL.Chorus.LibChorus5.1.0-3hace 1136 días
NuGetSIL.Chorus.ChorusMerge5.1.0-3hace 1136 días
NuGetSIL.Chorus.ChorusHubApp5.1.0-3hace 1136 días
NuGetSIL.Chorus.LibChorus.TestUtilities5.1.0-3hace 1136 días

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

46En riesgo · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
4.2/36Cadencia de commits — 6/52 semanas con commits
9/18Volumen de commits — 9 commits en el último año
6/10OpenSSF Scorecard: Maintained — 8 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 6
Datos de entrada utilizados
commits_last_year9
human_commit_share1
days_since_last_push0
active_weeks_last_year6
Cómo se puntúa
27/27Publica versiones — 4 versiones publicadas
0/36Recencia de las versiones — última versión hace 1045 días
5.4/27Cadencia de publicación — una versión cada ~1031,2 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count4
latest_release_tagv5.1.0
releases_from_tagsno
days_since_latest_release1045
mean_days_between_releases1031,2

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

38En riesgo · 18% del índice global
Cómo se puntúa
9.8/60Estrellas — 5 estrellas
11.7/25Forks — 26 forks
5.6/15Observadores — 11 observadores
Datos de entrada utilizados
forks26
stars5
watchers11
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
0/22.5Licencia — no se detectó ningún archivo de licencia
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
58.3/80Descargas totales — 407.351 descargas históricas en nuget
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesSIL.Chorus.App, SIL.Chorus.ChorusHub, SIL.Chorus.LibChorus, SIL.Chorus.ChorusMerge, SIL.Chorus.ChorusHubApp, SIL.Chorus.LibChorus.TestUtilities
dependents
ecosystemsnuget
total_downloads407.351
monthly_downloads
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

72Bueno · 24% del índice global
Cómo se puntúa
36/54Factor bus — la mitad de los commits recae en 3 contribuyente(s)
16.7/22.5Distribución de commits — el principal contribuyente firma el 26% de los commits
13.5/13.5Amplitud de contribuyentes — 37 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 6 contributing companies or organizations
Datos de entrada utilizados
bus_factor3
contributors_sampled37
top_contributor_share0,259
Cómo se puntúa
30.8/46.8Resolución de issues — 66% de issues cerradas
32.6/38.3Aceptación de PR — 290/340 PR decididos fusionados
15/15OpenSSF Scorecard: Code-Review — all changesets reviewed
Datos de entrada utilizados
merged_prs290
open_issues15
closed_issues29
issue_closed_ratio0,659
closed_unmerged_prs50
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
16.2/25Alcance del propietario — 181 seguidores de sillsdev
25/25Trayectoria — 303 repos públicos, cuenta de ~14 años
Datos de entrada utilizados
followers181
owner_typeOrganization
is_verified
owner_loginsillsdev
public_repos303
account_age_days5409
Cómo se puntúa
25/25Publicado y resoluble — 6 paquete(s) en nuget
4/35Recencia de publicación — última publicación hace 1136 días
12/20Historial de versiones — 3 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesSIL.Chorus.App, SIL.Chorus.ChorusHub, SIL.Chorus.LibChorus, SIL.Chorus.ChorusMerge, SIL.Chorus.ChorusHubApp, SIL.Chorus.LibChorus.TestUtilities
ecosystemsnuget
any_deprecatedno
min_days_since_publish1136

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

56Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 4 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
6.4/6.4.editorconfig
6/20OpenSSF Scorecard: CI-Tests — 9 out of 26 merged PRs checked by a CI test -- score normalized to 3
Datos de entrada utilizados
has_ci
has_tests
has_editorconfig
has_linter_configno
has_precommit_configno

Documentación

50Moderado
Cómo se puntúa
30/30README
0/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
10/10Topics — 10 topics
0/10Wiki
Datos de entrada utilizados
topicschorus, synchronization, conflict, xml, merge, send-receive, dvcs, hg, fieldworks, hacktoberfest
has_wikino
homepage
has_readme
has_docs_dirno
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

57Moderado · 16% del índice global
Cómo se puntúa
4.5/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — sin datos
0.8/2.5CI-Tests — 9 out of 26 merged PRs checked by a CI test -- score normalized to 3
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
7.5/7.5Code-Review — all changesets reviewed
2.5/2.5Contributors — project has 6 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5Licencia — license file not detected
4.5/7.5Maintained — 8 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 6
5/5Packaging — packaging workflow detected
3/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 6
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,6
Excluidos de la puntuación (sin datos o no aplicable): branch_protection. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
0/25Dependencias indirectas libres de avisos conocidos — el conjunto transitivo no es separable de las dependencias de desarrollo y prueba en este alcance
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories0
affected_packages0
assessed_packages21
unassessed_packages7
affected_by_severitynone
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Dependencias indirectas libres de avisos conocidos, Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejaron 21 dependencias resueltas con OSV. 7 no pudieron evaluarse: sin versión resuelta, ecosistema no admitido o fuera de la lista de paquetes informada. Este repositorio no publica ningún paquete que el índice resuelva, por lo que se evaluó en su lugar el grafo de dependencias del repositorio. Ese grafo mezcla fijaciones de desarrollo y prueba con las dependencias distribuidas, de modo que solo se puntúan las dependencias declaradas en tiempo de ejecución; los hallazgos transitivos se informan como contexto y quedan excluidos de la puntuación. No se analiza la alcanzabilidad.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

61Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 77 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,77
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
12.6/18Arranque con un solo comando — src/Chorus.Tests/Chorus.Tests.csproj, src/Chorus/Chorus.csproj, src/ChorusHub/ChorusHub.csproj (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — C# (tipado estático)
0/10Entorno reproducible
10/10Práctica demostrada con agentes — 5 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
6/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 6
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,05
toolchain_manifestssrc/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_share0
Cómo se puntúa
45/45Código verificable por tipos — C# (tipado estático)
54.9/55Tamaños de archivo manejables — 1/438 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageC#
largest_source_bytes78.425
source_files_sampled438
oversized_source_files1

Datos clave

5estrellas de GitHub
37contribuidores
9commits en los últimos 12 meses
0días desde el último push
4versiones publicadas
3factor bus
15issues abiertas
ecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

Más detalle

Historial de estrellas y forks 0 ★ / 26 ⇿
0Estrellas
26Forks
4Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

0510152025302622014-042019-052024-06
Mayor 2Menor 1Parche 0

Cada punto abarca 10 días.

OpenSSF Scorecard 4.6 / 10
4.6agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-24 13:41 UTC

6Binary-Artifactsbinaries present in source code
n/dBranch-Protectioninternal 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
3CI-Tests9 out of 26 merged PRs checked by a CI test -- score normalized to 3
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
10Code-Reviewall changesets reviewed
10Contributorsproject has 6 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
6Maintained8 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 6
10Packagingpackaging workflow detected
6Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 6
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Dependencias directas 73
RegistroPaqueteRestricción de versiónManifiesto
NuGetGitVersion.MsBuild5.10.3src/Chorus.Tests/Chorus.Tests.csproj
NuGetMicrosoft.NET.Test.Sdk17.14.1src/Chorus.Tests/Chorus.Tests.csproj
NuGetMicrosoft.SourceLink.GitHub1.1.1src/Chorus.Tests/Chorus.Tests.csproj
NuGetNUnit3.13.3src/Chorus.Tests/Chorus.Tests.csproj
NuGetNUnit3TestAdapter4.3.2src/Chorus.Tests/Chorus.Tests.csproj
NuGetGitVersion.MsBuild5.10.3src/Chorus/Chorus.csproj
NuGetMicrosoft.SourceLink.GitHub1.1.1src/Chorus/Chorus.csproj
NuGetSIL.ReleaseTasks3.0.0src/Chorus/Chorus.csproj
NuGetSIL.Windows.Forms18.0.0-*src/Chorus/Chorus.csproj
NuGetVulcan.Uczniowie.HelpProvider1.0.16src/Chorus/Chorus.csproj
NuGetGitVersion.MsBuild5.10.3src/ChorusHub/ChorusHub.csproj
NuGetMicrosoft.SourceLink.GitHub1.1.1src/ChorusHub/ChorusHub.csproj
NuGetSIL.ReleaseTasks3.0.0src/ChorusHub/ChorusHub.csproj
NuGetSIL.BuildTasks3.0.0src/ChorusHub/ChorusHub.csproj
NuGetGitVersion.MsBuild5.10.3src/ChorusHubApp/ChorusHubApp.csproj
NuGetMicrosoft.SourceLink.GitHub1.1.1src/ChorusHubApp/ChorusHubApp.csproj
NuGetSIL.ReleaseTasks3.0.0src/ChorusHubApp/ChorusHubApp.csproj
NuGetSIL.Windows.Forms18.0.0-*src/ChorusHubApp/ChorusHubApp.csproj
NuGetVulcan.Uczniowie.HelpProvider1.0.16src/ChorusHubApp/ChorusHubApp.csproj
NuGetGitVersion.MsBuild5.10.3src/ChorusHubTests/ChorusHubTests.csproj
NuGetMicrosoft.NET.Test.Sdk17.14.1src/ChorusHubTests/ChorusHubTests.csproj
NuGetMicrosoft.SourceLink.GitHub1.1.1src/ChorusHubTests/ChorusHubTests.csproj
NuGetNUnit3.13.3src/ChorusHubTests/ChorusHubTests.csproj
NuGetNUnit3TestAdapter4.3.2src/ChorusHubTests/ChorusHubTests.csproj
NuGetGitVersion.MsBuild5.10.3src/ChorusMerge.Tests/ChorusMerge.Tests.csproj
NuGetMicrosoft.NET.Test.Sdk17.14.1src/ChorusMerge.Tests/ChorusMerge.Tests.csproj
NuGetMicrosoft.SourceLink.GitHub1.1.1src/ChorusMerge.Tests/ChorusMerge.Tests.csproj
NuGetNewtonsoft.Json13.0.4src/ChorusMerge.Tests/ChorusMerge.Tests.csproj
NuGetNUnit3.13.3src/ChorusMerge.Tests/ChorusMerge.Tests.csproj
NuGetNUnit3TestAdapter4.3.2src/ChorusMerge.Tests/ChorusMerge.Tests.csproj
NuGetSIL.TestUtilities18.0.0-*src/ChorusMerge.Tests/ChorusMerge.Tests.csproj
NuGetGitVersion.MsBuild5.10.3src/ChorusMerge/ChorusMerge.csproj
NuGetMicrosoft.SourceLink.GitHub1.1.1src/ChorusMerge/ChorusMerge.csproj
NuGetSIL.ReleaseTasks3.0.0src/ChorusMerge/ChorusMerge.csproj
NuGetSystem.Runtime.InteropServices.RuntimeInformation4.3.0src/ChorusMerge/ChorusMerge.csproj
NuGetSystem.Text.Encoding.CodePages4.0.1src/ChorusMerge/ChorusMerge.csproj
NuGetGitVersion.MsBuild5.10.3src/LibChorus.TestUtilities/LibChorus.TestUtilities.csproj
NuGetMicrosoft.SourceLink.GitHub1.1.1src/LibChorus.TestUtilities/LibChorus.TestUtilities.csproj
NuGetNUnit3.13.3src/LibChorus.TestUtilities/LibChorus.TestUtilities.csproj
NuGetSIL.Core18.0.0-*src/LibChorus.TestUtilities/LibChorus.TestUtilities.csproj
NuGetSIL.ReleaseTasks3.0.0src/LibChorus.TestUtilities/LibChorus.TestUtilities.csproj
NuGetSIL.TestUtilities18.0.0-*src/LibChorus.TestUtilities/LibChorus.TestUtilities.csproj
NuGetAutofac4.9.4src/LibChorus/LibChorus.csproj
NuGetGitVersion.MsBuild5.10.3src/LibChorus/LibChorus.csproj
NuGeticu.net3.0.1src/LibChorus/LibChorus.csproj
NuGetIcu4c.Win.Min59.1.7src/LibChorus/LibChorus.csproj
NuGetL10NSharp10.0.0-*src/LibChorus/LibChorus.csproj
NuGetMicrosoft.SourceLink.GitHub1.1.1src/LibChorus/LibChorus.csproj
NuGetNDesk.DBus0.15.0src/LibChorus/LibChorus.csproj
NuGetSIL.Chorus.Mercurial6.5.*src/LibChorus/LibChorus.csproj
NuGetSIL.Core18.0.0-*src/LibChorus/LibChorus.csproj
NuGetSIL.Lift18.0.0-*src/LibChorus/LibChorus.csproj
NuGetSIL.ReleaseTasks3.0.0src/LibChorus/LibChorus.csproj
NuGetSystem.ComponentModel.Composition6.0.0src/LibChorus/LibChorus.csproj
NuGetSystem.Diagnostics.DiagnosticSource9.0.2src/LibChorus/LibChorus.csproj
NuGetSystem.Resources.Extensions6.0.0src/LibChorus/LibChorus.csproj
NuGetSystem.ServiceModel.Primitives4.8.1src/LibChorus/LibChorus.csproj
NuGetGitVersion.MsBuild5.10.3src/LibChorusTests/LibChorus.Tests.csproj
NuGetMicrosoft.NET.Test.Sdk17.14.1src/LibChorusTests/LibChorus.Tests.csproj
NuGetMicrosoft.SourceLink.GitHub1.1.1src/LibChorusTests/LibChorus.Tests.csproj
NuGetNewtonsoft.Json13.0.4src/LibChorusTests/LibChorus.Tests.csproj
NuGetNUnit3.13.3src/LibChorusTests/LibChorus.Tests.csproj
NuGetNUnit3TestAdapter4.3.2src/LibChorusTests/LibChorus.Tests.csproj
NuGetSharpZipLib1.3.3src/LibChorusTests/LibChorus.Tests.csproj
NuGetSIL.Core18.0.0-*src/LibChorusTests/LibChorus.Tests.csproj
NuGetSIL.TestUtilities18.0.0-*src/LibChorusTests/LibChorus.Tests.csproj
NuGetSIL.WritingSystems.Tests18.0.0-*src/LibChorusTests/LibChorus.Tests.csproj
NuGetSystem.IO.FileSystem.Primitives4.3.0src/LibChorusTests/LibChorus.Tests.csproj
NuGetGitVersion.MsBuild5.10.3src/SampleApp/SampleApp.csproj
NuGetMicrosoft.SourceLink.GitHub1.1.1src/SampleApp/SampleApp.csproj
NuGetSharpZipLib1.3.3src/SampleApp/SampleApp.csproj
NuGetGitVersion.MsBuild5.10.3src/Tests-ChorusPlugin/Tests-ChorusPlugin.csproj
NuGetMicrosoft.SourceLink.GitHub1.1.1src/Tests-ChorusPlugin/Tests-ChorusPlugin.csproj
Todas las dependencias 28

Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 28 paquetes directos y 0 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.

RegistroPaqueteVersiónRelación
NuGetAutofac4.9.4directa
NuGetGitVersion.MsBuild5.10.3directa
NuGeticu.net3.0.1directa
NuGetIcu4c.Win.Min59.1.7directa
NuGetL10NSharpdirecta
NuGetMicrosoft.NET.Test.Sdk17.14.1directa
NuGetMicrosoft.SourceLink.GitHub1.1.1directa
NuGetNDesk.DBus0.15.0directa
NuGetNewtonsoft.Json13.0.4directa
NuGetNUnit3.13.3directa
NuGetNUnit3TestAdapter4.3.2directa
NuGetSharpZipLib1.3.3directa
NuGetSIL.BuildTasks3.0.0directa
NuGetSIL.Chorus.Mercurialdirecta
NuGetSIL.Coredirecta
NuGetSIL.Liftdirecta
NuGetSIL.ReleaseTasks3.0.0directa
NuGetSIL.TestUtilitiesdirecta
NuGetSIL.Windows.Formsdirecta
NuGetSIL.WritingSystems.Testsdirecta
NuGetSystem.ComponentModel.Composition6.0.0directa
NuGetSystem.Diagnostics.DiagnosticSource9.0.2directa
NuGetSystem.IO.FileSystem.Primitives4.3.0directa
NuGetSystem.Resources.Extensions6.0.0directa
NuGetSystem.Runtime.InteropServices.RuntimeInformation4.3.0directa
NuGetSystem.ServiceModel.Primitives4.8.1directa
NuGetSystem.Text.Encoding.CodePages4.0.1directa
NuGetVulcan.Uczniowie.HelpProvider1.0.16directa
Avisos de dependencias 0

Este repositorio no publica ningún paquete que el índice resuelva, así que se evaluó su propio grafo de dependencias — 21 paquetes, que incluyen también fijaciones de desarrollo y prueba que nunca se distribuyen: 0 tienen avisos conocidos, de los cuales 0 son directas. 7 no pudieron evaluarse: sin versión resuelta, ecosistema no admitido, o fuera de la lista de paquetes informada.

Ningún aviso conocido afecta a las dependencias evaluadas.

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "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
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasNuGet.