literals (Interpol\n[…]\n-line exemption.\n\nSeverity: Warning. All 93 analyzer tests pass (was 81). Full repo: 388 total / 387 passed / 1 skipped / 0 failed.\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "feat(analyzers): add RawStringLiteralAlignmentAnalyzer (NLF0010)", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-25T16:58:16Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "a78087a39bba0424f037ef04eea124931031e38d", "body": "All 81 raw string literals in the 5 analyzer test files had the opening triple-quote dangling at the end of the assignment line:\n\n var source = `\n using System;\n `;\n\nThis compiles fine (the closing ``` defines the strip indent) but the opening delimiter is offset from the closing on\n[…]\n `;\n\nMechanical edit via regex across 5 files (ConsoleWriteAnalyzerTests + the 4 Try-pattern test files). All 81 tests still pass.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "style: align raw string literal delimiters in analyzer tests", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-25T15:57:51Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "6df69d004088cd6c7344bbd5be7bf3b9f694c447", "body": "Port from BrandGhost NexusAI.Analyzers. Flags async methods whose return type is Task\u003cTriedEx\u003cT>> or Task\u003cTriedNullEx\u003cT>> but whose body neither directly delegates to another method returning the same shape nor wraps via Try.GetAsync / Try.GetOrNullAsync.\n\nSuch methods promise the caller they will s\n[…]\nnalyzer alone provides the diagnostic value; the CodeFix is a substantial ergonomics enhancement worth its own focused workstream.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "feat(analyzers): add AsyncTryResultMethodAnalyzer (NLF0009)", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-25T06:05:19Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "d24042ef87471a221bbef45a4174afd9daa25b23", "body": "Port from BrandGhost NexusAI.Analyzers. Three diagnostics enforce correct usage of the NexusLabs.Framework.Try orchestration helpers:\n\n- NLF0006: async method whose entire body is a single try-catch — should be rewritten with Try.Async / Try.GetAsync / Try.GetOrNullAsync. The Try helpers exist preci\n[…]\ntotal in the analyzers test suite, 0 failures). Added Try + ILogger stubs to shared TestSources.TryHelperStubs constant for reuse.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "feat(analyzers): add TryPatternAnalyzer (NLF0006/NLF0007/NLF0008)", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-25T06:01:54Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "76d3b5649b006354829e0c5a83fe106397343257", "body": "Port from BrandGhost NexusAI.Analyzers. Two diagnostics:\n\n- NLF0004: redundant null check on TriedEx/TriedNullEx Error after Success has been established as false. The TriedEx contract guarantees Error is non-null in that case, so the null check is dead code that obscures intent.\n- NLF0005: when ret\n[…]\n not trigger). Severity: Warning (BG used Error). 17 ported tests, all passing (48 total in the analyzers test suite, 0 failures).\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "feat(analyzers): add TryResultErrorUsageAnalyzer (NLF0004/NLF0005)", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-25T05:56:53Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "f41b33801d40f60883fe13178f280ba7e34d35fd", "body": "Port from BrandGhost NexusAI.Analyzers. Flags reads of TriedEx\u003cT>.Value or TriedNullEx\u003cT>.Value not guarded by a Success-true check (NLF0002), and reads of .Error not guarded by a Success-false check (NLF0003). Honors short-circuit AND/OR, ternary, and early return/throw/break/continue patterns. Nam\n[…]\nc.NLF000{2,3}.severity = error in .editorconfig). 23 ported tests, all passing (31 total in the analyzers test suite, 0 failures).\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "feat(analyzers): add TryResultAnalyzer (NLF0002/NLF0003)", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-25T05:54:17Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "e2a35bb44cbc5694ff9643a0537d0a285c3b3cf2", "body": "Patch bump. Consumed transitively by NexusLabs.CodeAnalysis.Testing.TUnit and used directly by analyzer test projects. Build: 0 warnings / 0 errors. Tests: 303 total / 302 passed / 1 skipped / 0 failed across all 6 test projects.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore(deps): bump Microsoft.CodeAnalysis.Analyzer.Testing 1.1.2 -> 1.1.4", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T20:35:06Z", "body_truncated": false, "is_coding_agent": true }, { "oid": "0fa7081a8eb79621e3285c7973611c024c0e27bf", "body": "Self-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 303 total, 302 passed, 1 skipped, 0 failed\n (unchanged)\nMEDIUM Tech debt introduced: none. Versioning model simplified (single\n \n[…]\nn this release - everything is\nat a new version).\n\nBuild: 0 errors, 0 warnings.\nTests: 303 total, 302 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore(release): prepare v0.2.1 (lockstep versioning)", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T19:10:26Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "2c86c5d08f1838c61330cecfa704326846ceb599", "body": "…(#6)\n\n---\nupdated-dependencies:\n- dependency-name: Microsoft.Extensions.Logging.Abstractions\n dependency-version: 10.0.8\n dependency-type: direct:production\n update-type: version-update:semver-patch\n dependency-group: dotnet-dependencies\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com>\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com>", "is_bot": true, "headline": "Bump Microsoft.Extensions.Logging.Abstractions from 10.0.0 to 10.0.8 …", "author_name": "dependabot[bot]", "author_login": "dependabot[bot]", "committed_at": "2026-05-24T18:19:24Z", "body_truncated": false, "is_coding_agent": false }, { "oid": "9c2c5429444495909784c0a57a81cb671b7451ff", "body": "Self-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 303 total, 302 passed, 1 skipped, 0 failed\n (23 new TUnitVerifier tests covering every\n IVerifier method: Empty, \n[…]\n MIT\nlicense, and the four expected dependencies.\n\nBuild: 0 errors, 0 warnings.\nTests: 303 total, 302 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "feat(codeanalysis-tunit): TUnit IVerifier for analyzer test harness", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T17:09:48Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "7ed91664cc7fe02ae82843098df18a9c462110ea", "body": "…t1051 NoWarn\n\nSelf-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 280 total, 279 passed, 1 skipped, 0 failed\n (test count unchanged - threading existing\n cancellati\n[…]\nnc() -> await sut.OpenNewConnectionAsync(_ct)\n\nBuild: 0 errors, 0 warnings.\nTests: 280 total, 279 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "refactor(tests): use TestContext.Current.CancellationToken, drop xUni…", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T16:57:27Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "75ab9fb1defa85c7ebefea2771ea6c77a9cb0bb2", "body": "Self-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 280 total, 279 passed, 1 skipped, 0 failed\n (test count unchanged - extracting helper)\nMEDIUM Tech debt introduced: none. Consolidated two nea\n[…]\n fix pre-existing issues unrelated to your task\".\n\nBuild: 0 errors, 0 warnings.\nTests: 280 total, 279 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "refactor(tests): extract ActivityCapture helper to its own file", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T16:53:35Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "37180d7d67cefb08ac3c0b520e0ad83eafe83f6d", "body": "Self-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 280 total, 279 passed, 1 skipped, 0 failed\n (test count unchanged - same 5\n LoggingAsyncDbCommandTests refactored\n[…]\noved - no longer referenced anywhere in the repo.\n\nBuild: 0 errors, 0 warnings.\nTests: 280 total, 279 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "refactor(data-sql-tests): use Mock\u003cILogger> instead of CapturingLogger", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T16:51:24Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "1f63d527c7b1543c03087fa9125562a87687de38", "body": "…ew Mock\n\nSelf-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 280 total, 279 passed, 1 skipped, 0 failed\n (test count unchanged - structural refactor)\nMEDIUM Tech debt introduced: none. Existing\n[…]\nposing the connection within the test.\n Removed.\n\nBuild: 0 errors, 0 warnings.\nTests: 280 total, 279 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "refactor(data-sql-tests): use MockRepository + VerifyAll, drop bare n…", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T16:49:50Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "a2dbf4b4f878b3915a996f21a1846e394ad706e0", "body": "Self-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 280 total, 279 passed, 1 skipped, 0 failed\n (+1 new test: OpenAsync_UsesTimeProviderForTimestamp)\nMEDIUM Tech debt introduced: none\nMEDIUM Mis\n[…]\n TimeProvider.System for illustrative simplicity.\n\nBuild: 0 errors, 0 warnings.\nTests: 280 total, 279 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "refactor(data-sql): OpenTrackingDecorator takes TimeProvider", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T16:45:46Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "2f596ffac2b397ab8bafae308f4533f123839577", "body": "Self-assessment:\n\nHIGH Omitted behavior: none for this scope - this is the first cut of\n the core analyzer package with one rule.\n Additional analyzers from BrandGhost's\n NexusAI.Analyzers (Try-patt\n[…]\nupkg + snupkg generated. Consumer smoke test (transient classlib\nreferencing 0.1.0 .nupkg via local feed) confirmed NLF0001 fires.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "feat(analyzers): scaffold NexusLabs.Framework.Analyzers + NLF0001", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T06:37:43Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "32c2d9498bf8b65dd7ba0995994f3ff663a13eef", "body": "Self-assessment:\n\nHIGH Omitted behavior: none for this scope\nHIGH Implementation gaps: none\nHIGH Test results: 271 total, 270 passed, 1 skipped, 0 failed\n (24 new tests: 15 instance Tracer + 9 static\n Tracer.D\n[…]\nof ActivitySource (it is constructable directly).\n\nBuild: 0 errors, 0 warnings.\nTests: 271 total, 270 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "feat(framework): add ITracer / Tracer over ActivitySource", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T04:28:12Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "b6dbc80b4d56ec71355cb4fc088302ee7b0d09fe", "body": "Self-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: unchanged - 247 total, 246 passed, 1 skipped\nMEDIUM Tech debt introduced: none - this commit actively REMOVES the\n hand-curated type-inventory\n[…]\nta.Sql -> Framework 0.2.0 + Microsoft.Extensions.Logging.Abstractions\n10.0.0; Data.Sql.MySql -> Data.Sql 0.1.0 + MySql.Data 9.7.0.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "docs: add Data.Sql + Data.Sql.MySql sections to CHANGELOG and README", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T03:50:13Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "30c977436d99c63bf8f4e8fd9007cc21b4f0bd20", "body": "…paths\n\nSelf-assessment:\n\nHIGH Omitted behavior: - no integration tests against a live MySQL\n (per locked decision D11; deferred)\n - no MySqlConnector adapter (deferred per user)\n - no Needlr [DoN\n[…]\nteAsyncDbConnectionFactory in NexusLabs.Data.Sql.\n\nBuild: 0 errors, 0 warnings.\nTests: 239 total, 238 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "feat(data-sql-mysql): port MySQL provider with fully delegated async …", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T03:10:30Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "c51b31052d99e7e97108ebfdb017b23f2d867a39", "body": "…ctory)\n\nSelf-assessment:\n\nHIGH Omitted behavior: none for this phase. Provider-agnostic core is\n complete. MySQL provider lands in Phase 3.\nHIGH Implementation gaps: none\nHIGH Test results: 221 total, 220 passed, 1 skipped, 0 failed\n \n[…]\n51 (matches existing Framework.Tests convention).\n\nBuild: 0 errors, 0 warnings.\nTests: 221 total, 220 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "feat(data-sql): add provider-agnostic core (lease/tracking/logging/fa…", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T03:10:30Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "61a84dc2e8ef345745b54853d096445d13aabbee", "body": "Self-assessment:\n\nHIGH Omitted behavior: none (scaffolding-only commit)\nHIGH Implementation gaps: none for this phase\nHIGH Test results: 192 total, 191 passed, 1 skipped, 0 failed\n (+2 placeholder ScaffoldTests so MTP does not\n \n[…]\nhe 4 new projects under /src/ and /tests/ folders\n\nBuild: 0 errors, 0 warnings.\nTests: 192 total, 191 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: scaffold NexusLabs.Data.Sql + NexusLabs.Data.Sql.MySql projects", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T03:10:30Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "11f8610991d99e6efed81283e009597f2a9b09f2", "body": "Self-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 190 total, 189 passed, 1 skipped, 0 failed\n (8 new AsyncSemaphoreLease tests)\nMEDIUM Tech debt introduced: none\nMEDIUM Missing test coverage: \n[…]\n cancellation while waiting, pre-cancelled token.\n\nBuild: 0 errors, 0 warnings.\nTests: 190 total, 189 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "feat(framework): add AsyncSemaphoreLease primitive", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T03:10:30Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "89e0bb0b812d5658ed6d0ee2f5d86c80b75ee4ab", "body": "Self-assessment (HIGH=none, MEDIUM=none, LOW only):\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 182 total, 181 passed, 1 skipped,\n 0 failed (unchanged, comments-only)\nMEDIUM \n[…]\n comments on public APIs throughout the codebase.\n\nBuild: 0 errors, 0 warnings.\nTests: 182 total, 181 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: trim chatty comments per code-comment-discipline", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T00:01:55Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "ccb5b043201d54b5c75e9ec0419ce1f2c138b2c5", "body": "…ss-lib parity)\n\nSelf-assessment (HIGH=none, MEDIUM=none, LOW only):\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 182 total, 181 passed, 1 skipped,\n 0 failed (no test changes;\n[…]\n-2/3 in v0.2.0; Roslynator\nanalyzer adoption is the remaining piece to actually exercise the .editorconfig\nRCSxxx rule severities.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: add Roslynator analyzer + fix surfaced RCS issues (genesis cla…", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T00:00:25Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "570e60ac372c509f0c30e725923c3cb6dadacd2d", "body": "Self-assessment (HIGH=none, MEDIUM=none, LOW only):\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 182 total, 181 passed, 1 skipped,\n 0 failed (+16 new Try tests)\nMEDIUM Tech de\n[…]\nng fix from the prior\ncommit. Will be promoted to a real version section when the next tag goes out.\n\nBuild: 0 errors, 0 warnings.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "feat: add Try orchestration layer + LoggerCancellationExtensions", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-24T00:00:12Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "5d7efb8f2a06ab34cec8d7ea4f698c05c3332fcf", "body": "…cessor)\n\nSelf-assessment (HIGH=none, MEDIUM=none, LOW only):\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 166 total, 165 passed, 1 skipped,\n 0 failed (+13 new tests covering\n\n[…]\n requires consuming projects to be\nOutputType=Exe (i.e. test runners). This package extends xUnit; it is\nnot itself a test runner.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "feat: new package NexusLabs.Xunit.Assertions 0.1.0 (Testing.Xunit suc…", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T23:59:08Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "f37dce906adc16aa2202e86bc89ca2c0280ea292", "body": "Self-assessment (HIGH=none, MEDIUM=none, LOW only):\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 153 total, 152 passed, 1 skipped, 0 failed\n (+4 new null-callback regression tests)\nMEDIUM Tech debt introduce\n[…]\nerationException instead of ArgumentNullException when the\ncallback returns null. Acceptable per 0.x semver (anything may change).\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "fix: explicit null handling for callback returns in Safely.GetResult*", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T23:58:30Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "6dec1ca25cb30b8d749a427be1467683626dd365", "body": "Brings NexusLabs.Framework in line with how genesis scaffolds new\nprojects. The repo was never scaffolded from genesis (it predates the\ntemplate system), so this is a first-time application of the standard\nseed.\n\nSelf-assessment for the gated pre-commit hook (HIGH=none, LOW only):\n\nHIGH Omitted be\n[…]\ntributors should also set core.hooksPath after clone.\n\nBuild: 0 errors, 0 warnings.\nTests: not re-run (no production code change).\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: apply genesis instruction files + git hooks + AGENTS.md scaffold", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T23:58:13Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "2535cad0b36f27402348514044a613fb4defffde", "body": "Folds in the 5 Dependabot PRs opened on first push to master, so they don't\neach land as separate merge commits and clutter the v0.2.0 history.\n\nNuGet (Directory.Packages.props):\n- Microsoft.SourceLink.GitHub 10.0.203 -> 10.0.300\n- Microsoft.NET.Test.Sdk 18.0.1 -> 18.5.1\n- xunit.v3 \n[…]\nmaster.\nDependabot will close them automatically (or they can be closed manually\nwith \"Superseded by master \u003csha>\" as the reason).\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: apply pending Dependabot bumps in one commit (superseding 5 PRs)", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:42:14Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "a8e06d1a40501dec58f645c348db22f146d8969d", "body": "…al nuget.org UI\n\nThe Phase 8 doc described fields that don't exist on the actual Create form\n(\"Package ID glob\") and named one field wrong (\"policy owner\" instead of\n\"Package Owner\"). Confirmed against the live UI: the form is exactly\nPolicy Name + Package Owner + Repository Owner + Repository + Wo\n[…]\nime, and the resurrection-attack protection they\n provide.\n- Restructured the table to match the actual UI field labels in order.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "docs(trusted-publishing): correct setup walkthrough to match the actu…", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:24:37Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "8e03734274cf3bd59f52fda660ed533196c43776", "body": "…t NuGet/login@v1 README)\n\nPhase 8 wrote release.yml using NuGet/login@v1 with input `endpoint:` and\nno explicit --api-key on the subsequent dotnet nuget push. Per the action's\nofficial README at https://github.com/NuGet/login the actual contract is:\n\n- Required input: `user:` (the nuget.org usernam\n[…]\nthe menu\n item, the feature is not yet enabled for your account)\n\nNo code change. Workflow files are inert until a tag is pushed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "fix: release.yml requires user: + explicit --api-key (verified agains…", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:24:36Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "25b5183bccd40c8fa650899eb5bc16d2ec0c95dd", "body": "…re in flux)\n\nPer maintainer feedback: the package surface still has known follow-ups\n(deprecated ITimeProvider, pre-existing Safely null-handling gap, race in\nMulticastDelegateExtensions) so committing to 1.0.0 prematurely promises\nAPI stability we are not ready to underwrite. semver allows further\n[…]\n when ready, tag v0.2.0 (not v1.0.0):\n git tag -a v0.2.0 -m \"0.2.0 - modernization, archived 6 packages\"\n git push origin v0.2.0\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "fix: retarget v1.0.0 cut as 0.2.0 (stay in 0.x while several things a…", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:24:28Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "b42d29b994487d4351c5c356181cc6d0d849d440", "body": "NexusLabs.Framework version: 0.1.4 -> 1.0.0\n\nAdds CHANGELOG.md (Keep a Changelog format) documenting the v1 release:\n- Removed (Breaking): 12 types deleted in Phase 2b\n- Changed (Breaking): 11 types moved out of BCL namespaces in Phase 5a\n- Deprecated: ITimeProvider + TimeProviderWrapper\n- Fixed: St\n[…]\none-time nuget.org dashboard config)\n- docs/archived-packages/NUGET_DEPRECATION_CHECKLIST.md (mark each 0.x package ID Deprecated)\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: phase 10 - cut v1.0.0 (CHANGELOG + version bump)", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:24:19Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "0a60df5ef54086ae27b8b582281660d03ef52628", "body": "Procedure:\n1. Installed Microsoft.DotNet.ApiCompat.Tool 10.0.300 as a local dotnet tool\n (manifest at .config/dotnet-tools.json).\n2. Downloaded NexusLabs.Framework 0.1.4 from nuget.org and extracted lib/net10.0/.dll.\n3. Ran: dotnet apicompat --left \u003c0.1.4 dll> --right \u003cv1 dll>\n4. Wrote docs/v1-bre\n[…]\ndownloaded baseline, extracted dll, and raw diff)\nis already covered by .gitignore from Phase 1A so nothing under it is committed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: phase 9 - v1 breaking-API inventory via dotnet apicompat", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:24:19Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "78e5957be23191ca713f681e1fa92b23fe099803", "body": "Removes:\n- .circleci/ (the prior CI was restore + build only; no tests, no pack, no publish)\n\nAdds:\n- .github/workflows/ci.yml\n Trigger: PR to master, push to master, workflow_dispatch.\n Steps: actions/checkout@v6, NuGet restore cache, setup-dotnet@v5 (reads global.json),\n restore, build, \n[…]\ne to land before\n the dashboard setup.\n\nBuild verify (workflow files are not compiled, so this is just a sanity check):\n0 errors.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: phase 8 - GitHub Actions CI + OIDC release pipeline", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:24:00Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "a1351f69e527107ad6071a8afb1cba654193788f", "body": "LICENSE:\n- Added MIT LICENSE at repo root.\n\nREADME.md:\n- Rewrote from the BitBucket-template scaffold into a real package README\n describing surviving types, archived packages, and install instructions.\n Used as both repo README and PackageReadmeFile.\n\nDirectory.Build.props - packaging conventions\n[…]\np this phase semantically inert for the package\noutput. The bump to 1.0.0 happens in Phase 10 alongside the CHANGELOG.md creation.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: phase 7 - package metadata foundation", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:24:00Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "7ee1004ab1fc217b46a119a951ec465d74e4ebcf", "body": "Hoists test-project conventions into the repo-wide Directory.Build.props\nso any future *.Tests project gets standard wiring automatically:\n\nFor projects matching $(MSBuildProjectName.EndsWith('.Tests')):\n- IsPackable=false, IsTestProject=true, OutputType=Exe (required for MTP)\n- PackageReferences: M\n[…]\nt change package outputs or test runner behavior.\n\nBuild: 0 errors, 0 warnings.\nTests: 149 total, 148 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: phase 6 - test runner conventions in Directory.Build.props", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:24:00Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "aa5dfc5e4a5958b3b85affba44de7a0c74a8cd8f", "body": "Library code (src/NexusLabs.Framework) warning fixes:\n\nDiagnostics/ProcessExtensions.cs:\n- TaskCompletionSource\u003cobject> -> TaskCompletionSource\u003cobject?> (TrySetResult(null) was CS8625)\n- Action\u003cProcess> afterStartCallback = default -> Action\u003cProcess>? afterStartCallback = null\n\nSafely.cs:\n- 4x 'retu\n[…]\nw enabled repo-wide.\n\nBuild: 0 errors, 0 warnings.\nTests: 149 total, 148 passed, 1 skipped (flaky test from Phase 5d-1), 0 failed.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: phase 5d-2/3 - fix lib warnings + flip TreatWarningsAsErrors=true", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:24:00Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "680fcad5f6f039b11d82b95e7e619d19c5093a55", "body": "Test fixes:\n\n1. TriedNullExTests.ImplicitConversion_NullValueToTriedReturnType{Inline,SplitLine}_ExpectedValue\n The tests were materially broken: Assert.Null(TryDoSomething()) boxed the\n TriedNullEx\u003cint?> struct into object, which is never null. Fixed by\n explicitly typing the local as 'int? r\n[…]\ne guidance).\n\nTest results: 149 total, 148 passed, 1 skipped, 0 failed.\nBuild: 0 errors. Test-project warnings drop from ~96 to 0.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: phase 5d-1 - fix flaky tests + suppress test analyzer noise", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:24:00Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "7c20c569d136b3e781472f6bab0ffc4fccde3a5e", "body": "The Position setter docs claimed 'Setting a value less than or equal to zero\nis ignored' but 0.1.4's release notes already documented the fix removing that\nguard. The implementation just delegates to the wrapped stream. The\nPosition_SetToZero_Works test confirms the intended behavior.\n\nUpdated both \n[…]\nmarks> and the property-level \u003csummary> to\ndescribe the actual unconditional-delegation behavior.\n\nNo behavior change (docs-only).\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: phase 5c - fix StreamWithLength.Position docs vs impl mismatch", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:23:59Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "230925709efb7b6a8acbb46de570ee7f1f2797e2", "body": "Marks both as Obsolete with a warning-level diagnostic pointing at:\n- BCL System.TimeProvider (.NET 8+) as the canonical replacement\n- Microsoft.Extensions.TimeProvider.Testing package for FakeTimeProvider in tests\n\nBoth types remain functional and binary-compatible. They are scheduled for\nfull remo\n[…]\nuild: 0 errors, 83 warnings (stable - the fluctuations are MSBuild dedup\nnoise on the same set of pre-existing analyzer warnings).\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: phase 5b - [Obsolete] ITimeProvider + TimeProviderWrapper", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:23:59Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "01309ae08b7ae5c2084136f1f12582451746961f", "body": "…Framework.X)\n\nMoves all surviving Framework files out of BCL namespaces into NexusLabs.Framework.* sub-namespaces. This is a breaking change for downstream consumers but the entire point of the v1 cut.\n\nFiles moved:\n- Data/IAsyncDbCommand, IAsyncDbConnection, IAsyncDbDataReader, IDbConnectionFactor\n[…]\nstics;' added where the moved types are used.\nMechanical fix; clear 'type or namespace not found' errors will point each consumer.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: phase 5a - namespace pollution cleanup (System.X -> NexusLabs.…", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:23:59Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "45f937bdf376ff1455cec3a8e13ee047646e0ab8", "body": "- Add Directory.Packages.props with ManagePackageVersionsCentrally=true\n- Pin test package versions: Microsoft.NET.Test.Sdk 18.0.1, xunit.v3 3.2.1, xunit.runner.visualstudio 3.1.5\n- Remove Version= attributes from PackageReferences in tests/NexusLabs.Framework.Tests.csproj\n- CentralPackageTransitive\n[…]\nero PackageReferences (pure library) so no CPM work there.\n\nBuild: 0 errors, 83 warnings (unchanged from Phase 3 - pure refactor).\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: phase 4 - Central Package Management", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:23:46Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "5758ae6e494f42ee75417cd871dcc32b76f71378", "body": "Pure git mv operations, no content edits:\n- NexusLabs.Framework/ -> src/NexusLabs.Framework/\n- NexusLabs.Framework.Tests/ -> tests/NexusLabs.Framework.Tests/\n\nUpdated:\n- NexusLabs.slnx: added Solution Items folder, src/ folder, tests/ folder\n- tests/NexusLabs.Framework.Tests/NexusLabs.Fram\n[…]\n\\..\\src\\NexusLabs.Framework\\NexusLabs.Framework.csproj\n\nBuild: 0 errors, 83 warnings (unchanged from Phase 2b - pure layout move).\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: phase 3 - layout (src/ and tests/)", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:23:46Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "54adcf491e10f8c8eeb53470dfc3a448b8dbad51", "body": "Deletes 11 files from NexusLabs.Framework + 2 matching test files:\n\nDropped library files:\n- Cast.cs / ICast.cs (346 lines of reflection-based magic-cast)\n- OnlyOnce.cs / IOnlyOnce.cs (Lazy\u003cT> does this trivially)\n- StringExtensions.cs (one trivial extension)\n- IO/BlockingBufferStream.cs (System.IO.\n[…]\nreferences any\nof the dropped types (grep showed only self-references).\n\nBuild: 0 errors, 83 warnings (down from 129 in Phase 2a).\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: phase 2b - internal Framework triage", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T21:23:46Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "77310983d24941701f81561fe4ec8f53966d5714", "body": "Removes the following from disk + .slnx:\n- NexusLabs.Autofac + NexusLabs.Autofac.Tests\n- NexusLabs.Collections.Generic + .Tests + .Benchmarks\n- NexusLabs.Contracts\n- NexusLabs.Dynamo + NexusLabs.Dynamo.Tests\n- NexusLabs.Reflection + NexusLabs.Reflection.Tests\n- NexusLabs.Testing.Xunit\n\nAdds docs/arc\n[…]\nerrors, 129 warnings (down from 285 in Phase 1A baseline as\ndeleted projects no longer surface their CS86xx nullability warnings).\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: phase 2a - archive 6 sibling packages", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T17:17:43Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "974e6e826091237ccb6b08bfa2f10f9562c08707", "body": "…nfig, Directory.Build.props, .slnx, .gitignore)\n\nAdds genesis-aligned baseline infrastructure with no semantic build change:\n- global.json pinning .NET 10 SDK + MTP test runner\n- .editorconfig copied verbatim from genesis seed\n- nuget.config pinning official nuget.org feed\n- Directory.Build.props: \n[…]\nssed)\n- TargetFramework default -> later phase (after archived projects are gone)\n- IVT, packaging metadata, SourceLink -> Phase 7\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com>", "is_bot": false, "headline": "chore: phase 1a - neutral infra (global.json, .editorconfig, nuget.co…", "author_name": "ncosentino", "author_login": "ncosentino", "committed_at": "2026-05-23T17:14:37Z", "body_truncated": true, "is_coding_agent": true }, { "oid": "93ac9e8277c2132139d1f60c9f082de2e6e83f00", "body": "- Added tests for StreamWithLength\n- Fixed issue with StreamWithLength where setting Position to zero would be a no-op\n- Fixed tests for NexusLabs.Framework.Tests to work with xUnitv3", "is_bot": false, "headline": "0.1.4 - Fixes For StreamWithLength", "author_name": "Nick Cosentino", "author_login": null, "committed_at": "2025-12-05T04:00:18Z", "body_truncated": false, "is_coding_agent": false } ], "releases_count": 8, "commits_last_year": 99, "latest_release_at": "2026-07-24T16:39:49Z", "latest_release_tag": "v0.2.7", "releases_from_tags": true, "days_since_last_push": 0, "active_weeks_last_year": 11, "days_since_latest_release": 0, "mean_days_between_releases": 8.8 }, "community": { "has_readme": true, "has_license": true, "has_description": false, "has_contributing": false, "health_percentage": 28, "has_issue_template": false, "has_code_of_conduct": false, "has_pull_request_template": false }, "ecosystem": { "packages": [ { "name": "NexusLabs.CodeAnalysis.Testing.TUnit", "exists": true, "license": null, "keywords": [], "ecosystem": "nuget", "matches_repo": true, "registry_url": "https://www.nuget.org/packages/NexusLabs.CodeAnalysis.Testing.TUnit", "is_deprecated": false, "latest_version": "0.2.7", "repository_url": "https://github.com/ncosentino/NexusLabs.Framework", "versions_count": 7, "total_downloads": 1107, "dependents_count": null, "deprecation_note": null, "maintainers_count": null, "monthly_downloads": null, "first_published_at": null, "latest_published_at": "2026-07-24T16:54:34.610000Z", "latest_version_yanked": null, "days_since_latest_publish": 0 }, { "name": "NexusLabs.Data.Sql.MySql", "exists": true, "license": null, "keywords": [], "ecosystem": "nuget", "matches_repo": true, "registry_url": "https://www.nuget.org/packages/NexusLabs.Data.Sql.MySql", "is_deprecated": false, "latest_version": "0.2.7", "repository_url": "https://github.com/ncosentino/NexusLabs.Framework", "versions_count": 7, "total_downloads": 740, "dependents_count": null, "deprecation_note": null, "maintainers_count": null, "monthly_downloads": null, "first_published_at": null, "latest_published_at": "2026-07-24T16:54:37.193000Z", "latest_version_yanked": null, "days_since_latest_publish": 0 }, { "name": "NexusLabs.Data.Sql", "exists": true, "license": null, "keywords": [], "ecosystem": "nuget", "matches_repo": true, "registry_url": "https://www.nuget.org/packages/NexusLabs.Data.Sql", "is_deprecated": false, "latest_version": "0.2.7", "repository_url": "https://github.com/ncosentino/NexusLabs.Framework", "versions_count": 7, "total_downloads": 807, "dependents_count": null, "deprecation_note": null, "maintainers_count": null, "monthly_downloads": null, "first_published_at": null, "latest_published_at": "2026-07-24T16:54:34.900000Z", "latest_version_yanked": null, "days_since_latest_publish": 0 }, { "name": "NexusLabs.Framework.Analyzers", "exists": true, "license": null, "keywords": [], "ecosystem": "nuget", "matches_repo": true, "registry_url": "https://www.nuget.org/packages/NexusLabs.Framework.Analyzers", "is_deprecated": false, "latest_version": "0.2.7", "repository_url": "https://github.com/ncosentino/NexusLabs.Framework", "versions_count": 7, "total_downloads": 5283, "dependents_count": null, "deprecation_note": null, "maintainers_count": null, "monthly_downloads": null, "first_published_at": null, "latest_published_at": "2026-07-24T16:54:35.343000Z", "latest_version_yanked": null, "days_since_latest_publish": 0 }, { "name": "NexusLabs.Framework", "exists": true, "license": null, "keywords": [], "ecosystem": "nuget", "matches_repo": true, "registry_url": "https://www.nuget.org/packages/NexusLabs.Framework", "is_deprecated": false, "latest_version": "0.2.7", "repository_url": "https://github.com/ncosentino/NexusLabs.Framework", "versions_count": 39, "total_downloads": 34521, "dependents_count": null, "deprecation_note": null, "maintainers_count": null, "monthly_downloads": null, "first_published_at": null, "latest_published_at": "2026-07-24T16:54:35.667000Z", "latest_version_yanked": null, "days_since_latest_publish": 0 } ] }, "popularity": { "forks": 2, "stars": 12, "watchers": 1, "fork_history": { "days": [ { "date": "2023-02-26", "count": 1 }, { "date": "2023-12-15", "count": 1 } ], "complete": true, "collected": 2, "total_forks": 2 }, "star_history": null, "open_issues_and_prs": 2 }, "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/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj", "src/NexusLabs.Data.Sql.MySql/NexusLabs.Data.Sql.MySql.csproj", "src/NexusLabs.Data.Sql/NexusLabs.Data.Sql.csproj", "src/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj", "src/NexusLabs.Framework.Analyzers/NexusLabs.Framework.Analyzers.csproj", "src/NexusLabs.Framework/NexusLabs.Framework.csproj", "src/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj", "src/NexusLabs.StronglyTypedIds.Analyzers/NexusLabs.StronglyTypedIds.Analyzers.csproj", "src/NexusLabs.StronglyTypedIds/NexusLabs.StronglyTypedIds.csproj", "src/NexusLabs.TUnit.Assertions.Analyzers/NexusLabs.TUnit.Assertions.Analyzers.csproj", "src/NexusLabs.TUnit.Assertions/NexusLabs.TUnit.Assertions.csproj", "src/NexusLabs.Xunit.Assertions/NexusLabs.Xunit.Assertions.csproj", "tests/NexusLabs.CodeAnalysis.Testing.TUnit.Tests/NexusLabs.CodeAnalysis.Testing.TUnit.Tests.csproj", "tests/NexusLabs.Data.Sql.MySql.Tests/NexusLabs.Data.Sql.MySql.Tests.csproj", "tests/NexusLabs.Data.Sql.Tests/NexusLabs.Data.Sql.Tests.csproj", "tests/NexusLabs.Framework.Analyzers.Tests/NexusLabs.Framework.Analyzers.Tests.csproj", "tests/NexusLabs.Framework.Tests/NexusLabs.Framework.Tests.csproj", "tests/NexusLabs.StronglyTypedIds.Tests/NexusLabs.StronglyTypedIds.Tests.csproj", "tests/NexusLabs.Xunit.Assertions.Tests/NexusLabs.Xunit.Assertions.Tests.csproj", "tests/TUnit/NexusLabs.TUnit.Assertions.Tests/NexusLabs.TUnit.Assertions.Tests.csproj" ], "largest_source_bytes": 45288, "source_files_sampled": 175, "oversized_source_files": 0, "agent_instruction_files": [ ".github/copilot-instructions.md", ".github/instructions/genesis/adr.instructions.md", ".github/instructions/genesis/astro/components.instructions.md", ".github/instructions/genesis/astro/config.instructions.md", ".github/instructions/genesis/astro/content-collections.instructions.md", ".github/instructions/genesis/astro/humans-txt.instructions.md", ".github/instructions/genesis/astro/layouts.instructions.md", ".github/instructions/genesis/astro/llms-txt.instructions.md", ".github/instructions/genesis/astro/pages.instructions.md", ".github/instructions/genesis/astro/robots-txt.instructions.md", ".github/instructions/genesis/astro/security.instructions.md", ".github/instructions/genesis/astro/seo.instructions.md", ".github/instructions/genesis/astro/sitemap.instructions.md", ".github/instructions/genesis/astro/styles.instructions.md", ".github/instructions/genesis/blazor/code-behind.instructions.md", ".github/instructions/genesis/blazor/components.instructions.md", ".github/instructions/genesis/blazor/css-isolation.instructions.md", ".github/instructions/genesis/blazor/extensibility.instructions.md", ".github/instructions/genesis/blazor/performance.instructions.md", ".github/instructions/genesis/blazor/render-modes.instructions.md", ".github/instructions/genesis/carter-modules.instructions.md", ".github/instructions/genesis/consumers.instructions.md", ".github/instructions/genesis/deployment-github-pages.instructions.md", ".github/instructions/genesis/feature-structure.instructions.md", ".github/instructions/genesis/file-type-isolation.instructions.md", ".github/instructions/genesis/http-clients.instructions.md", ".github/instructions/genesis/instructions.instructions.md", ".github/instructions/genesis/jobs/job-schedulers.instructions.md", ".github/instructions/genesis/jobs/jobs.instructions.md", ".github/instructions/genesis/logging.instructions.md", ".github/instructions/genesis/masstransit-contracts.instructions.md", ".github/instructions/genesis/n-plus-one-prevention.instructions.md", ".github/instructions/genesis/options/http-client-options.instructions.md", ".github/instructions/genesis/options/options.instructions.md", ".github/instructions/genesis/plugins.instructions.md", ".github/instructions/genesis/post-api-handlers.instructions.md", ".github/instructions/genesis/project-structure.instructions.md", ".github/instructions/genesis/raw-string-literals.instructions.md", ".github/instructions/genesis/repositories.instructions.md", ".github/instructions/genesis/request-validators.instructions.md", ".github/instructions/genesis/result-dtos.instructions.md", ".github/instructions/genesis/roslyn-analyzers.instructions.md", ".github/instructions/genesis/source-generators.instructions.md", ".github/instructions/genesis/sql-migrations.instructions.md", ".github/instructions/genesis/testing/tests-api.instructions.md", ".github/instructions/genesis/testing/tests-common.instructions.md", ".github/instructions/genesis/testing/tests-mock-boundaries.instructions.md", ".github/instructions/genesis/testing/tests-repository.instructions.md", ".github/instructions/genesis/testing/tests-service.instructions.md", ".github/instructions/genesis/testing/time-provider-testing.instructions.md", ".github/instructions/genesis/time-provider.instructions.md", ".github/instructions/genesis/ui/app-shell.instructions.md", ".github/instructions/genesis/ui/avalonia.instructions.md", ".github/instructions/genesis/ui/string-resources.instructions.md", ".github/instructions/genesis/ui/theme-resources.instructions.md", ".github/instructions/genesis/ui/viewmodel.instructions.md", ".github/instructions/genesis/ui/wpf.instructions.md", ".github/instructions/genesis/ui/xaml-shared.instructions.md", ".github/instructions/genesis/unit-of-work.instructions.md", ".github/instructions/genesis/web-dtos.instructions.md", "AGENTS.md", "CLAUDE.md" ], "agent_instruction_max_bytes": 13939 }, "dependencies": { "manifests": [], "advisories": { "error": "No resolved dependencies carried a version and a supported ecosystem", "scope": "repository_graph", "source": null, "findings": [], "collected": false, "malicious": [], "truncated": false, "by_severity": {}, "advisory_count": 0, "affected_count": 0, "assessed_count": 0, "malicious_count": 0, "assessed_package": null, "unassessed_count": 17, "direct_affected_count": 0 }, "ecosystems": [], "dependencies": [ { "name": "Microsoft.CodeAnalysis.Analyzer.Testing", "manifest": "src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.CodeAnalysis.Common", "manifest": "src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.CodeAnalysis.CSharp.Workspaces", "manifest": "src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "TUnit.Assertions", "manifest": "src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "MySql.Data", "manifest": "src/NexusLabs.Data.Sql.MySql/NexusLabs.Data.Sql.MySql.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.Extensions.Logging.Abstractions", "manifest": "src/NexusLabs.Data.Sql/NexusLabs.Data.Sql.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.CodeAnalysis.CSharp", "manifest": "src/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.CodeAnalysis.CSharp.Workspaces", "manifest": "src/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.CodeAnalysis.Analyzers", "manifest": "src/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.CodeAnalysis.CSharp", "manifest": "src/NexusLabs.Framework.Analyzers/NexusLabs.Framework.Analyzers.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.CodeAnalysis.Analyzers", "manifest": "src/NexusLabs.Framework.Analyzers/NexusLabs.Framework.Analyzers.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.Extensions.Logging.Abstractions", "manifest": "src/NexusLabs.Framework/NexusLabs.Framework.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.CodeAnalysis.CSharp", "manifest": "src/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.CodeAnalysis.CSharp.Workspaces", "manifest": "src/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.CodeAnalysis.Analyzers", "manifest": "src/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.CodeAnalysis.CSharp", "manifest": "src/NexusLabs.StronglyTypedIds.Analyzers/NexusLabs.StronglyTypedIds.Analyzers.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.CodeAnalysis.Analyzers", "manifest": "src/NexusLabs.StronglyTypedIds.Analyzers/NexusLabs.StronglyTypedIds.Analyzers.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.Extensions.DependencyInjection.Abstractions", "manifest": "src/NexusLabs.StronglyTypedIds/NexusLabs.StronglyTypedIds.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "StronglyTypedId", "manifest": "src/NexusLabs.StronglyTypedIds/NexusLabs.StronglyTypedIds.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.CodeAnalysis.CSharp", "manifest": "src/NexusLabs.TUnit.Assertions.Analyzers/NexusLabs.TUnit.Assertions.Analyzers.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "Microsoft.CodeAnalysis.Analyzers", "manifest": "src/NexusLabs.TUnit.Assertions.Analyzers/NexusLabs.TUnit.Assertions.Analyzers.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "TUnit.Assertions", "manifest": "src/NexusLabs.TUnit.Assertions/NexusLabs.TUnit.Assertions.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "xunit.v3.assert", "manifest": "src/NexusLabs.Xunit.Assertions/NexusLabs.Xunit.Assertions.csproj", "ecosystem": "nuget", "version_constraint": null }, { "name": "xunit.v3.extensibility.core", "manifest": "src/NexusLabs.Xunit.Assertions/NexusLabs.Xunit.Assertions.csproj", "ecosystem": "nuget", "version_constraint": null } ], "all_dependencies": { "error": null, "source": "github-sbom", "packages": [ { "name": "Microsoft.CodeAnalysis.Analyzer.Testing", "direct": true, "version": null, "ecosystem": "nuget" }, { "name": "Microsoft.CodeAnalysis.Analyzers", "direct": true, "version": null, "ecosystem": "nuget" }, { "name": "Microsoft.CodeAnalysis.Common", "direct": true, "version": null, "ecosystem": "nuget" }, { "name": "Microsoft.CodeAnalysis.CSharp", "direct": true, "version": null, "ecosystem": "nuget" }, { "name": "Microsoft.CodeAnalysis.CSharp.Workspaces", "direct": true, "version": null, "ecosystem": "nuget" }, { "name": "Microsoft.Extensions.DependencyInjection.Abstractions", "direct": true, "version": null, "ecosystem": "nuget" }, { "name": "Microsoft.Extensions.Logging.Abstractions", "direct": true, "version": null, "ecosystem": "nuget" }, { "name": "MySql.Data", "direct": true, "version": null, "ecosystem": "nuget" }, { "name": "StronglyTypedId", "direct": true, "version": null, "ecosystem": "nuget" }, { "name": "TUnit.Assertions", "direct": true, "version": null, "ecosystem": "nuget" }, { "name": "xunit.v3.assert", "direct": true, "version": null, "ecosystem": "nuget" }, { "name": "xunit.v3.extensibility.core", "direct": true, "version": null, "ecosystem": "nuget" }, { "name": "Microsoft.CodeAnalysis.CSharp.Analyzer.Testing", "direct": false, "version": null, "ecosystem": "nuget" }, { "name": "Microsoft.CodeAnalysis.CSharp.CodeFix.Testing", "direct": false, "version": null, "ecosystem": "nuget" }, { "name": "Microsoft.Extensions.DependencyInjection", "direct": false, "version": null, "ecosystem": "nuget" }, { "name": "Microsoft.Extensions.TimeProvider.Testing", "direct": false, "version": null, "ecosystem": "nuget" }, { "name": "Moq", "direct": false, "version": null, "ecosystem": "nuget" } ], "collected": true, "truncated": false, "total_count": 17, "direct_count": 12, "indirect_count": 5 } }, "maintainership": { "issues": { "open_prs": 2, "merged_prs": 18, "open_issues": 0, "closed_ratio": 1, "closed_issues": 1, "closed_unmerged_prs": 8 }, "bus_factor": 1, "bot_contributors": 1, "top_contributors": [ { "type": "User", "login": "ncosentino", "commits": 203, "avatar_url": "https://avatars.githubusercontent.com/u/5169280?v=4" } ], "contributors_sampled": 1, "top_contributor_share": 1 }, "quality_signals": { "has_ci": true, "has_tests": true, "ci_workflows": [ "ci.yml", "release.yml" ], "has_docs_dir": true, "linter_configs": [], "has_editorconfig": true, "has_linter_config": false, "has_precommit_config": false }, "security_signals": { "lockfiles": [], "scorecard": { "checks": [ { "name": "Binary-Artifacts", "score": 10, "reason": "no binaries found in the repo", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts" }, { "name": "Branch-Protection", "score": 0, "reason": "branch protection not enabled on development/release branches", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection" }, { "name": "CI-Tests", "score": 10, "reason": "17 out of 17 merged PRs checked by a CI test -- score normalized to 10", "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": 0, "reason": "Found 0/23 approved changesets -- score normalized to 0", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review" }, { "name": "Contributors", "score": 3, "reason": "project has 1 contributing companies or organizations -- score normalized to 3", "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": 10, "reason": "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": 10, "reason": "license file detected", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license" }, { "name": "Maintained", "score": 10, "reason": "30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10", "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": 0, "reason": "dependency not pinned by hash detected -- score normalized to 0", "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": null, "reason": "no releases found", "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases" }, { "name": "Token-Permissions", "score": 10, "reason": "GitHub workflow tokens follow principle of least privilege", "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": "219016f16e6acd9b1d079df3b772baa1151ef8ed", "ran_at": "2026-07-24T17:02:18Z", "aggregate_score": 6, "scorecard_version": "v5.5.0" }, "has_codeql_workflow": false, "has_security_policy": false, "has_dependabot_config": true }, "contribution_flow": { "collected": true, "ci_last_run_at": "2026-07-24T16:54:41Z", "oldest_open_prs": [ { "number": 24, "created_at": "2026-07-18T07:08:05Z", "last_comment_at": "2026-07-20T03:17:02Z", "last_comment_author": "copilot-swe-agent" }, { "number": 27, "created_at": "2026-07-20T03:19:14Z", "last_comment_at": null, "last_comment_author": null } ], "last_merged_pr_at": "2026-07-24T16:39:50Z", "ci_last_conclusion": "SUCCESS", "oldest_open_issues": [] } }, "config": { "disabled_metrics": [], "disabled_categories": [], "disabled_components": {} }, "source": { "url": "https://github.com/ncosentino/NexusLabs.Framework", "host": "github.com", "name": "NexusLabs.Framework", "owner": "ncosentino" }, "metrics": { "overall": { "key": "overall", "band": "good", "name": "Overall health", "note": "The weighted overall 62 is calibrated to 69 on the published index scale (record calibration 2026-08-02).", "notes": [ { "code": "overall_calibration", "params": { "raw": 62, "calibrated": 69, "calibration": "2026-08-02" } } ], "value": 69, "inputs": { "security": 60, "vitality": 78, "community": 39, "governance": 57, "calibration": "2026-08-02", "engineering": 70, "ai_readiness": 78, "weighted_overall_raw": 62 }, "components": [] }, "categories": [ { "key": "vitality", "band": "good", "name": "Vitality", "value": 78, "weight": 0.21, "metrics": [ { "key": "development_activity", "band": "good", "name": "Development activity", "note": null, "notes": [], "value": 72, "inputs": { "commits_last_year": 99, "human_commit_share": 0.92, "days_since_last_push": 0, "active_weeks_last_year": 11 }, "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": "11/52 weeks with commits", "points": 7.6, "status": "partial", "details": [ { "code": "commit_cadence_weeks", "params": { "weeks": 11 } } ], "max_points": 36 }, { "key": "commit_volume", "name": "Commit volume", "detail": "99 commits in the last year", "points": 18, "status": "partial", "details": [ { "code": "commits_last_year", "params": { "count": 99 } } ], "max_points": 18 }, { "key": "openssf_scorecard_maintained", "name": "OpenSSF Scorecard: Maintained", "detail": "30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10", "points": 10, "status": "met", "details": [], "max_points": 10 } ] }, { "key": "release_discipline", "band": "excellent", "name": "Release discipline", "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.", "notes": [ { "code": "excluded_no_data", "params": { "components": [ "openssf_scorecard_signed_releases" ] } }, { "code": "weights_renormalized", "params": {} } ], "value": 88, "inputs": { "releases_count": 8, "latest_release_tag": "v0.2.7", "releases_from_tags": true, "days_since_latest_release": 0, "mean_days_between_releases": 8.8 }, "components": [ { "key": "ships_releases", "name": "Ships releases", "detail": "8 version tags (no GitHub releases)", "points": 16.2, "status": "partial", "details": [ { "code": "version_tags_no_releases", "params": { "count": 8 } } ], "max_points": 27 }, { "key": "release_recency", "name": "Release recency", "detail": "latest release 0 days ago", "points": 36, "status": "met", "details": [ { "code": "release_recency", "params": { "days": 0 } } ], "max_points": 36 }, { "key": "release_cadence", "name": "Release cadence", "detail": "a release every ~8.8 days", "points": 27, "status": "met", "details": [ { "code": "release_cadence", "params": { "gap": 8.8 } } ], "max_points": 27 }, { "key": "openssf_scorecard_signed_releases", "name": "OpenSSF Scorecard: Signed-Releases", "detail": "no releases found", "points": 0, "status": "excluded", "details": [ { "code": "no_data", "params": {} } ], "max_points": 10 } ] }, { "key": "abandonment", "band": "exceptional", "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": 9, "days_since_last_human_commit_is_floor": false }, "components": [ { "key": "project_is_still_maintained", "name": "Project is still maintained", "detail": "last human commit 9 days ago", "points": 100, "status": "met", "details": [ { "code": "abandonment_maintained", "params": { "days": 9 } } ], "max_points": 100 } ] } ], "description": "Is the project alive — is code being written and are releases shipping?" }, { "key": "community", "band": "weak", "name": "Community & Adoption", "value": 39, "weight": 0.17, "metrics": [ { "key": "popularity", "band": "critical", "name": "Popularity & adoption", "note": null, "notes": [], "value": 17, "inputs": { "forks": 2, "stars": 12, "watchers": 1, "growth_state": "unverified", "growth_factor_pct": 100, "growth_unverified_reason": "no_history" }, "components": [ { "key": "stars", "name": "Stars", "detail": "12 stars", "points": 16.9, "status": "partial", "details": [ { "code": "stars", "params": { "count": 12 } } ], "max_points": 60 }, { "key": "forks", "name": "Forks", "detail": "2 forks", "points": 0, "status": "missed", "details": [ { "code": "forks", "params": { "count": 2 } } ], "max_points": 25 }, { "key": "watchers", "name": "Watchers", "detail": "1 watchers", "points": 0, "status": "missed", "details": [ { "code": "watchers", "params": { "count": 1 } } ], "max_points": 15 } ] }, { "key": "community_health", "band": "moderate", "name": "Community health", "note": null, "notes": [], "value": 50, "inputs": { "has_readme": true, "has_license": true, "readme_badges": null, "has_contributing": false, "has_issue_template": false, "has_code_of_conduct": false, "readme_badge_services": [], "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": "recognized license (MIT)", "points": 22.5, "status": "met", "details": [ { "code": "license_standard", "params": {} }, { "code": "license_spdx", "params": { "spdx": "MIT" } } ], "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": "moderate", "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": 60, "inputs": { "packages": [ "NexusLabs.CodeAnalysis.Testing.TUnit", "NexusLabs.Data.Sql.MySql", "NexusLabs.Data.Sql", "NexusLabs.Framework.Analyzers", "NexusLabs.Framework" ], "dependents": null, "ecosystems": "nuget", "total_downloads": 42458, "monthly_downloads": null }, "components": [ { "key": "total_downloads", "name": "Total downloads", "detail": "42,458 downloads all-time across nuget", "points": 48.1, "status": "partial", "details": [ { "code": "downloads_total", "params": { "count": 42458, "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": "moderate", "name": "Sustainability & Governance", "value": 57, "weight": 0.23, "metrics": [ { "key": "maintainer_resilience", "band": "critical", "name": "Maintainer resilience (bus factor)", "note": null, "notes": [], "value": 13, "inputs": { "bus_factor": 1, "contributors_sampled": 1, "top_contributor_share": 1 }, "components": [ { "key": "bus_factor", "name": "Bus factor", "detail": "1 contributor(s) cover half of all commits", "points": 9, "status": "partial", "details": [ { "code": "bus_factor", "params": { "count": 1 } } ], "max_points": 54 }, { "key": "commit_distribution", "name": "Commit distribution", "detail": "top contributor authored 100% of commits", "points": 0, "status": "missed", "details": [ { "code": "top_contributor_share", "params": { "share": 100 } } ], "max_points": 22.5 }, { "key": "contributor_breadth", "name": "Contributor breadth", "detail": "1 contributors", "points": 1.4, "status": "partial", "details": [ { "code": "contributors_sampled", "params": { "count": 1 } } ], "max_points": 13.5 }, { "key": "openssf_scorecard_contributors", "name": "OpenSSF Scorecard: Contributors", "detail": "project has 1 contributing companies or organizations -- score normalized to 3", "points": 3, "status": "partial", "details": [], "max_points": 10 } ] }, { "key": "responsiveness", "band": "good", "name": "Issue & PR responsiveness", "note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.", "notes": [ { "code": "excluded_no_data", "params": { "components": [ "newcomer_pr_acceptance" ] } }, { "code": "weights_renormalized", "params": {} } ], "value": 72, "inputs": { "merged_prs": 18, "open_issues": 0, "closed_issues": 1, "prs_merged_7d": null, "prs_decided_7d": null, "prs_merged_30d": null, "prs_decided_30d": null, "issue_closed_ratio": 1, "closed_unmerged_prs": 8, "first_time_authors_30d": null, "first_time_prs_merged_30d": null, "first_time_prs_decided_30d": null }, "components": [ { "key": "issue_resolution", "name": "Issue resolution", "detail": "100% of issues closed", "points": 42, "status": "met", "details": [ { "code": "issues_closed_share", "params": { "share": 100 } } ], "max_points": 42 }, { "key": "pr_acceptance", "name": "PR acceptance", "detail": "18/26 decided PRs merged", "points": 20.8, "status": "partial", "details": [ { "code": "decided_prs_merged", "params": { "merged": 18, "decided": 26 } } ], "max_points": 30 }, { "key": "newcomer_pr_acceptance", "name": "Newcomer PR acceptance", "detail": "no first-time contributor's PR decided in 30d", "points": 0, "status": "excluded", "details": [ { "code": "no_newcomer_prs", "params": { "days": 30 } } ], "max_points": 13 }, { "key": "openssf_scorecard_code_review", "name": "OpenSSF Scorecard: Code-Review", "detail": "Found 0/23 approved changesets -- score normalized to 0", "points": 0, "status": "missed", "details": [], "max_points": 15 } ] }, { "key": "stewardship", "band": "moderate", "name": "Ownership & stewardship", "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.", "notes": [ { "code": "excluded_no_data", "params": { "components": [ "verified_domain" ] } }, { "code": "weights_renormalized", "params": {} } ], "value": 62, "inputs": { "followers": 278, "owner_type": "User", "is_verified": null, "owner_login": "ncosentino", "public_repos": 25, "account_age_days": 4735 }, "components": [ { "key": "ownership_backing", "name": "Ownership backing", "detail": "personal (user) account", "points": 10, "status": "partial", "details": [ { "code": "owner_personal", "params": {} } ], "max_points": 30 }, { "key": "verified_domain", "name": "Verified domain", "detail": "not applicable to user accounts", "points": 0, "status": "excluded", "details": [ { "code": "not_applicable_to_user_accounts", "params": {} } ], "max_points": 20 }, { "key": "owner_reach", "name": "Owner reach", "detail": "278 followers of ncosentino", "points": 17.6, "status": "partial", "details": [ { "code": "owner_followers", "params": { "count": 278, "login": "ncosentino" } } ], "max_points": 25 }, { "key": "track_record", "name": "Track record", "detail": "25 public repos, account ~12 yr old", "points": 22.3, "status": "partial", "details": [ { "code": "public_repos", "params": { "count": 25 } }, { "code": "account_age_years", "params": { "years": 12 } } ], "max_points": 25 } ] }, { "key": "package_maintenance", "band": "exceptional", "name": "Package maintenance", "note": null, "notes": [], "value": 100, "inputs": { "packages": [ "NexusLabs.CodeAnalysis.Testing.TUnit", "NexusLabs.Data.Sql.MySql", "NexusLabs.Data.Sql", "NexusLabs.Framework.Analyzers", "NexusLabs.Framework" ], "ecosystems": "nuget", "any_deprecated": false, "min_days_since_publish": 0 }, "components": [ { "key": "published_resolvable", "name": "Published & resolvable", "detail": "5 package(s) on nuget", "points": 25, "status": "met", "details": [ { "code": "packages_published", "params": { "count": 5, "ecosystems": "nuget" } } ], "max_points": 25 }, { "key": "publish_recency", "name": "Publish recency", "detail": "latest publish 0 days ago", "points": 35, "status": "met", "details": [ { "code": "publish_recency", "params": { "days": 0 } } ], "max_points": 35 }, { "key": "version_history", "name": "Version history", "detail": "39 published versions", "points": 20, "status": "met", "details": [ { "code": "published_versions", "params": { "count": 39 } } ], "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": "good", "name": "Engineering Quality", "value": 70, "weight": 0.19, "metrics": [ { "key": "engineering_practices", "band": "good", "name": "Engineering practices", "note": null, "notes": [], "value": 74, "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": "2 workflow(s)", "points": 24, "status": "met", "details": [ { "code": "ci_workflows", "params": { "count": 2 } } ], "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": "17 out of 17 merged PRs checked by a CI test -- score normalized to 10", "points": 20, "status": "met", "details": [], "max_points": 20 } ] }, { "key": "documentation", "band": "good", "name": "Documentation", "note": null, "notes": [], "value": 65, "inputs": { "topics": [], "has_wiki": true, "homepage": null, "has_readme": true, "has_docs_dir": true, "has_description": false }, "components": [ { "key": "readme", "name": "README", "detail": null, "points": 30, "status": "met", "details": [], "max_points": 30 }, { "key": "documentation_directory", "name": "Documentation directory", "detail": null, "points": 25, "status": "met", "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": 0, "status": "missed", "details": [], "max_points": 10 }, { "key": "topics", "name": "Topics", "detail": null, "points": 0, "status": "missed", "details": [], "max_points": 10 }, { "key": "wiki", "name": "Wiki", "detail": null, "points": 10, "status": "met", "details": [], "max_points": 10 } ] } ], "description": "Are baseline engineering and documentation practices in place?" }, { "key": "security", "band": "moderate", "name": "Security", "value": 60, "weight": 0.16, "metrics": [ { "key": "security_posture", "band": "moderate", "name": "Security posture", "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.", "notes": [ { "code": "excluded_no_data", "params": { "components": [ "signed_releases" ] } }, { "code": "weights_renormalized", "params": {} } ], "value": 60, "inputs": { "source": "openssf_scorecard", "checks_evaluated": 17, "scorecard_version": "v5.5.0", "checks_inconclusive": 1, "scorecard_aggregate": 6 }, "components": [ { "key": "binary_artifacts", "name": "Binary-Artifacts", "detail": "no binaries found in the repo", "points": 7.5, "status": "met", "details": [], "max_points": 7.5 }, { "key": "branch_protection", "name": "Branch-Protection", "detail": "branch protection not enabled on development/release branches", "points": 0, "status": "missed", "details": [], "max_points": 7.5 }, { "key": "ci_tests", "name": "CI-Tests", "detail": "17 out of 17 merged PRs checked by a CI test -- score normalized to 10", "points": 2.5, "status": "met", "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": "Found 0/23 approved changesets -- score normalized to 0", "points": 0, "status": "missed", "details": [], "max_points": 7.5 }, { "key": "contributors", "name": "Contributors", "detail": "project has 1 contributing companies or organizations -- score normalized to 3", "points": 0.8, "status": "partial", "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": "update tool detected", "points": 7.5, "status": "met", "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 detected", "points": 2.5, "status": "met", "details": [], "max_points": 2.5 }, { "key": "maintained", "name": "Maintained", "detail": "30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10", "points": 7.5, "status": "met", "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 0", "points": 0, "status": "missed", "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": "no releases found", "points": 0, "status": "excluded", "details": [ { "code": "no_data", "params": {} } ], "max_points": 7.5 }, { "key": "token_permissions", "name": "Token-Permissions", "detail": "GitHub workflow tokens follow principle of least privilege", "points": 7.5, "status": "met", "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": "high_risk_jurisdiction_exposure", "band": "exceptional", "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" ], "commit_weight_rule": { "min_commits": 50, "min_commit_share": 0.1 }, "review_only_matches": 0, "below_threshold_exposures": [], "assessed_self_published_locations": 2 }, "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": "good", "name": "AI Readiness", "value": 78, "weight": 0.04, "metrics": [ { "key": "ai_agent_context", "band": "excellent", "name": "Agent context & guidance", "note": null, "notes": [], "value": 85, "inputs": { "has_llms_txt": false, "legible_history_share": 1, "agent_instruction_files": [ ".github/copilot-instructions.md", ".github/instructions/genesis/adr.instructions.md", ".github/instructions/genesis/astro/components.instructions.md", ".github/instructions/genesis/astro/config.instructions.md", ".github/instructions/genesis/astro/content-collections.instructions.md", ".github/instructions/genesis/astro/humans-txt.instructions.md", ".github/instructions/genesis/astro/layouts.instructions.md", ".github/instructions/genesis/astro/llms-txt.instructions.md", ".github/instructions/genesis/astro/pages.instructions.md", ".github/instructions/genesis/astro/robots-txt.instructions.md", ".github/instructions/genesis/astro/security.instructions.md", ".github/instructions/genesis/astro/seo.instructions.md", ".github/instructions/genesis/astro/sitemap.instructions.md", ".github/instructions/genesis/astro/styles.instructions.md", ".github/instructions/genesis/blazor/code-behind.instructions.md", ".github/instructions/genesis/blazor/components.instructions.md", ".github/instructions/genesis/blazor/css-isolation.instructions.md", ".github/instructions/genesis/blazor/extensibility.instructions.md", ".github/instructions/genesis/blazor/performance.instructions.md", ".github/instructions/genesis/blazor/render-modes.instructions.md", ".github/instructions/genesis/carter-modules.instructions.md", ".github/instructions/genesis/consumers.instructions.md", ".github/instructions/genesis/deployment-github-pages.instructions.md", ".github/instructions/genesis/feature-structure.instructions.md", ".github/instructions/genesis/file-type-isolation.instructions.md", ".github/instructions/genesis/http-clients.instructions.md", ".github/instructions/genesis/instructions.instructions.md", ".github/instructions/genesis/jobs/job-schedulers.instructions.md", ".github/instructions/genesis/jobs/jobs.instructions.md", ".github/instructions/genesis/logging.instructions.md", ".github/instructions/genesis/masstransit-contracts.instructions.md", ".github/instructions/genesis/n-plus-one-prevention.instructions.md", ".github/instructions/genesis/options/http-client-options.instructions.md", ".github/instructions/genesis/options/options.instructions.md", ".github/instructions/genesis/plugins.instructions.md", ".github/instructions/genesis/post-api-handlers.instructions.md", ".github/instructions/genesis/project-structure.instructions.md", ".github/instructions/genesis/raw-string-literals.instructions.md", ".github/instructions/genesis/repositories.instructions.md", ".github/instructions/genesis/request-validators.instructions.md", ".github/instructions/genesis/result-dtos.instructions.md", ".github/instructions/genesis/roslyn-analyzers.instructions.md", ".github/instructions/genesis/source-generators.instructions.md", ".github/instructions/genesis/sql-migrations.instructions.md", ".github/instructions/genesis/testing/tests-api.instructions.md", ".github/instructions/genesis/testing/tests-common.instructions.md", ".github/instructions/genesis/testing/tests-mock-boundaries.instructions.md", ".github/instructions/genesis/testing/tests-repository.instructions.md", ".github/instructions/genesis/testing/tests-service.instructions.md", ".github/instructions/genesis/testing/time-provider-testing.instructions.md", ".github/instructions/genesis/time-provider.instructions.md", ".github/instructions/genesis/ui/app-shell.instructions.md", ".github/instructions/genesis/ui/avalonia.instructions.md", ".github/instructions/genesis/ui/string-resources.instructions.md", ".github/instructions/genesis/ui/theme-resources.instructions.md", ".github/instructions/genesis/ui/viewmodel.instructions.md", ".github/instructions/genesis/ui/wpf.instructions.md", ".github/instructions/genesis/ui/xaml-shared.instructions.md", ".github/instructions/genesis/unit-of-work.instructions.md", ".github/instructions/genesis/web-dtos.instructions.md", "AGENTS.md", "CLAUDE.md" ], "agent_instruction_max_bytes": 13939 }, "components": [ { "key": "agent_instructions", "name": "Agent instructions", "detail": ".github/copilot-instructions.md, .github/instructions/genesis/adr.instructions.md, .github/instructions/genesis/astro/components.instructions.md, .github/instructions/genesis/astro/config.instructions.md, .github/instructions/genesis/astro/content-collections.instructions.md, .github/instructions/genesis/astro/humans-txt.instructions.md, .github/instructions/genesis/astro/layouts.instructions.md, .github/instructions/genesis/astro/llms-txt.instructions.md, .github/instructions/genesis/astro/pages.instructions.md, .github/instructions/genesis/astro/robots-txt.instructions.md, .github/instructions/genesis/astro/security.instructions.md, .github/instructions/genesis/astro/seo.instructions.md, .github/instructions/genesis/astro/sitemap.instructions.md, .github/instructions/genesis/astro/styles.instructions.md, .github/instructions/genesis/blazor/code-behind.instructions.md, .github/instructions/genesis/blazor/components.instructions.md, .github/instructions/genesis/blazor/css-isolation.instructions.md, .github/instructions/genesis/blazor/extensibility.instructions.md, .github/instructions/genesis/blazor/performance.instructions.md, .github/instructions/genesis/blazor/render-modes.instructions.md, .github/instructions/genesis/carter-modules.instructions.md, .github/instructions/genesis/consumers.instructions.md, .github/instructions/genesis/deployment-github-pages.instructions.md, .github/instructions/genesis/feature-structure.instructions.md, .github/instructions/genesis/file-type-isolation.instructions.md, .github/instructions/genesis/http-clients.instructions.md, .github/instructions/genesis/instructions.instructions.md, .github/instructions/genesis/jobs/job-schedulers.instructions.md, .github/instructions/genesis/jobs/jobs.instructions.md, .github/instructions/genesis/logging.instructions.md, .github/instructions/genesis/masstransit-contracts.instructions.md, .github/instructions/genesis/n-plus-one-prevention.instructions.md, .github/instructions/genesis/options/http-client-options.instructions.md, .github/instructions/genesis/options/options.instructions.md, .github/instructions/genesis/plugins.instructions.md, .github/instructions/genesis/post-api-handlers.instructions.md, .github/instructions/genesis/project-structure.instructions.md, .github/instructions/genesis/raw-string-literals.instructions.md, .github/instructions/genesis/repositories.instructions.md, .github/instructions/genesis/request-validators.instructions.md, .github/instructions/genesis/result-dtos.instructions.md, .github/instructions/genesis/roslyn-analyzers.instructions.md, .github/instructions/genesis/source-generators.instructions.md, .github/instructions/genesis/sql-migrations.instructions.md, .github/instructions/genesis/testing/tests-api.instructions.md, .github/instructions/genesis/testing/tests-common.instructions.md, .github/instructions/genesis/testing/tests-mock-boundaries.instructions.md, .github/instructions/genesis/testing/tests-repository.instructions.md, .github/instructions/genesis/testing/tests-service.instructions.md, .github/instructions/genesis/testing/time-provider-testing.instructions.md, .github/instructions/genesis/time-provider.instructions.md, .github/instructions/genesis/ui/app-shell.instructions.md, .github/instructions/genesis/ui/avalonia.instructions.md, .github/instructions/genesis/ui/string-resources.instructions.md, .github/instructions/genesis/ui/theme-resources.instructions.md, .github/instructions/genesis/ui/viewmodel.instructions.md, .github/instructions/genesis/ui/wpf.instructions.md, .github/instructions/genesis/ui/xaml-shared.instructions.md, .github/instructions/genesis/unit-of-work.instructions.md, .github/instructions/genesis/web-dtos.instructions.md, AGENTS.md, CLAUDE.md", "points": 45, "status": "met", "details": [ { "code": "file_list", "params": { "files": ".github/copilot-instructions.md, .github/instructions/genesis/adr.instructions.md, .github/instructions/genesis/astro/components.instructions.md, .github/instructions/genesis/astro/config.instructions.md, .github/instructions/genesis/astro/content-collections.instructions.md, .github/instructions/genesis/astro/humans-txt.instructions.md, .github/instructions/genesis/astro/layouts.instructions.md, .github/instructions/genesis/astro/llms-txt.instructions.md, .github/instructions/genesis/astro/pages.instructions.md, .github/instructions/genesis/astro/robots-txt.instructions.md, .github/instructions/genesis/astro/security.instructions.md, .github/instructions/genesis/astro/seo.instructions.md, .github/instructions/genesis/astro/sitemap.instructions.md, .github/instructions/genesis/astro/styles.instructions.md, .github/instructions/genesis/blazor/code-behind.instructions.md, .github/instructions/genesis/blazor/components.instructions.md, .github/instructions/genesis/blazor/css-isolation.instructions.md, .github/instructions/genesis/blazor/extensibility.instructions.md, .github/instructions/genesis/blazor/performance.instructions.md, .github/instructions/genesis/blazor/render-modes.instructions.md, .github/instructions/genesis/carter-modules.instructions.md, .github/instructions/genesis/consumers.instructions.md, .github/instructions/genesis/deployment-github-pages.instructions.md, .github/instructions/genesis/feature-structure.instructions.md, .github/instructions/genesis/file-type-isolation.instructions.md, .github/instructions/genesis/http-clients.instructions.md, .github/instructions/genesis/instructions.instructions.md, .github/instructions/genesis/jobs/job-schedulers.instructions.md, .github/instructions/genesis/jobs/jobs.instructions.md, .github/instructions/genesis/logging.instructions.md, .github/instructions/genesis/masstransit-contracts.instructions.md, .github/instructions/genesis/n-plus-one-prevention.instructions.md, .github/instructions/genesis/options/http-client-options.instructions.md, .github/instructions/genesis/options/options.instructions.md, .github/instructions/genesis/plugins.instructions.md, .github/instructions/genesis/post-api-handlers.instructions.md, .github/instructions/genesis/project-structure.instructions.md, .github/instructions/genesis/raw-string-literals.instructions.md, .github/instructions/genesis/repositories.instructions.md, .github/instructions/genesis/request-validators.instructions.md, .github/instructions/genesis/result-dtos.instructions.md, .github/instructions/genesis/roslyn-analyzers.instructions.md, .github/instructions/genesis/source-generators.instructions.md, .github/instructions/genesis/sql-migrations.instructions.md, .github/instructions/genesis/testing/tests-api.instructions.md, .github/instructions/genesis/testing/tests-common.instructions.md, .github/instructions/genesis/testing/tests-mock-boundaries.instructions.md, .github/instructions/genesis/testing/tests-repository.instructions.md, .github/instructions/genesis/testing/tests-service.instructions.md, .github/instructions/genesis/testing/time-provider-testing.instructions.md, .github/instructions/genesis/time-provider.instructions.md, .github/instructions/genesis/ui/app-shell.instructions.md, .github/instructions/genesis/ui/avalonia.instructions.md, .github/instructions/genesis/ui/string-resources.instructions.md, .github/instructions/genesis/ui/theme-resources.instructions.md, .github/instructions/genesis/ui/viewmodel.instructions.md, .github/instructions/genesis/ui/wpf.instructions.md, .github/instructions/genesis/ui/xaml-shared.instructions.md, .github/instructions/genesis/unit-of-work.instructions.md, .github/instructions/genesis/web-dtos.instructions.md, AGENTS.md, CLAUDE.md" } } ], "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": "92 of 92 human commits state their intent (structured subject or explanatory body)", "points": 40, "status": "met", "details": [ { "code": "legible_history", "params": { "legible": 92, "sampled": 92 } } ], "max_points": 40 } ] }, { "key": "ai_verify_loop", "band": "moderate", "name": "Verify loop (build / test / typecheck)", "note": null, "notes": [], "value": 64, "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.9, "toolchain_manifests": [ "src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj", "src/NexusLabs.Data.Sql.MySql/NexusLabs.Data.Sql.MySql.csproj", "src/NexusLabs.Data.Sql/NexusLabs.Data.Sql.csproj", "src/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj", "src/NexusLabs.Framework.Analyzers/NexusLabs.Framework.Analyzers.csproj", "src/NexusLabs.Framework/NexusLabs.Framework.csproj", "src/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj", "src/NexusLabs.StronglyTypedIds.Analyzers/NexusLabs.StronglyTypedIds.Analyzers.csproj", "src/NexusLabs.StronglyTypedIds/NexusLabs.StronglyTypedIds.csproj", "src/NexusLabs.TUnit.Assertions.Analyzers/NexusLabs.TUnit.Assertions.Analyzers.csproj", "src/NexusLabs.TUnit.Assertions/NexusLabs.TUnit.Assertions.csproj", "src/NexusLabs.Xunit.Assertions/NexusLabs.Xunit.Assertions.csproj", "tests/NexusLabs.CodeAnalysis.Testing.TUnit.Tests/NexusLabs.CodeAnalysis.Testing.TUnit.Tests.csproj", "tests/NexusLabs.Data.Sql.MySql.Tests/NexusLabs.Data.Sql.MySql.Tests.csproj", "tests/NexusLabs.Data.Sql.Tests/NexusLabs.Data.Sql.Tests.csproj", "tests/NexusLabs.Framework.Analyzers.Tests/NexusLabs.Framework.Analyzers.Tests.csproj", "tests/NexusLabs.Framework.Tests/NexusLabs.Framework.Tests.csproj", "tests/NexusLabs.StronglyTypedIds.Tests/NexusLabs.StronglyTypedIds.Tests.csproj", "tests/NexusLabs.Xunit.Assertions.Tests/NexusLabs.Xunit.Assertions.Tests.csproj", "tests/TUnit/NexusLabs.TUnit.Assertions.Tests/NexusLabs.TUnit.Assertions.Tests.csproj" ], "dependency_bot_commit_share": 0.08 }, "components": [ { "key": "one_command_bootstrap", "name": "One-command bootstrap", "detail": "src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj, src/NexusLabs.Data.Sql.MySql/NexusLabs.Data.Sql.MySql.csproj, src/NexusLabs.Data.Sql/NexusLabs.Data.Sql.csproj (toolchain convention, no task runner)", "points": 12.6, "status": "partial", "details": [ { "code": "toolchain_convention", "params": { "files": "src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj, src/NexusLabs.Data.Sql.MySql/NexusLabs.Data.Sql.MySql.csproj, src/NexusLabs.Data.Sql/NexusLabs.Data.Sql.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": "90 of the last 100 commits agent-authored or agent-credited", "points": 10, "status": "met", "details": [ { "code": "agent_authored_commits", "params": { "count": 90, "sampled": 100 } } ], "max_points": 10 }, { "key": "automated_maintenance", "name": "Automated maintenance", "detail": "8 of the last 100 commits are automated dependency updates", "points": 8, "status": "met", "details": [ { "code": "dependency_bot_commits", "params": { "count": 8, "sampled": 100 } } ], "max_points": 8 }, { "key": "openssf_scorecard_pinned_dependencies", "name": "OpenSSF Scorecard: Pinned-Dependencies", "detail": "dependency not pinned by hash detected -- score normalized to 0", "points": 0, "status": "missed", "details": [], "max_points": 10 } ] }, { "key": "ai_code_legibility", "band": "exceptional", "name": "Code legibility for models", "note": null, "notes": [], "value": 100, "inputs": { "primary_language": "C#", "largest_source_bytes": 45288, "source_files_sampled": 175, "oversized_source_files": 0 }, "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": "0/175 source files over 60KB", "points": 55, "status": "met", "details": [ { "code": "oversized_source_files", "params": { "kb": 60, "sampled": 175, "oversized": 0 } } ], "max_points": 55 } ] } ], "description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)." } ], "metrics_version": "2.1.0" }, "warnings": [ "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token", "No resolved dependencies carried a version and a supported ecosystem" ], "report_type": "repository", "generated_at": "2026-07-24T17:02:30.635644Z", "schema_version": "0.27.0", "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/n/ncosentino/NexusLabs.Framework.svg", "full_name": "ncosentino/NexusLabs.Framework", "license_state": "standard", "license_spdx": "MIT" }, "repoMeta": null, "notFound": false, "related": [ { "id": 50694, "full_name": "umbraco/Umbraco-CMS", "url": "https://github.com/umbraco/Umbraco-CMS", "description": "Umbraco is a free and open source .NET content management system helping you deliver delightful digital experiences.", "ecosystem": "nuget", "ecosystems": [ "nuget" ], "primary_language": "C#", "languages": [ "C#", "TypeScript" ], "topics": [ "umbraco-cms", "cms", "umbraco", "csharp", "hacktoberfest", "dotnet-core", "asp-net-core" ], "license_spdx": "MIT", "license_state": "standard", "stars": 5218, "forks": 2899, "watchers": 217, "monthly_downloads": null, "latest_score": 97, "latest_band": "exceptional", "latest_scanned_at": "2026-08-01T18:30:18.790946Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "maintained", "red_flags": [], "badge_url": "" }, { "id": 47265, "full_name": "microsoft/fluentui-blazor", "url": "https://github.com/microsoft/fluentui-blazor", "description": "Microsoft Fluent UI Blazor components library. For use with ASP.NET Core Blazor applications", "ecosystem": "nuget", "ecosystems": [ "nuget" ], "primary_language": "C#", "languages": [ "C#" ], "topics": [ "components", "design-systems", "web-components", "web-standards", "component-library", "front-end-framework", "component-architecture", "development-tools", "adaptive-ui", "fluent", "fluentui", "blazor", "csharp", "csharp-library", "webassembly", "ui", "web", "templates" ], "license_spdx": "MIT", "license_state": "standard", "stars": 4795, "forks": 476, "watchers": 71, "monthly_downloads": null, "latest_score": 97, "latest_band": "exceptional", "latest_scanned_at": "2026-07-30T07:37:59.368054Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "maintained", "red_flags": [], "badge_url": "" }, { "id": 18382, "full_name": "unoplatform/uno", "url": "https://github.com/unoplatform/uno", "description": "Open-source platform for building cross-platform native Mobile, Web, Desktop, and Embedded apps from a single C#/XAML codebase. Work from any IDE/CLI with Hot Reload, Visual Designer, MCPs, and Skills built for modern .NET workflows. 200M+ NuGet downloads.", "ecosystem": "npm", "ecosystems": [ "npm", "nuget" ], "primary_language": "C#", "languages": [ "C#" ], "topics": [ "uno", "uwp", "android", "uno-platform", "roslyn", "xamarin", "webassembly", "windows", "mvvm", "wasm", "mono", "xaml", "cross-platform", "csharp", "macos", "c-sharp", "winui", "linux", "dotnet", "hacktoberfest" ], "license_spdx": "Apache-2.0", "license_state": "standard", "stars": 9982, "forks": 868, "watchers": 188, "monthly_downloads": null, "latest_score": 96, "latest_band": "exceptional", "latest_scanned_at": "2026-07-17T20:26:20.591766Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "unverified", "red_flags": [], "badge_url": "" }, { "id": 36944, "full_name": "dnnsoftware/Dnn.Platform", "url": "https://github.com/dnnsoftware/Dnn.Platform", "description": "DNN (formerly DotNetNuke) is the leading open source web content management platform (CMS) in the Microsoft ecosystem.", "ecosystem": "nuget", "ecosystems": [ "nuget", "npm" ], "primary_language": "C#", "languages": [ "C#", "JavaScript" ], "topics": [ "dnn", "dnncms", "dotnetnuke", "dnn-platform", "microsoft-ecosystem", "cms", "hacktoberfest" ], "license_spdx": "MIT", "license_state": "standard", "stars": 1136, "forks": 777, "watchers": 171, "monthly_downloads": null, "latest_score": 96, "latest_band": "exceptional", "latest_scanned_at": "2026-07-23T04:02:57.526930Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "maintained", "red_flags": [], "badge_url": "" }, { "id": 23031, "full_name": "microsoft/microsoft-ui-xaml", "url": "https://github.com/microsoft/microsoft-ui-xaml", "description": "WinUI: a modern UI framework with a rich set of controls and styles to build dynamic and high-performing Windows applications.", "ecosystem": "nuget", "ecosystems": [ "nuget" ], "primary_language": "C++", "languages": [ "C++", "C#" ], "topics": [ "desktop", "windows", "xaml", "fluent-design", "csharp", "cpp", "windows-10", "uwp", "winui", "winui3" ], "license_spdx": "MIT", "license_state": "standard", "stars": 7756, "forks": 857, "watchers": 228, "monthly_downloads": null, "latest_score": 95, "latest_band": "exceptional", "latest_scanned_at": "2026-07-18T21:34:57.716653Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "unverified", "red_flags": [], "badge_url": "" }, { "id": 10180, "full_name": "Azure/azure-cosmos-dotnet-v3", "url": "https://github.com/Azure/azure-cosmos-dotnet-v3", "description": ".NET SDK for Azure Cosmos DB for the core SQL API", "ecosystem": "nuget", "ecosystems": [ "nuget" ], "primary_language": "C#", "languages": [ "C#", "Jupyter Notebook" ], "topics": [], "license_spdx": "MIT", "license_state": "standard", "stars": 791, "forks": 542, "watchers": 63, "monthly_downloads": null, "latest_score": 95, "latest_band": "exceptional", "latest_scanned_at": "2026-07-16T12:53:34.988273Z", "has_high_risk_jurisdiction_exposure": false, "has_malicious_dependency": false, "growth_authenticity": "unverified", "abandonment_state": "unverified", "red_flags": [], "badge_url": "" } ] } }
ncosentino/NexusLabs.Framework має індекс здоров’я 69 зі 100, що відповідає смузі «Добрий». Найвищий показник — Vitality (78/100), найнижчий — Community & Adoption (39/100). Останнє оновлення — сьогодні. Більшість нещодавньої роботи виконує один учасник.
Метрики згруповано у зважені категорії на шкалі 1–100. Загальна оцінка починається як їхнє зважене середнє, відкаліброване за розподілом публічного реєстру, тож діапазони мають перцентильний зміст; коли публічні дані активують Політику юрисдикцій високого ризику, рейтинг коригується й отримує верхню межу 34 («У зоні ризику»).
Кожна вісь — окрема категорія. Форма важить більше, ніж середнє: здоровий об'єкт заповнює всю фігуру, тоді як профіль із піками та провалами означає, що сила в одному вимірі маскує ризик в іншому.
Зважений загальний бал 62 калібровано до 69 за шкалою опублікованого індексу (калібрування реєстру 2026-08-02).
Цей репозиторій належить особистому обліковому запису. Проєкт з єдиним власником несе більший ризик безперервності, ніж підтримуваний організацією.
| Реєстр | Пакет | Версія | Завантажень / міс | Версії | Остання публікація |
|---|---|---|---|---|---|
| NuGet | NexusLabs.CodeAnalysis.Testing.TUnit | 0.2.7 | - | 7 | 0 днів тому |
| NuGet | NexusLabs.Data.Sql.MySql | 0.2.7 | - | 7 | 0 днів тому |
| NuGet | NexusLabs.Data.Sql | 0.2.7 | - | 7 | 0 днів тому |
| NuGet | NexusLabs.Framework.Analyzers | 0.2.7 | - | 7 | 0 днів тому |
| NuGet | NexusLabs.Framework | 0.2.7 | - | 39 | 0 днів тому |
Чи живий проєкт — чи пишеться код і чи виходять релізи?
| 36/36 | Свіжість push — останній push 0 дн. тому |
| 7.6/36 | Ритм комітів — 11/52 тижнів із комітами |
| 18/18 | Обсяг комітів — 99 комітів за останній рік |
| 10/10 | OpenSSF Scorecard: Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10 |
| commits_last_year | 99 |
| human_commit_share | 0,92 |
| days_since_last_push | 0 |
| active_weeks_last_year | 11 |
| 16.2/27 | Випускає релізи — 8 тегів версій (без релізів GitHub) |
| 36/36 | Свіжість релізів — останній реліз 0 дн. тому |
| 27/27 | Ритм релізів — реліз кожні ~8,8 дн. |
| 0/10 | OpenSSF Scorecard: Signed-Releases — немає даних |
| releases_count | 8 |
| latest_release_tag | v0.2.7 |
| releases_from_tags | так |
| days_since_latest_release | 0 |
| mean_days_between_releases | 8,8 |
Чи має проєкт користувачів, завантаження, увагу та влаштовані умови для контриб’юторів?
| 16.9/60 | Зірки — 12 зірок |
| 0/25 | Форки — 2 форків |
| 0/15 | Спостерігачі — 1 спостерігачів |
| forks | 2 |
| stars | 12 |
| watchers | 1 |
| growth_state | unverified |
| growth_factor_pct | 100 |
| growth_unverified_reason | no_history |
| 22.5/22.5 | README |
| 22.5/22.5 | Ліцензія — визнана ліцензія (MIT) |
| 0/18 | Настанови CONTRIBUTING |
| 0/13.5 | Кодекс поведінки |
| 0/7.2 | Шаблон issue |
| 0/6.3 | Шаблон PR |
| has_readme | так |
| has_license | так |
| readme_badges | — |
| has_contributing | ні |
| has_issue_template | ні |
| has_code_of_conduct | ні |
| readme_badge_services | — |
| has_pull_request_template | ні |
| 48.1/80 | Сумарні завантаження — 42 458 завантажень за весь час у nuget |
| 0/20 | Залежні пакети в реєстрі — ця екосистема цього не повідомляє |
| packages | NexusLabs.CodeAnalysis.Testing.TUnit, NexusLabs.Data.Sql.MySql, NexusLabs.Data.Sql, NexusLabs.Framework.Analyzers, NexusLabs.Framework |
| dependents | — |
| ecosystems | nuget |
| total_downloads | 42 458 |
| monthly_downloads | — |
Чи переживе проєкт своїх людей — бас-фактор, реактивність, хто за ним стоїть і як супроводжуються пакети?
| 9/54 | Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів |
| 0/22.5 | Розподіл комітів — головний контриб’ютор — автор 100% комітів |
| 1.4/13.5 | Широта контриб’юторів — 1 контриб’юторів |
| 3/10 | OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3 |
| bus_factor | 1 |
| contributors_sampled | 1 |
| top_contributor_share | 1 |
| 42/42 | Вирішення issue — закрито 100% issue |
| 20.8/30 | Прийняття PR — злито 18/26 вирішених PR |
| 0/13 | Newcomer PR acceptance — за 30 дн. не вирішено жодного PR від новачка |
| 0/15 | OpenSSF Scorecard: Code-Review — Found 0/23 approved changesets -- score normalized to 0 |
| merged_prs | 18 |
| open_issues | 0 |
| closed_issues | 1 |
| prs_merged_7d | — |
| prs_decided_7d | — |
| prs_merged_30d | — |
| prs_decided_30d | — |
| issue_closed_ratio | 1 |
| closed_unmerged_prs | 8 |
| first_time_authors_30d | — |
| first_time_prs_merged_30d | — |
| first_time_prs_decided_30d | — |
| 10/30 | Підтримка власника — особистий (користувацький) обліковий запис |
| 0/20 | Верифікований домен — не застосовно до користувацьких облікових записів |
| 17.6/25 | Охоплення власника — 278 підписників у ncosentino |
| 22.3/25 | Послужний список — 25 публічних репозиторіїв, вік облікового запису ~12 р. |
| followers | 278 |
| owner_type | User |
| is_verified | — |
| owner_login | ncosentino |
| public_repos | 25 |
| account_age_days | 4 735 |
| 25/25 | Опубліковано й доступно — 5 пакет(ів) у nuget |
| 35/35 | Свіжість публікацій — остання публікація 0 дн. тому |
| 20/20 | Історія версій — 39 опублікованих версій |
| 20/20 | Не застарілий — активний, не deprecated і не yanked |
| packages | NexusLabs.CodeAnalysis.Testing.TUnit, NexusLabs.Data.Sql.MySql, NexusLabs.Data.Sql, NexusLabs.Framework.Analyzers, NexusLabs.Framework |
| ecosystems | nuget |
| any_deprecated | ні |
| min_days_since_publish | 0 |
Чи наявні базові інженерні практики та документація?
| 24/24 | Процеси CI — 2 процес(ів) CI |
| 24/24 | Наявні тести |
| 0/16 | Конфігурація лінтера |
| 0/9.6 | Pre-commit-хуки |
| 6.4/6.4 | .editorconfig |
| 20/20 | OpenSSF Scorecard: CI-Tests — 17 out of 17 merged PRs checked by a CI test -- score normalized to 10 |
| has_ci | так |
| has_tests | так |
| has_editorconfig | так |
| has_linter_config | ні |
| has_precommit_config | ні |
| 30/30 | README |
| 25/25 | Каталог документації |
| 0/15 | Сайт документації / домашня сторінка |
| 0/10 | Опис репозиторію |
| 0/10 | Теми |
| 10/10 | Wiki |
| topics | — |
| has_wiki | так |
| homepage | — |
| has_readme | так |
| has_docs_dir | так |
| has_description | ні |
Чи міцні видимі практики безпеки й ланцюга постачання, без непослабленої пов’язаності з юрисдикціями високого ризику?
| 7.5/7.5 | Binary-Artifacts — no binaries found in the repo |
| 0/7.5 | Branch-Protection — branch protection not enabled on development/release branches |
| 2.5/2.5 | CI-Tests — 17 out of 17 merged PRs checked by a CI test -- score normalized to 10 |
| 0/2.5 | CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected |
| 0/7.5 | Code-Review — Found 0/23 approved changesets -- score normalized to 0 |
| 0.8/2.5 | Contributors — project has 1 contributing companies or organizations -- score normalized to 3 |
| 10/10 | Dangerous-Workflow — no dangerous workflow patterns detected |
| 7.5/7.5 | Dependency-Update-Tool — update tool detected |
| 0/5 | Fuzzing — project is not fuzzed |
| 2.5/2.5 | Ліцензія — license file detected |
| 7.5/7.5 | Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10 |
| 5/5 | Packaging — packaging workflow detected |
| 0/5 | Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0 |
| 0/5 | SAST — SAST tool is not run on all commits -- score normalized to 0 |
| 0/5 | Security-Policy — security policy file not detected |
| 0/7.5 | Signed-Releases — немає даних |
| 7.5/7.5 | Token-Permissions — GitHub workflow tokens follow principle of least privilege |
| 7.5/7.5 | Vulnerabilities — 0 existing vulnerabilities detected |
| source | openssf_scorecard |
| checks_evaluated | 17 |
| scorecard_version | v5.5.0 |
| checks_inconclusive | 1 |
| scorecard_aggregate | 6 |
Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Має свідомо малу вагу (4%): агентний інструментарій — реальний сигнал супроводу, але репозиторій без нього все одно може отримати 100/100.
| 45/45 | Інструкції для агентів — .github/copilot-instructions.md, .github/instructions/genesis/adr.instructions.md, .github/instructions/genesis/astro/components.instructions.md, .github/instructions/genesis/astro/config.instructions.md, .github/instructions/genesis/astro/content-collections.instructions.md, .github/instructions/genesis/astro/humans-txt.instructions.md, .github/instructions/genesis/astro/layouts.instructions.md, .github/instructions/genesis/astro/llms-txt.instructions.md, .github/instructions/genesis/astro/pages.instructions.md, .github/instructions/genesis/astro/robots-txt.instructions.md, .github/instructions/genesis/astro/security.instructions.md, .github/instructions/genesis/astro/seo.instructions.md, .github/instructions/genesis/astro/sitemap.instructions.md, .github/instructions/genesis/astro/styles.instructions.md, .github/instructions/genesis/blazor/code-behind.instructions.md, .github/instructions/genesis/blazor/components.instructions.md, .github/instructions/genesis/blazor/css-isolation.instructions.md, .github/instructions/genesis/blazor/extensibility.instructions.md, .github/instructions/genesis/blazor/performance.instructions.md, .github/instructions/genesis/blazor/render-modes.instructions.md, .github/instructions/genesis/carter-modules.instructions.md, .github/instructions/genesis/consumers.instructions.md, .github/instructions/genesis/deployment-github-pages.instructions.md, .github/instructions/genesis/feature-structure.instructions.md, .github/instructions/genesis/file-type-isolation.instructions.md, .github/instructions/genesis/http-clients.instructions.md, .github/instructions/genesis/instructions.instructions.md, .github/instructions/genesis/jobs/job-schedulers.instructions.md, .github/instructions/genesis/jobs/jobs.instructions.md, .github/instructions/genesis/logging.instructions.md, .github/instructions/genesis/masstransit-contracts.instructions.md, .github/instructions/genesis/n-plus-one-prevention.instructions.md, .github/instructions/genesis/options/http-client-options.instructions.md, .github/instructions/genesis/options/options.instructions.md, .github/instructions/genesis/plugins.instructions.md, .github/instructions/genesis/post-api-handlers.instructions.md, .github/instructions/genesis/project-structure.instructions.md, .github/instructions/genesis/raw-string-literals.instructions.md, .github/instructions/genesis/repositories.instructions.md, .github/instructions/genesis/request-validators.instructions.md, .github/instructions/genesis/result-dtos.instructions.md, .github/instructions/genesis/roslyn-analyzers.instructions.md, .github/instructions/genesis/source-generators.instructions.md, .github/instructions/genesis/sql-migrations.instructions.md, .github/instructions/genesis/testing/tests-api.instructions.md, .github/instructions/genesis/testing/tests-common.instructions.md, .github/instructions/genesis/testing/tests-mock-boundaries.instructions.md, .github/instructions/genesis/testing/tests-repository.instructions.md, .github/instructions/genesis/testing/tests-service.instructions.md, .github/instructions/genesis/testing/time-provider-testing.instructions.md, .github/instructions/genesis/time-provider.instructions.md, .github/instructions/genesis/ui/app-shell.instructions.md, .github/instructions/genesis/ui/avalonia.instructions.md, .github/instructions/genesis/ui/string-resources.instructions.md, .github/instructions/genesis/ui/theme-resources.instructions.md, .github/instructions/genesis/ui/viewmodel.instructions.md, .github/instructions/genesis/ui/wpf.instructions.md, .github/instructions/genesis/ui/xaml-shared.instructions.md, .github/instructions/genesis/unit-of-work.instructions.md, .github/instructions/genesis/web-dtos.instructions.md, AGENTS.md, CLAUDE.md |
| 0/15 | Машиночитана документація (llms.txt) |
| 40/40 | Читабельна історія комітів — намір зазначено у 92 з 92 людських комітів (структурований заголовок або пояснювальний текст) |
| has_llms_txt | ні |
| legible_history_share | 1 |
| agent_instruction_files | .github/copilot-instructions.md, .github/instructions/genesis/adr.instructions.md, .github/instructions/genesis/astro/components.instructions.md, .github/instructions/genesis/astro/config.instructions.md, .github/instructions/genesis/astro/content-collections.instructions.md, .github/instructions/genesis/astro/humans-txt.instructions.md, .github/instructions/genesis/astro/layouts.instructions.md, .github/instructions/genesis/astro/llms-txt.instructions.md, .github/instructions/genesis/astro/pages.instructions.md, .github/instructions/genesis/astro/robots-txt.instructions.md, .github/instructions/genesis/astro/security.instructions.md, .github/instructions/genesis/astro/seo.instructions.md, .github/instructions/genesis/astro/sitemap.instructions.md, .github/instructions/genesis/astro/styles.instructions.md, .github/instructions/genesis/blazor/code-behind.instructions.md, .github/instructions/genesis/blazor/components.instructions.md, .github/instructions/genesis/blazor/css-isolation.instructions.md, .github/instructions/genesis/blazor/extensibility.instructions.md, .github/instructions/genesis/blazor/performance.instructions.md, .github/instructions/genesis/blazor/render-modes.instructions.md, .github/instructions/genesis/carter-modules.instructions.md, .github/instructions/genesis/consumers.instructions.md, .github/instructions/genesis/deployment-github-pages.instructions.md, .github/instructions/genesis/feature-structure.instructions.md, .github/instructions/genesis/file-type-isolation.instructions.md, .github/instructions/genesis/http-clients.instructions.md, .github/instructions/genesis/instructions.instructions.md, .github/instructions/genesis/jobs/job-schedulers.instructions.md, .github/instructions/genesis/jobs/jobs.instructions.md, .github/instructions/genesis/logging.instructions.md, .github/instructions/genesis/masstransit-contracts.instructions.md, .github/instructions/genesis/n-plus-one-prevention.instructions.md, .github/instructions/genesis/options/http-client-options.instructions.md, .github/instructions/genesis/options/options.instructions.md, .github/instructions/genesis/plugins.instructions.md, .github/instructions/genesis/post-api-handlers.instructions.md, .github/instructions/genesis/project-structure.instructions.md, .github/instructions/genesis/raw-string-literals.instructions.md, .github/instructions/genesis/repositories.instructions.md, .github/instructions/genesis/request-validators.instructions.md, .github/instructions/genesis/result-dtos.instructions.md, .github/instructions/genesis/roslyn-analyzers.instructions.md, .github/instructions/genesis/source-generators.instructions.md, .github/instructions/genesis/sql-migrations.instructions.md, .github/instructions/genesis/testing/tests-api.instructions.md, .github/instructions/genesis/testing/tests-common.instructions.md, .github/instructions/genesis/testing/tests-mock-boundaries.instructions.md, .github/instructions/genesis/testing/tests-repository.instructions.md, .github/instructions/genesis/testing/tests-service.instructions.md, .github/instructions/genesis/testing/time-provider-testing.instructions.md, .github/instructions/genesis/time-provider.instructions.md, .github/instructions/genesis/ui/app-shell.instructions.md, .github/instructions/genesis/ui/avalonia.instructions.md, .github/instructions/genesis/ui/string-resources.instructions.md, .github/instructions/genesis/ui/theme-resources.instructions.md, .github/instructions/genesis/ui/viewmodel.instructions.md, .github/instructions/genesis/ui/wpf.instructions.md, .github/instructions/genesis/ui/xaml-shared.instructions.md, .github/instructions/genesis/unit-of-work.instructions.md, .github/instructions/genesis/web-dtos.instructions.md, AGENTS.md, CLAUDE.md |
| agent_instruction_max_bytes | 13 939 |
| 12.6/18 | Розгортання однією командою — src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj, src/NexusLabs.Data.Sql.MySql/NexusLabs.Data.Sql.MySql.csproj, src/NexusLabs.Data.Sql/NexusLabs.Data.Sql.csproj (домовленість інструментарію, без раннера задач) |
| 22/22 | Автоматизовані тести |
| 0/11 | Конфігурація лінтера / форматера |
| 11/11 | Статична перевірка типів — C# (статично типізована) |
| 0/10 | Відтворюване середовище |
| 10/10 | Підтверджена практика роботи з агентами — 90 з останніх 100 комітів створено агентом або з його зазначенням |
| 8/8 | Автоматизоване супроводження — 8 з останніх 100 комітів — автоматичні оновлення залежностей |
| 0/10 | OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0 |
| has_nix | ні |
| has_tests | так |
| lockfiles | — |
| has_dockerfile | ні |
| typed_language | так |
| bootstrap_files | — |
| has_devcontainer | ні |
| has_linter_config | ні |
| typecheck_configs | — |
| agent_commit_share | 0,9 |
| toolchain_manifests | src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj, src/NexusLabs.Data.Sql.MySql/NexusLabs.Data.Sql.MySql.csproj, src/NexusLabs.Data.Sql/NexusLabs.Data.Sql.csproj, src/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj, src/NexusLabs.Framework.Analyzers/NexusLabs.Framework.Analyzers.csproj, src/NexusLabs.Framework/NexusLabs.Framework.csproj, src/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj, src/NexusLabs.StronglyTypedIds.Analyzers/NexusLabs.StronglyTypedIds.Analyzers.csproj, src/NexusLabs.StronglyTypedIds/NexusLabs.StronglyTypedIds.csproj, src/NexusLabs.TUnit.Assertions.Analyzers/NexusLabs.TUnit.Assertions.Analyzers.csproj, src/NexusLabs.TUnit.Assertions/NexusLabs.TUnit.Assertions.csproj, src/NexusLabs.Xunit.Assertions/NexusLabs.Xunit.Assertions.csproj, tests/NexusLabs.CodeAnalysis.Testing.TUnit.Tests/NexusLabs.CodeAnalysis.Testing.TUnit.Tests.csproj, tests/NexusLabs.Data.Sql.MySql.Tests/NexusLabs.Data.Sql.MySql.Tests.csproj, tests/NexusLabs.Data.Sql.Tests/NexusLabs.Data.Sql.Tests.csproj, tests/NexusLabs.Framework.Analyzers.Tests/NexusLabs.Framework.Analyzers.Tests.csproj, tests/NexusLabs.Framework.Tests/NexusLabs.Framework.Tests.csproj, tests/NexusLabs.StronglyTypedIds.Tests/NexusLabs.StronglyTypedIds.Tests.csproj, tests/NexusLabs.Xunit.Assertions.Tests/NexusLabs.Xunit.Assertions.Tests.csproj, tests/TUnit/NexusLabs.TUnit.Assertions.Tests/NexusLabs.TUnit.Assertions.Tests.csproj |
| dependency_bot_commit_share | 0,08 |
| 45/45 | Типізований код — C# (статично типізована) |
| 55/55 | Керовані розміри файлів — 0/175 файлів вихідного коду понад 60 КБ |
| primary_language | C# |
| largest_source_bytes | 45 288 |
| source_files_sampled | 175 |
| oversized_source_files | 0 |
Коли додано кожну зірку й форк — зібрано з GitHub і згруповано за днями. Кумулятивне зростання розміщено просто над денними додаваннями, з яких воно складається, тож їх видно одне проти одного: рівномірне органічне накопичення виглядає зовсім інакше, ніж різкий короткочасний сплеск. Там, де цю різницю можна виміряти, її подано як автентичність росту.
Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).
| 10 | Binary-Artifacts | no binaries found in the repo |
| 0 | Branch-Protection | branch protection not enabled on development/release branches |
| 10 | CI-Tests | 17 out of 17 merged PRs checked by a CI test -- score normalized to 10 |
| 0 | CII-Best-Practices | no effort to earn an OpenSSF best practices badge detected |
| 0 | Code-Review | Found 0/23 approved changesets -- score normalized to 0 |
| 3 | Contributors | project has 1 contributing companies or organizations -- score normalized to 3 |
| 10 | Dangerous-Workflow | no dangerous workflow patterns detected |
| 10 | Dependency-Update-Tool | update tool detected |
| 0 | Fuzzing | project is not fuzzed |
| 10 | License | license file detected |
| 10 | Maintained | 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10 |
| 10 | Packaging | packaging workflow detected |
| 0 | Pinned-Dependencies | dependency not pinned by hash detected -- score normalized to 0 |
| 0 | SAST | SAST tool is not run on all commits -- score normalized to 0 |
| 0 | Security-Policy | security policy file not detected |
| н/д | Signed-Releases | no releases found |
| 10 | Token-Permissions | GitHub workflow tokens follow principle of least privilege |
| 10 | Vulnerabilities | 0 existing vulnerabilities detected |
| Реєстр | Пакет | Обмеження версії | Маніфест |
|---|---|---|---|
| NuGet | Microsoft.CodeAnalysis.Analyzer.Testing | — | src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj |
| NuGet | Microsoft.CodeAnalysis.Common | — | src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj |
| NuGet | Microsoft.CodeAnalysis.CSharp.Workspaces | — | src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj |
| NuGet | TUnit.Assertions | — | src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj |
| NuGet | MySql.Data | — | src/NexusLabs.Data.Sql.MySql/NexusLabs.Data.Sql.MySql.csproj |
| NuGet | Microsoft.Extensions.Logging.Abstractions | — | src/NexusLabs.Data.Sql/NexusLabs.Data.Sql.csproj |
| NuGet | Microsoft.CodeAnalysis.CSharp | — | src/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj |
| NuGet | Microsoft.CodeAnalysis.CSharp.Workspaces | — | src/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj |
| NuGet | Microsoft.CodeAnalysis.Analyzers | — | src/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj |
| NuGet | Microsoft.CodeAnalysis.CSharp | — | src/NexusLabs.Framework.Analyzers/NexusLabs.Framework.Analyzers.csproj |
| NuGet | Microsoft.CodeAnalysis.Analyzers | — | src/NexusLabs.Framework.Analyzers/NexusLabs.Framework.Analyzers.csproj |
| NuGet | Microsoft.Extensions.Logging.Abstractions | — | src/NexusLabs.Framework/NexusLabs.Framework.csproj |
| NuGet | Microsoft.CodeAnalysis.CSharp | — | src/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj |
| NuGet | Microsoft.CodeAnalysis.CSharp.Workspaces | — | src/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj |
| NuGet | Microsoft.CodeAnalysis.Analyzers | — | src/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj |
| NuGet | Microsoft.CodeAnalysis.CSharp | — | src/NexusLabs.StronglyTypedIds.Analyzers/NexusLabs.StronglyTypedIds.Analyzers.csproj |
| NuGet | Microsoft.CodeAnalysis.Analyzers | — | src/NexusLabs.StronglyTypedIds.Analyzers/NexusLabs.StronglyTypedIds.Analyzers.csproj |
| NuGet | Microsoft.Extensions.DependencyInjection.Abstractions | — | src/NexusLabs.StronglyTypedIds/NexusLabs.StronglyTypedIds.csproj |
| NuGet | StronglyTypedId | — | src/NexusLabs.StronglyTypedIds/NexusLabs.StronglyTypedIds.csproj |
| NuGet | Microsoft.CodeAnalysis.CSharp | — | src/NexusLabs.TUnit.Assertions.Analyzers/NexusLabs.TUnit.Assertions.Analyzers.csproj |
| NuGet | Microsoft.CodeAnalysis.Analyzers | — | src/NexusLabs.TUnit.Assertions.Analyzers/NexusLabs.TUnit.Assertions.Analyzers.csproj |
| NuGet | TUnit.Assertions | — | src/NexusLabs.TUnit.Assertions/NexusLabs.TUnit.Assertions.csproj |
| NuGet | xunit.v3.assert | — | src/NexusLabs.Xunit.Assertions/NexusLabs.Xunit.Assertions.csproj |
| NuGet | xunit.v3.extensibility.core | — | src/NexusLabs.Xunit.Assertions/NexusLabs.Xunit.Assertions.csproj |
Повний розв'язаний набір залежностей із графа залежностей GitHub: 12 прямих і 5 непрямих (транзитивних) пакетів. Транзитивне замикання є повним, коли в репозиторії закомічено lockfile.
| Реєстр | Пакет | Версія | Зв'язок |
|---|---|---|---|
| NuGet | Microsoft.CodeAnalysis.Analyzer.Testing | — | пряма |
| NuGet | Microsoft.CodeAnalysis.Analyzers | — | пряма |
| NuGet | Microsoft.CodeAnalysis.Common | — | пряма |
| NuGet | Microsoft.CodeAnalysis.CSharp | — | пряма |
| NuGet | Microsoft.CodeAnalysis.CSharp.Workspaces | — | пряма |
| NuGet | Microsoft.Extensions.DependencyInjection.Abstractions | — | пряма |
| NuGet | Microsoft.Extensions.Logging.Abstractions | — | пряма |
| NuGet | MySql.Data | — | пряма |
| NuGet | StronglyTypedId | — | пряма |
| NuGet | TUnit.Assertions | — | пряма |
| NuGet | xunit.v3.assert | — | пряма |
| NuGet | xunit.v3.extensibility.core | — | пряма |
| NuGet | Microsoft.CodeAnalysis.CSharp.Analyzer.Testing | — | непряма |
| NuGet | Microsoft.CodeAnalysis.CSharp.CodeFix.Testing | — | непряма |
| NuGet | Microsoft.Extensions.DependencyInjection | — | непряма |
| NuGet | Microsoft.Extensions.TimeProvider.Testing | — | непряма |
| NuGet | Moq | — | непряма |
Звірка сповіщень не відбулася для цього звіту: No resolved dependencies carried a version and a supported ecosystem
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 814,
"has_wiki": true,
"homepage": null,
"languages": {
"C#": 1082924,
"Shell": 6173,
"PowerShell": 17824
},
"pushed_at": "2026-07-24T16:53:28Z",
"created_at": "2020-08-10T21:00:52Z",
"owner_type": "User",
"updated_at": "2026-07-24T16:46:14Z",
"description": null,
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "master",
"license_spdx_raw": "MIT",
"primary_language": "C#",
"significant_languages": [
"C#"
]
},
"owner": {
"blog": "https://links.devleader.ca",
"name": "Nick Cosentino",
"type": "User",
"login": "ncosentino",
"company": "Microsoft",
"location": "Washington, United States",
"followers": 278,
"avatar_url": "https://avatars.githubusercontent.com/u/5169280?v=4",
"created_at": "2013-08-05T21:27:51Z",
"is_verified": null,
"public_repos": 25,
"account_age_days": 4735
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.2.7",
"kind": "patch",
"published_at": "2026-07-24T16:39:49Z"
},
{
"tag": "v0.2.6",
"kind": "patch",
"published_at": "2026-07-11T02:38:53Z"
},
{
"tag": "v0.2.5",
"kind": "patch",
"published_at": "2026-06-18T02:13:00Z"
},
{
"tag": "v0.2.4",
"kind": "patch",
"published_at": "2026-06-17T15:47:07Z"
},
{
"tag": "v0.2.3",
"kind": "patch",
"published_at": "2026-06-09T22:35:52Z"
},
{
"tag": "v0.2.2",
"kind": "patch",
"published_at": "2026-05-30T03:21:38Z"
},
{
"tag": "v0.2.1",
"kind": "patch",
"published_at": "2026-05-24T19:10:26Z"
},
{
"tag": "v0.2.0",
"kind": "minor",
"published_at": "2026-05-23T21:42:14Z"
}
],
"recent_commits": [
{
"oid": "219016f16e6acd9b1d079df3b772baa1151ef8ed",
"body": "* chore(release): prepare v0.2.7\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: a71107e9-24db-4b48-9071-5d3ea2891feb\n\n* chore(release): ship v0.2.7 analyzer records\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: a71107e9-24db-4b48-9071-5d3ea2891feb\n\n---------\n\nCopilot-Session: a71107e9-24db-4b48-9071-5d3ea2891feb",
"is_bot": false,
"headline": "chore(release): prepare v0.2.7 (#29)",
"author_name": "Nick Cosentino",
"author_login": "ncosentino",
"committed_at": "2026-07-24T16:39:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "809d543fd8e6c896c7d7a1a750b8ebadb9640bc5",
"body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: a71107e9-24db-4b48-9071-5d3ea2891feb",
"is_bot": false,
"headline": "feat: add UUIDv7 identifier generation (#28)",
"author_name": "Nick Cosentino",
"author_login": "ncosentino",
"committed_at": "2026-07-24T15:56:15Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3990ee95cbabcea67d9cb8d72451b7565a03c02c",
"body": "Bumps [actions/setup-dotnet](https://github.com/actions/setup-dotnet) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-dotnet/releases)\n- [Commits](https://github.com/actions/setup-dotnet/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-dotnet\n dependency-\n[…]\nirect:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "build(deps): Bump actions/setup-dotnet from 5 to 6 (#23)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-20T03:11:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a671d86cebc53ed6ee0fe9f3b4d5e0bb89497d8f",
"body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\nCopilot-Session: a71107e9-24db-4b48-9071-5d3ea2891feb",
"is_bot": false,
"headline": "feat: add TUnit assertions for Tried results (#26)",
"author_name": "Nick Cosentino",
"author_login": "ncosentino",
"committed_at": "2026-07-20T03:10:51Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d07cb575291b34db1e82447c585cfcfc2a14711b",
"body": "Copilot-Session: fbf3b237-ad2b-4fad-a67d-72a522433255\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: sync Genesis ADR guidance (#22)",
"author_name": "Nick Cosentino",
"author_login": "ncosentino",
"committed_at": "2026-07-17T19:46:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "1d0cbf30631962c771998e6edcf50a1ae7ae400e",
"body": "Lockstep bump of every NexusLabs.* package to 0.2.6 and finalize the CHANGELOG section for the ArrayPool renting handles (RentedSpan + RentedMemory) and NLF0024 added in #20.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore(release): prepare v0.2.6 (#21)",
"author_name": "Nick Cosentino",
"author_login": "ncosentino",
"committed_at": "2026-07-11T02:38:53Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d364ad5fd57b42151aad0c38d9f678e3e6c0b905",
"body": "Replace the single copyable RentedArray struct with a two-type split where each type's safety is guaranteed by a different mechanism: RentedSpan<T> (ref struct) for synchronous code, whose heap-escape footguns (boxing, fields, capture, collections, crossing await/yield) are hard compile errors; and \n[…]\nrting discards or is-patterns and no longer missing parameter copies. RentedMemory<T> is not analyzed (copy-safe by construction).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat: pooled-buffer handles (RentedSpan + RentedMemory) + NLF0024 (#20)",
"author_name": "Nick Cosentino",
"author_login": "ncosentino",
"committed_at": "2026-07-11T02:31:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6357cf63aec16f565b48b0233c8779e896301fc3",
"body": "Bumps Microsoft.CodeAnalysis.Analyzers from 5.3.0 to 5.6.0\nBumps Microsoft.CodeAnalysis.Common from 5.3.0 to 5.6.0\nBumps Microsoft.CodeAnalysis.CSharp from 5.3.0 to 5.6.0\nBumps Microsoft.CodeAnalysis.CSharp.Workspaces from 5.3.0 to 5.6.0\nBumps TUnit.Assertions from 1.56.35 to 1.58.0\n\n---\nupdated-dep\n[…]\nupdate:semver-minor\n dependency-group: dotnet-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump the dotnet-dependencies group with 5 updates (#19)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-04T07:35:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "246ae3ebd73839614cca1df405f29bff5ae7e2c9",
"body": "Bumps Microsoft.NET.Test.Sdk from 18.6.0 to 18.7.0\nBumps TUnit.Assertions from 1.56.18 to 1.56.35\n\n---\nupdated-dependencies:\n- dependency-name: Microsoft.NET.Test.Sdk\n dependency-version: 18.7.0\n dependency-type: direct:production\n update-type: version-update:semver-minor\n dependency-group: dotn\n[…]\nupdate:semver-patch\n dependency-group: dotnet-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump the dotnet-dependencies group with 2 updates (#18)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-27T09:20:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "585826349d409f0931cd683ea782f1bd32f72ad7",
"body": "Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6.\n- [Release notes](https://github.com/actions/cache/releases)\n- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)\n- [Commits](https://github.com/actions/cache/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependenc\n[…]\nirect:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "build(deps): Bump actions/cache from 5 to 6 (#17)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-27T09:19:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "361df567fa3e33829a14c55994cbb11706707bca",
"body": "Bumps TUnit.Assertions from 1.54.0 to 1.56.18\n\n---\nupdated-dependencies:\n- dependency-name: TUnit.Assertions\n dependency-version: 1.56.18\n dependency-type: direct:production\n update-type: version-update:semver-minor\n dependency-group: dotnet-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump the dotnet-dependencies group with 1 update (#16)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-20T15:14:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cfac6ab83888852b1833068471ebe34d5dd27442",
"body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependenc\n[…]\nirect:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "build(deps): Bump actions/checkout from 6 to 7 (#15)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-20T15:14:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "50cf74b2bed8641d982bd578b311511ed3933132",
"body": "Bumps Microsoft.CodeAnalysis.Analyzers from 4.14.0 to 5.3.0\nBumps Microsoft.CodeAnalysis.Common from 4.14.0 to 5.3.0\nBumps Microsoft.CodeAnalysis.CSharp from 4.14.0 to 5.3.0\nBumps Microsoft.CodeAnalysis.CSharp.Workspaces from 4.14.0 to 5.3.0\nBumps Microsoft.Extensions.Logging.Abstractions from 10.0.\n[…]\nupdate:semver-minor\n dependency-group: dotnet-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump the dotnet-dependencies group with 8 updates (#11)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-18T06:21:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2699878350a27f8e320fe701c824aa1241ac31d9",
"body": "Lockstep bump of every NexusLabs.* package to 0.2.5 and finalize the CHANGELOG section for the self-deleting temporary file/directory primitives added in #13.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore(release): prepare v0.2.5 (#14)",
"author_name": "Nick Cosentino",
"author_login": "ncosentino",
"committed_at": "2026-06-18T02:13:00Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7881d51385e8e8ed369464da96d708b1cab6de6d",
"body": "* feat: add self-deleting temporary file/directory primitives\n\nAdd ITemporaryDirectory/ITemporaryFile disposable handles and their factories to NexusLabs.Framework.IO, giving a consistent, unit-test-friendly (interface-based) way to use temp files/dirs via using / await using. Cleanup clears read-on\n[…]\nCallers use Path.Combine(dir.Path, ...) directly.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\n\n---------\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat: self-deleting temporary file/directory primitives (#13)",
"author_name": "Nick Cosentino",
"author_login": "ncosentino",
"committed_at": "2026-06-18T01:54:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "21b6dfe4c9046e4da16b5174a68e520ae48e76c0",
"body": "Bumps the lockstep <Version> in Directory.Build.props from 0.2.3 to 0.2.4 - the\nsingle edit point that controls all NexusLabs.* packages.\n\nBuild verification (Release config): 0 warnings, 0 errors across the solution.\nTest verification (Release config): total 696, succeeded 695, skipped 1, failed 0.\n[…]\nNext step: tag v0.2.4 and push to trigger the release workflow (publishes every\npackage to nuget.org via OIDC trusted publishing).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore(release): prepare v0.2.4",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-06-17T15:47:07Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8c4cd54204e41842bf7e4dd313895d41c0e72281",
"body": "Add four NexusLabs.Framework.Analyzers rules and enforce them repo-wide:\n\n- NLF0020: async methods (async keyword or Async suffix) must declare a\n CancellationToken. Presence-only; CA1068 owns position. Exempts overrides,\n interface impls, async-void event handlers, test methods, Main, same-named\n\n[…]\n- Five sink-less framework-test fixtures carry documented NLF0020 suppressions;\n one dead private async-void test helper removed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat: add Moq and async cancellation-token analyzers (NLF0020-0023)",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-06-17T15:39:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "637510be9686412fa7506e34da3d78485945ec9f",
"body": "Bumps the lockstep <Version> in Directory.Build.props from 0.2.2 to 0.2.3 — the\nsingle edit point that controls all NexusLabs.* packages.\n\nBuild verification (Release config): 0 warnings, 0 errors across the solution.\nTest verification (Release config): total 664, succeeded 663, skipped 1, failed 0.\n[…]\nto master: tag v0.2.3 and push to trigger the release workflow\n(publishes every package to nuget.org via OIDC trusted publishing).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore(release): prepare v0.2.3 (#10)",
"author_name": "Nick Cosentino",
"author_login": "ncosentino",
"committed_at": "2026-06-09T22:35:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "09d0da79e48e768d6a2d2d8bf61b941d0fda3fa1",
"body": "… (#9)\n\nFlags newing an empty collection (any constructed type) that is immediately\nwidened to a read-only collection interface, where the caller can never mutate\nit. Suggests the shared empty singleton: [] for the list family,\nReadOnlyDictionary<K,V>.Empty for IReadOnlyDictionary, FrozenSet<T>.Empt\n[…]\ninterfaces and zero-length arrays (CA1825) are excluded. Ships with a\ncode fix. Category Performance, Warning, enabled by default.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat: add NLF0019 analyzer for empty read-only collection allocations…",
"author_name": "Nick Cosentino",
"author_login": "ncosentino",
"committed_at": "2026-06-09T21:44:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a4b7daed481ac55fcc96d87f2f72bbb19b8d2789",
"body": "Sharpen the AsyncGate XML docs so callers don't confuse it with AsyncSemaphoreLease: Set releases waiters, Dispose is teardown that cancels (never completes) anyone still parked. Add a single-timeline test proving Dispose cancels only the pending waiter while an already-released waiter stays successfully completed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "docs: clarify AsyncGate dispose-vs-lease semantics and add test",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-06-06T15:20:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "902d54059b3bb02ef87e141acd968101ecf71daa",
"body": "Replace lock(taskCompletionSource) with a dedicated System.Threading.Lock instance (the .NET 9 / C# 13 recommended pattern). Locking on the TaskCompletionSource itself risked accidental shared locking; mutual-exclusion behavior is otherwise unchanged.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "refactor: lock on dedicated Lock in MulticastDelegateExtensions",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-06-06T07:52:46Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7c8fde376f5c964023cb3009dfe46b64b8f000bd",
"body": "Awaitable manual-reset gate (Set/Reset/IsSet/WaitAsync) in NexusLabs.Framework.Threading, built on a TaskCompletionSource with RunContinuationsAsynchronously. IDisposable cancels pending waiters on scope exit so callers are never left parked. WaitAsync takes a mandatory CancellationToken per NLF0018.\n\nCovered by 25 tests: concurrent release, cancellation, reset cycling, distinct-waiter independence, and dispose enforcement.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat: add AsyncGate async manual-reset gate primitive",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-06-06T07:52:38Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d7f059aef11a750adddd1c640722304c6c8176c1",
"body": "Following NLF0013-NLF0018 work and the dog-food breaking changes the\nnew analyzers surfaced, accumulate the next-release notes under an\n[Unreleased] heading. Version in Directory.Build.props is intentionally\nnot bumped — the section name follows the Keep a Changelog convention\nfor pending-release no\n[…]\nFull repo build: 0 warnings, 0 errors. No tests\naffected. No version-number bump (per the user's 'not releasing yet'\ninstruction).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "docs(changelog): draft [Unreleased] section for the next release",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-06-01T04:42:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "041b97e562f74a77546a9df29e7e63fbc79e1ca6",
"body": "NLF0018 flags any method/constructor/local-function/delegate parameter\nof type System.Threading.CancellationToken that carries a default\nvalue (= default, = default(CancellationToken), = CancellationToken.None,\n= new CancellationToken()). Optional CancellationToken parameters let\ncallers silently dr\n[…]\nipped\n - NexusLabs.CodeAnalysis.Testing.TUnit.Tests: 23 passed / 0 failed / 0 skipped\n\nFull repo build: 0 warnings, 0 errors.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): add NLF0018 CancellationToken-default-forbidden rule",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-06-01T04:23:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c12b8b7c92694831e536fb435c706cf965cbb2f7",
"body": "NLF0017 flags classes that implement Carter.ICarterModule but are not\ndeclared 'public sealed class'. Carter's reflection-based module\ndiscovery enumerates PUBLIC types only — an internal (or protected,\nor private) module compiles cleanly but is silently skipped at\nstartup, returning 404 at runtime \n[…]\nipped\n - NexusLabs.CodeAnalysis.Testing.TUnit.Tests: 23 passed / 0 failed / 0 skipped\n\nFull repo build: 0 warnings, 0 errors.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): add NLF0017 Carter module public-sealed-class rule",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-06-01T01:41:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "223af52cd9779fd5bffe9db8a721f383dce01130",
"body": "NLF0016 flags HashSet<string> constructions and Enumerable.ToHashSet\ncalls (on IEnumerable<string> sources) that do not pass\nStringComparer.OrdinalIgnoreCase as a constructor/extension argument.\n\nTriggered by:\n - new HashSet<string>() // no args\n - new HashSet<string>(16) \n[…]\nipped\n - NexusLabs.CodeAnalysis.Testing.TUnit.Tests: 23 passed / 0 failed / 0 skipped\n\nFull repo build: 0 warnings, 0 errors.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): add NLF0016 HashSet<string> OrdinalIgnoreCase rule",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-06-01T00:50:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "525bdec819b19ddf1e2ae8e82e8392bf40b54f20",
"body": "NLF0015 flags methods whose name starts with 'Try' (followed by an\nupper-case character) but whose return type is NOT one of the\nrecognized Try-result shapes:\n\n - TriedEx<T> / Task<TriedEx<T>> / ValueTask<TriedEx<T>>\n - TriedNullEx<T> / Task<TriedNullEx<T>> / ValueTask<\n[…]\nipped\n - NexusLabs.CodeAnalysis.Testing.TUnit.Tests: 23 passed / 0 failed / 0 skipped\n\nFull repo build: 0 warnings, 0 errors.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): add NLF0015 Try-prefixed return-type analyzer",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-06-01T00:12:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9b2c30bd439415b190f19c221b1fbabd2a63d0f8",
"body": "NLF0013 enhancements\n====================\n\n1. Predeclared-local TryParse form is now detected. Previously the\n analyzer only caught the inline out var g declaration:\n\n if (Guid.TryParse(s, out var g)) { var id = new FooId(g); }\n\n Now it also catches the older form, where the local is decla\n[…]\nwide (1 pre-existing unrelated skip).\nBuild: 0 warnings / 0 errors with both analyzers dog-fooded across\nevery production project.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): extend NLF0013 + add NLF0014 (explicit IFormatProvider)",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-31T03:01:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ae1d9a51e5a35b3584e52dfe1984fd4f32b8e040",
"body": "Flags the awkward 'parse via backing type, then construct the ID' pattern\nfor types decorated with [StronglyTypedIds.StronglyTypedIdAttribute]:\n\n Pattern A: new XxxId(Guid.Parse(s))\n -> XxxId.Parse(s)\n\n Pattern B: if (Guid.TryParse(s, out var g)) { var id = new XxxId(g); }\n \n[…]\nests: 25/25 new pass; 175/175 analyzer suite; 513/513 solution-wide\n(1 pre-existing unrelated skip). Build: 0 warnings / 0 errors.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): add NLF0013 StronglyTypedId parse-pattern misuse",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-31T02:31:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "57311039c26528b172e86cc993ca5b5c895684fa",
"body": "Bumps the lockstep <Version> in Directory.Build.props from 0.2.1 to 0.2.2\n- the single edit point that controls all six NexusLabs.* packages.\n\nTest verification (Release config, post-bump):\n total: 488, succeeded: 487, skipped: 1, failed: 0\nThe 1 skip is the pre-existing flaky GenericEventExtension\n[…]\n && git push origin v0.2.2`\nto trigger the release workflow (publishes all six packages to nuget.org\nvia OIDC trusted publishing).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore(release): prepare v0.2.2",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-30T03:21:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "55fa50ddce17bb1f985bef8931df441ac4764f25",
"body": "Closes the two remaining gaps flagged after commit 17597ce on the\n\nLeasedAsyncDbConnection race-safety surface. All three tests are\n\ndeterministic (TCS + counting SemaphoreSlim, no Task.Delay).\n\nTest A: Close_RacingWithOpenInFlight_DisposeReleasesPostCloseLease_NoSlotLeak\n\n Open is parked inside _i\n[…]\na prior?.Dispose, 4 failures leaked). Restored byte-identical.\n\nFull Sql suite: 44/44 passing (was 41). Production file unchanged.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "test(data.sql): cover Close/Open race and concurrent-failure paths",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-30T02:55:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "17597cef692cd7aef24dd82c27573d484e0e5d09",
"body": "Adds a deterministic stress test that proves LeasedAsyncDbConnection's documented race-safety claim: under N concurrent OpenAsync calls past the Volatile.Read early guard, exactly one lease is retained in _lease and the other (N-1) are released via Interlocked.Exchange + prior?.Dispose().\n\nDetermini\n[…]\nay, no polling.\n\nMutation-verified: removing prior?.Dispose() from production causes the test to fail with Expected: 7, Actual: 0.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "test(data.sql): cover concurrent OpenAsync race-safety claim",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-30T02:37:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ef948f0f34f3ec59d49f2eafdb62628df1bce6e9",
"body": "Ports the learnings (not the code) from a downstream MySQL pool-leak\n\noutage post-mortem into NLF's provider-agnostic decorator layer.\n\nSaturated semaphore + never-cancelled CancellationToken previously hung\n\nOpenAsync forever. This change forces callers to declare an acquisition\n\nbudget at the type\n[…]\nltiple threads.\n\nMigration: pass Timeout.InfiniteTimeSpan to preserve the previous\n\nwait-forever behavior. Prefer a finite budget.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(data.sql)!: bounded lease acquire + ConnectionPoolExhausted",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-28T16:10:15Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "14e5b1a426c2e58208607acf1c720ac800d6083a",
"body": "The roslyn-analyzers.instructions.md file is scoped to authoring analyzers (applyTo: **/*Analyzer.cs, **/*CodeFixProvider.cs, etc.). Guidance on which third-party analyzer packages genesis templates ship is unrelated and belongs elsewhere (template README or package-selection docs).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "docs: remove off-topic disposal-hygiene section from roslyn instructions",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-28T04:54:13Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ffb9a3cf91f396b5443534d7cf236fce188b4a9b",
"body": "Warns when [NexusLabs.Framework.TransfersOwnership] is applied without\n\ntargets to a member whose type is not IDisposable/IAsyncDisposable.\n\nThe suppressor (NLFSUP001) silently ignores that combination — Shape B\n\nrequires the annotated member to be disposable, Shape A requires\n\ntargets — leaving the\n[…]\nonstraint.\n\nAlso removes a hardcoded rule-range comment in Directory.Build.props\n\nto avoid future drift each time a rule is added.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): add NLF0012 for inert [TransfersOwnership]",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-27T16:59:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5c6edf27bbda117647653c3efd169caf8ba6b4e9",
"body": "The Shape A form (attribute on a guard flag/parameter) now requires an\n\nexplicit list of target field/parameter names via params string[]. The\n\nloose parameterless-on-a-flag form is removed: it would silence IDISP007\n\non any dispose inside the guarded if-body, including bystanders the\n\nmethod does n\n[…]\nNG CHANGE: existing [TransfersOwnership] usages on guard flags\n\nwithout targets become inert. There are no external consumers yet.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): require nameof targets on [TransfersOwnership]",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-27T16:43:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e98eeb7303ac2ae39f82b1d5a58cbc0d448ee66e",
"body": "Every project in the solution now consumes NexusLabs.Framework.Analyzers\nthrough a single ProjectReference in Directory.Build.props rather than a\nhand-written ItemGroup in each csproj. Three projects are excluded by an\nexplicit name-based condition:\n\n - NexusLabs.Framework.Analyzers (self-ref\n[…]\n- dotnet test (whole solution): 442 total / 441 succeeded / 1 skipped\n (pre-existing GenericEventExtensionTests race) / 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore(analyzers): centralize NLF.Analyzers wiring in Directory.Build",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-27T16:09:08Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0f18fcc015d34f36ba28e8c0d34cde649d16eb13",
"body": "Eliminates the SuppressMessage boilerplate around every adapter and\ndecorator that legitimately owns its wrapped disposable, replacing it\nwith the [NexusLabs.Framework.TransfersOwnership] attribute. The\nNLFSUP001 DiagnosticSuppressor recognises the attribute and silences\nIDISP007 at the dispose call\n[…]\nsilences all 12\n IDISP007 sites that would otherwise fire)\n- Tests: 442 total / 441 passed / 1 pre-existing skip (no regressions)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "refactor: drop 12 [SuppressMessage(IDISP007)] for [TransfersOwnership]",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-27T15:52:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "688b3eb53ec70510648885a17681cdce97da4b0c",
"body": "The Shape B logic only walked UP from the diagnostic node looking for\nan enclosing InvocationExpression. That worked for one-liner adapter\nshapes (`=> _field.Dispose();`) but missed the decorator shape\n\n await _inner.DisposeAsync().ConfigureAwait(false);\n\ninside a try/finally. IDisposableAnalyzer\n[…]\nkingDecorator, with and without\n ConfigureAwait, and assert the diagnostic is suppressed.\n\n128 analyzer tests pass (126 + 2 new).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): NLFSUP001 covers await-wrapped dispose calls",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-27T15:52:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2c9b347d69b9d0caf2cf8110e0e26ec91f44c207",
"body": "Production code in StreamWithLength and ReadOnlySubstream uses a C# 12\nprimary-constructor bool parameter (e.g. _takeOwnershipOfStream) as\nthe Shape A flag, not a private field. The suppressor was implemented\ngenerically (semanticModel.GetSymbolInfo resolves the reference to its\nIParameterSymbol, th\n[…]\n-ctor parameter without regressing the suppression.\n\nAnalyzer test project: 126/126 pass (124 prior + 2 new), 0 failed,\n0 skipped.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "test(suppressor): cover Shape A with primary-ctor bool parameter",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-27T15:44:33Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "88b536ec3309fea0cb6fabef774a4305bfad346c",
"body": "Adds NexusLabs.Framework.Analyzers as an OutputItemType=\"Analyzer\"\nProjectReference to the 5 main src/ projects (Framework, Data.Sql,\nData.Sql.MySql, Xunit.Assertions, CodeAnalysis.Testing.TUnit), matching\nthe existing pattern used in NexusLabs.Framework.Tests. This is a\nprerequisite for the IDISP00\n[…]\n0002/0003 could be improved to flow-analyse the Success-ternary\n pattern; NLF0006/0009 could exempt members of the Safely helper.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore(analyzers): wire NLF analyzers into main src/ projects",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-27T15:43:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d304edaaef22630367526922331663c53bbbc21c",
"body": "The .XUnit-flavored Microsoft.CodeAnalysis.CSharp.Analyzer.Testing.XUnit\nand .CodeFix.Testing.XUnit packages transitively pull xunit 2.x, which\ncollides with xunit.v3 on the Xunit.Assert type (CS0433). We never used\ntheir only unique export (XUnitVerifier) - AnalyzerVerifier and\nCSharpCodeFixTest bo\n[…]\ny. 32 call sites rewritten, ~45 lines of workaround removed.\n\nVerified: 438 tests pass, 1 pre-existing skip, 0 warnings, 0 errors.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore(analyzers): drop xunit 2.x via non-XUnit Testing variants",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-27T03:07:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f8f4546491b571e5b29c58146217437065d8f57f",
"body": "Adds TransfersOwnershipAttribute (in main NexusLabs.Framework lib) and\nTransfersOwnershipDisposeSuppressor (in NLF.Analyzers) that programmatically\nsuppresses IDisposableAnalyzers IDISP007 (Don't dispose injected) at two\nshapes:\n\n Shape B (direct):\n [TransfersOwnership] private readonly Stream\n[…]\nentation. Parameter-only annotation is documented as\nv1-not-supported (would require dataflow tracking through field\nassignments).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): NLFSUP001 [TransfersOwnership] suppressor for IDISP007",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-27T02:59:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b55a588f2db64ee70b8085ccc5099143d08e3770",
"body": "Adds IDisposableAnalyzers 4.0.8 to NexusLabs.Framework via CPM and the\nlibrary-only PackageReference group in Directory.Build.props, applying it\nto all 4 runtime libraries (Framework, Data.Sql, Data.Sql.MySql, plus the\nanalyzers themselves via the shared group).\n\nAll 8 IDISP findings are intentional\n[…]\n. All 6 test exes green: 423 total / 422 pass / 1 skip / 0 fail\n(the 1 skip is the pre-existing MulticastDelegateExtensions race).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore(analyzers): adopt IDisposableAnalyzers 4.0.8 in NLF",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-26T06:44:33Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "db08bd6e3a89c3a88ed14e20912d7de60b460681",
"body": "Now that TriedEx/TriedNullEx/Tried implement IDisposable + IAsyncDisposable\n(commit 467ffce), callers that wrap a disposable T should use\n`using`/`await using` so the wrapped value disposes deterministically.\nNLF0011 fires when:\n\n- the local's type is TriedEx<T>/TriedNullEx<T>/Tried<T> in\n NexusLab\n[…]\nargument pass, field/property assignment, explicit\nDispose/await DisposeAsync.\n\n12 new tests cover the positive and negative cases. Co-authored-by:\nCopilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): NLF0011 disposable-aware Tried* usage",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-26T06:39:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "467ffce896f008c210d9bd99ff2698429c2c3084",
"body": "Both interfaces are implemented directly because pattern-based using on\nnon-ref structs emits CS1674. The structs cannot be ref structs (they\nflow through Task<T> in async state machines).\n\nDispose body is `if (Success && _value is IDisposable d) d.Dispose();`.\nFor non-disposable T the JIT specializ\n[…]\ne cost.\n\nDisposeAsync prefers IAsyncDisposable, falls back to IDisposable, else\nreturns a completed task. Error is never disposed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(framework): IDisposable/IAsyncDisposable on Tried* types",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-26T06:34:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "57699bda9892ebf8e7d097387bfc358be55931f2",
"body": "Rewrite NLF0001-NLF0010 descriptors per genesis roslyn-analyzers.instructions.md:\n\n- title: prescriptive single line (what to do)\n\n- messageFormat: multi-sentence prescriptive (WHAT IS WRONG. HOW TO FIX. Names the concrete API/syntax to switch to.)\n\n- helpLinkUri: per-rule URLs at docs/analyzers/NLF\n[…]\ning 97 analyzer tests pass unchanged. Full repo: 392 tests / 391 pass / 1 skip (pre-existing race) / 0 fail. Build 0 warn / 0 err.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): LLM-actionable messages + per-rule help URLs",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-26T06:31:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a7b5e153b2d72fed5b879372bbd89c290cddaa52",
"body": "Sync-Instructions.ps1 pull from genesis (genesis@bbde0e3):\n\n- roslyn-analyzers.instructions.md gains 'Writing LLM-actionable diagnostics' section and IDisposableAnalyzers note.\n\n- raw-string-literals.instructions.md added (was missing from prior sync).\n\nSets the diagnostic-authoring standard before NLF0001-NLF0010 messageFormat rewrites.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "docs(instructions): sync from genesis (LLM-friendly diagnostics)",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-26T06:27:11Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "c66dc73af97f15bece15f45055d12b62ff255656",
"body": "Add the Analyzers project as OutputItemType=Analyzer on the NexusLabs.Framework.Tests csproj so the runtime library's own tests are gated by NLF0001-NLF0010.\n\nSuppress NLF0001/NLF0002/NLF0003/NLF0008 on this project only:\n\n- NLF0002/0003: this is the unit-test project for TriedEx<T>/TriedNullEx<T> t\n[…]\naining six rules (NLF0004-0007, NLF0009-0010) stay active. Smoke test confirms NLF0010 fires under the new wiring; 391 tests pass.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "build(framework-tests): self-apply NexusLabs analyzers",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-26T05:51:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cf7014643513da132861c7313e38966bb9294ab0",
"body": "Switch the Analyzers test project's ProjectReferences to OutputItemType=Analyzer so NLF0001-NLF0010 (and the CodeFixes) run against the test project's own sources during build. Without this, the analyzers were not gating their own test infrastructure -- which is how the NLF0010 violations in TestSou\n[…]\nrms 0 warnings; smoke test (deliberate NLF0010 violation) confirms the analyzer now fires as an error under TreatWarningsAsErrors.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "build(analyzers-tests): self-apply NexusLabs analyzers",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-26T05:45:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c8949ed2e8f1df10cda841061555d2ca50a31f90",
"body": "The two const strings in TestSources used the dangling-opening form that NLF0010 flags. Move the opening triple-quote to its own line, aligned with the closing triple-quote, so the file follows its own published convention.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "style: align raw string opening per NLF0010 in TestSources",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-26T05:40:48Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "99a0d1b6965b76ae77885d696a2fdce0db10c02e",
"body": "Code fix for NLF0010 (RawStringLiteralAlignmentAnalyzer) that moves the dangling opening triple-quote to its own line, indented to match the closing triple-quote.\n\nRequires splitting the analyzer assembly into two projects per RS1038 (DiagnosticAnalyzer classes cannot live in an assembly that refere\n[…]\nthod-argument / interpolated cases. All 97 analyzer tests pass (was 93). Full repo: 392 total / 391 passed / 1 skipped / 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): add NLF0010 code fix + split CodeFixes assembly",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-25T17:18:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "edd124fcf26a0ba3329983b380cacb5cd718e2a5",
"body": "Flags multi-line raw string literals whose opening triple-quote dangles at the end of an assignment / return / argument line instead of sitting on its own line aligned with the closing triple-quote. Covers both regular `literals (MultiLineRawStringLiteralToken) and interpolated \\$`literals (Interpol\n[…]\n-line exemption.\n\nSeverity: Warning. All 93 analyzer tests pass (was 81). Full repo: 388 total / 387 passed / 1 skipped / 0 failed.\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): add RawStringLiteralAlignmentAnalyzer (NLF0010)",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-25T16:58:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a78087a39bba0424f037ef04eea124931031e38d",
"body": "All 81 raw string literals in the 5 analyzer test files had the opening triple-quote dangling at the end of the assignment line:\n\n var source = `\n using System;\n `;\n\nThis compiles fine (the closing ``` defines the strip indent) but the opening delimiter is offset from the closing on\n[…]\n `;\n\nMechanical edit via regex across 5 files (ConsoleWriteAnalyzerTests + the 4 Try-pattern test files). All 81 tests still pass.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "style: align raw string literal delimiters in analyzer tests",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-25T15:57:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6df69d004088cd6c7344bbd5be7bf3b9f694c447",
"body": "Port from BrandGhost NexusAI.Analyzers. Flags async methods whose return type is Task<TriedEx<T>> or Task<TriedNullEx<T>> but whose body neither directly delegates to another method returning the same shape nor wraps via Try.GetAsync / Try.GetOrNullAsync.\n\nSuch methods promise the caller they will s\n[…]\nnalyzer alone provides the diagnostic value; the CodeFix is a substantial ergonomics enhancement worth its own focused workstream.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): add AsyncTryResultMethodAnalyzer (NLF0009)",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-25T06:05:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d24042ef87471a221bbef45a4174afd9daa25b23",
"body": "Port from BrandGhost NexusAI.Analyzers. Three diagnostics enforce correct usage of the NexusLabs.Framework.Try orchestration helpers:\n\n- NLF0006: async method whose entire body is a single try-catch — should be rewritten with Try.Async / Try.GetAsync / Try.GetOrNullAsync. The Try helpers exist preci\n[…]\ntotal in the analyzers test suite, 0 failures). Added Try + ILogger stubs to shared TestSources.TryHelperStubs constant for reuse.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): add TryPatternAnalyzer (NLF0006/NLF0007/NLF0008)",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-25T06:01:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "76d3b5649b006354829e0c5a83fe106397343257",
"body": "Port from BrandGhost NexusAI.Analyzers. Two diagnostics:\n\n- NLF0004: redundant null check on TriedEx/TriedNullEx Error after Success has been established as false. The TriedEx contract guarantees Error is non-null in that case, so the null check is dead code that obscures intent.\n- NLF0005: when ret\n[…]\n not trigger). Severity: Warning (BG used Error). 17 ported tests, all passing (48 total in the analyzers test suite, 0 failures).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): add TryResultErrorUsageAnalyzer (NLF0004/NLF0005)",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-25T05:56:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f41b33801d40f60883fe13178f280ba7e34d35fd",
"body": "Port from BrandGhost NexusAI.Analyzers. Flags reads of TriedEx<T>.Value or TriedNullEx<T>.Value not guarded by a Success-true check (NLF0002), and reads of .Error not guarded by a Success-false check (NLF0003). Honors short-circuit AND/OR, ternary, and early return/throw/break/continue patterns. Nam\n[…]\nc.NLF000{2,3}.severity = error in .editorconfig). 23 ported tests, all passing (31 total in the analyzers test suite, 0 failures).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): add TryResultAnalyzer (NLF0002/NLF0003)",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-25T05:54:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e2a35bb44cbc5694ff9643a0537d0a285c3b3cf2",
"body": "Patch bump. Consumed transitively by NexusLabs.CodeAnalysis.Testing.TUnit and used directly by analyzer test projects. Build: 0 warnings / 0 errors. Tests: 303 total / 302 passed / 1 skipped / 0 failed across all 6 test projects.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore(deps): bump Microsoft.CodeAnalysis.Analyzer.Testing 1.1.2 -> 1.1.4",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T20:35:06Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0fa7081a8eb79621e3285c7973611c024c0e27bf",
"body": "Self-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 303 total, 302 passed, 1 skipped, 0 failed\n (unchanged)\nMEDIUM Tech debt introduced: none. Versioning model simplified (single\n \n[…]\nn this release - everything is\nat a new version).\n\nBuild: 0 errors, 0 warnings.\nTests: 303 total, 302 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore(release): prepare v0.2.1 (lockstep versioning)",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T19:10:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2c86c5d08f1838c61330cecfa704326846ceb599",
"body": "…(#6)\n\n---\nupdated-dependencies:\n- dependency-name: Microsoft.Extensions.Logging.Abstractions\n dependency-version: 10.0.8\n dependency-type: direct:production\n update-type: version-update:semver-patch\n dependency-group: dotnet-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump Microsoft.Extensions.Logging.Abstractions from 10.0.0 to 10.0.8 …",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-05-24T18:19:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c2c5429444495909784c0a57a81cb671b7451ff",
"body": "Self-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 303 total, 302 passed, 1 skipped, 0 failed\n (23 new TUnitVerifier tests covering every\n IVerifier method: Empty, \n[…]\n MIT\nlicense, and the four expected dependencies.\n\nBuild: 0 errors, 0 warnings.\nTests: 303 total, 302 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(codeanalysis-tunit): TUnit IVerifier for analyzer test harness",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T17:09:48Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7ed91664cc7fe02ae82843098df18a9c462110ea",
"body": "…t1051 NoWarn\n\nSelf-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 280 total, 279 passed, 1 skipped, 0 failed\n (test count unchanged - threading existing\n cancellati\n[…]\nnc() -> await sut.OpenNewConnectionAsync(_ct)\n\nBuild: 0 errors, 0 warnings.\nTests: 280 total, 279 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "refactor(tests): use TestContext.Current.CancellationToken, drop xUni…",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T16:57:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "75ab9fb1defa85c7ebefea2771ea6c77a9cb0bb2",
"body": "Self-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 280 total, 279 passed, 1 skipped, 0 failed\n (test count unchanged - extracting helper)\nMEDIUM Tech debt introduced: none. Consolidated two nea\n[…]\n fix pre-existing issues unrelated to your task\".\n\nBuild: 0 errors, 0 warnings.\nTests: 280 total, 279 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "refactor(tests): extract ActivityCapture helper to its own file",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T16:53:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "37180d7d67cefb08ac3c0b520e0ad83eafe83f6d",
"body": "Self-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 280 total, 279 passed, 1 skipped, 0 failed\n (test count unchanged - same 5\n LoggingAsyncDbCommandTests refactored\n[…]\noved - no longer referenced anywhere in the repo.\n\nBuild: 0 errors, 0 warnings.\nTests: 280 total, 279 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "refactor(data-sql-tests): use Mock<ILogger> instead of CapturingLogger",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T16:51:24Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1f63d527c7b1543c03087fa9125562a87687de38",
"body": "…ew Mock\n\nSelf-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 280 total, 279 passed, 1 skipped, 0 failed\n (test count unchanged - structural refactor)\nMEDIUM Tech debt introduced: none. Existing\n[…]\nposing the connection within the test.\n Removed.\n\nBuild: 0 errors, 0 warnings.\nTests: 280 total, 279 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "refactor(data-sql-tests): use MockRepository + VerifyAll, drop bare n…",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T16:49:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a2dbf4b4f878b3915a996f21a1846e394ad706e0",
"body": "Self-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 280 total, 279 passed, 1 skipped, 0 failed\n (+1 new test: OpenAsync_UsesTimeProviderForTimestamp)\nMEDIUM Tech debt introduced: none\nMEDIUM Mis\n[…]\n TimeProvider.System for illustrative simplicity.\n\nBuild: 0 errors, 0 warnings.\nTests: 280 total, 279 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "refactor(data-sql): OpenTrackingDecorator takes TimeProvider",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T16:45:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2f596ffac2b397ab8bafae308f4533f123839577",
"body": "Self-assessment:\n\nHIGH Omitted behavior: none for this scope - this is the first cut of\n the core analyzer package with one rule.\n Additional analyzers from BrandGhost's\n NexusAI.Analyzers (Try-patt\n[…]\nupkg + snupkg generated. Consumer smoke test (transient classlib\nreferencing 0.1.0 .nupkg via local feed) confirmed NLF0001 fires.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(analyzers): scaffold NexusLabs.Framework.Analyzers + NLF0001",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T06:37:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "32c2d9498bf8b65dd7ba0995994f3ff663a13eef",
"body": "Self-assessment:\n\nHIGH Omitted behavior: none for this scope\nHIGH Implementation gaps: none\nHIGH Test results: 271 total, 270 passed, 1 skipped, 0 failed\n (24 new tests: 15 instance Tracer + 9 static\n Tracer.D\n[…]\nof ActivitySource (it is constructable directly).\n\nBuild: 0 errors, 0 warnings.\nTests: 271 total, 270 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(framework): add ITracer / Tracer over ActivitySource",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T04:28:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b6dbc80b4d56ec71355cb4fc088302ee7b0d09fe",
"body": "Self-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: unchanged - 247 total, 246 passed, 1 skipped\nMEDIUM Tech debt introduced: none - this commit actively REMOVES the\n hand-curated type-inventory\n[…]\nta.Sql -> Framework 0.2.0 + Microsoft.Extensions.Logging.Abstractions\n10.0.0; Data.Sql.MySql -> Data.Sql 0.1.0 + MySql.Data 9.7.0.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "docs: add Data.Sql + Data.Sql.MySql sections to CHANGELOG and README",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T03:50:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "30c977436d99c63bf8f4e8fd9007cc21b4f0bd20",
"body": "…paths\n\nSelf-assessment:\n\nHIGH Omitted behavior: - no integration tests against a live MySQL\n (per locked decision D11; deferred)\n - no MySqlConnector adapter (deferred per user)\n - no Needlr [DoN\n[…]\nteAsyncDbConnectionFactory in NexusLabs.Data.Sql.\n\nBuild: 0 errors, 0 warnings.\nTests: 239 total, 238 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(data-sql-mysql): port MySQL provider with fully delegated async …",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T03:10:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c51b31052d99e7e97108ebfdb017b23f2d867a39",
"body": "…ctory)\n\nSelf-assessment:\n\nHIGH Omitted behavior: none for this phase. Provider-agnostic core is\n complete. MySQL provider lands in Phase 3.\nHIGH Implementation gaps: none\nHIGH Test results: 221 total, 220 passed, 1 skipped, 0 failed\n \n[…]\n51 (matches existing Framework.Tests convention).\n\nBuild: 0 errors, 0 warnings.\nTests: 221 total, 220 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(data-sql): add provider-agnostic core (lease/tracking/logging/fa…",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T03:10:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "61a84dc2e8ef345745b54853d096445d13aabbee",
"body": "Self-assessment:\n\nHIGH Omitted behavior: none (scaffolding-only commit)\nHIGH Implementation gaps: none for this phase\nHIGH Test results: 192 total, 191 passed, 1 skipped, 0 failed\n (+2 placeholder ScaffoldTests so MTP does not\n \n[…]\nhe 4 new projects under /src/ and /tests/ folders\n\nBuild: 0 errors, 0 warnings.\nTests: 192 total, 191 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: scaffold NexusLabs.Data.Sql + NexusLabs.Data.Sql.MySql projects",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T03:10:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "11f8610991d99e6efed81283e009597f2a9b09f2",
"body": "Self-assessment:\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 190 total, 189 passed, 1 skipped, 0 failed\n (8 new AsyncSemaphoreLease tests)\nMEDIUM Tech debt introduced: none\nMEDIUM Missing test coverage: \n[…]\n cancellation while waiting, pre-cancelled token.\n\nBuild: 0 errors, 0 warnings.\nTests: 190 total, 189 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(framework): add AsyncSemaphoreLease primitive",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T03:10:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "89e0bb0b812d5658ed6d0ee2f5d86c80b75ee4ab",
"body": "Self-assessment (HIGH=none, MEDIUM=none, LOW only):\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 182 total, 181 passed, 1 skipped,\n 0 failed (unchanged, comments-only)\nMEDIUM \n[…]\n comments on public APIs throughout the codebase.\n\nBuild: 0 errors, 0 warnings.\nTests: 182 total, 181 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: trim chatty comments per code-comment-discipline",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T00:01:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ccb5b043201d54b5c75e9ec0419ce1f2c138b2c5",
"body": "…ss-lib parity)\n\nSelf-assessment (HIGH=none, MEDIUM=none, LOW only):\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 182 total, 181 passed, 1 skipped,\n 0 failed (no test changes;\n[…]\n-2/3 in v0.2.0; Roslynator\nanalyzer adoption is the remaining piece to actually exercise the .editorconfig\nRCSxxx rule severities.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: add Roslynator analyzer + fix surfaced RCS issues (genesis cla…",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T00:00:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "570e60ac372c509f0c30e725923c3cb6dadacd2d",
"body": "Self-assessment (HIGH=none, MEDIUM=none, LOW only):\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 182 total, 181 passed, 1 skipped,\n 0 failed (+16 new Try tests)\nMEDIUM Tech de\n[…]\nng fix from the prior\ncommit. Will be promoted to a real version section when the next tag goes out.\n\nBuild: 0 errors, 0 warnings.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat: add Try orchestration layer + LoggerCancellationExtensions",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-24T00:00:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5d7efb8f2a06ab34cec8d7ea4f698c05c3332fcf",
"body": "…cessor)\n\nSelf-assessment (HIGH=none, MEDIUM=none, LOW only):\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 166 total, 165 passed, 1 skipped,\n 0 failed (+13 new tests covering\n\n[…]\n requires consuming projects to be\nOutputType=Exe (i.e. test runners). This package extends xUnit; it is\nnot itself a test runner.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat: new package NexusLabs.Xunit.Assertions 0.1.0 (Testing.Xunit suc…",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T23:59:08Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f37dce906adc16aa2202e86bc89ca2c0280ea292",
"body": "Self-assessment (HIGH=none, MEDIUM=none, LOW only):\n\nHIGH Omitted behavior: none\nHIGH Implementation gaps: none\nHIGH Test results: 153 total, 152 passed, 1 skipped, 0 failed\n (+4 new null-callback regression tests)\nMEDIUM Tech debt introduce\n[…]\nerationException instead of ArgumentNullException when the\ncallback returns null. Acceptable per 0.x semver (anything may change).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "fix: explicit null handling for callback returns in Safely.GetResult*",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T23:58:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6dec1ca25cb30b8d749a427be1467683626dd365",
"body": "Brings NexusLabs.Framework in line with how genesis scaffolds new\nprojects. The repo was never scaffolded from genesis (it predates the\ntemplate system), so this is a first-time application of the standard\nseed.\n\nSelf-assessment for the gated pre-commit hook (HIGH=none, LOW only):\n\nHIGH Omitted be\n[…]\ntributors should also set core.hooksPath after clone.\n\nBuild: 0 errors, 0 warnings.\nTests: not re-run (no production code change).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: apply genesis instruction files + git hooks + AGENTS.md scaffold",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T23:58:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2535cad0b36f27402348514044a613fb4defffde",
"body": "Folds in the 5 Dependabot PRs opened on first push to master, so they don't\neach land as separate merge commits and clutter the v0.2.0 history.\n\nNuGet (Directory.Packages.props):\n- Microsoft.SourceLink.GitHub 10.0.203 -> 10.0.300\n- Microsoft.NET.Test.Sdk 18.0.1 -> 18.5.1\n- xunit.v3 \n[…]\nmaster.\nDependabot will close them automatically (or they can be closed manually\nwith \"Superseded by master <sha>\" as the reason).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: apply pending Dependabot bumps in one commit (superseding 5 PRs)",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:42:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a8e06d1a40501dec58f645c348db22f146d8969d",
"body": "…al nuget.org UI\n\nThe Phase 8 doc described fields that don't exist on the actual Create form\n(\"Package ID glob\") and named one field wrong (\"policy owner\" instead of\n\"Package Owner\"). Confirmed against the live UI: the form is exactly\nPolicy Name + Package Owner + Repository Owner + Repository + Wo\n[…]\nime, and the resurrection-attack protection they\n provide.\n- Restructured the table to match the actual UI field labels in order.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "docs(trusted-publishing): correct setup walkthrough to match the actu…",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:24:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8e03734274cf3bd59f52fda660ed533196c43776",
"body": "…t NuGet/login@v1 README)\n\nPhase 8 wrote release.yml using NuGet/login@v1 with input `endpoint:` and\nno explicit --api-key on the subsequent dotnet nuget push. Per the action's\nofficial README at https://github.com/NuGet/login the actual contract is:\n\n- Required input: `user:` (the nuget.org usernam\n[…]\nthe menu\n item, the feature is not yet enabled for your account)\n\nNo code change. Workflow files are inert until a tag is pushed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "fix: release.yml requires user: + explicit --api-key (verified agains…",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:24:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "25b5183bccd40c8fa650899eb5bc16d2ec0c95dd",
"body": "…re in flux)\n\nPer maintainer feedback: the package surface still has known follow-ups\n(deprecated ITimeProvider, pre-existing Safely null-handling gap, race in\nMulticastDelegateExtensions) so committing to 1.0.0 prematurely promises\nAPI stability we are not ready to underwrite. semver allows further\n[…]\n when ready, tag v0.2.0 (not v1.0.0):\n git tag -a v0.2.0 -m \"0.2.0 - modernization, archived 6 packages\"\n git push origin v0.2.0\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "fix: retarget v1.0.0 cut as 0.2.0 (stay in 0.x while several things a…",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:24:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b42d29b994487d4351c5c356181cc6d0d849d440",
"body": "NexusLabs.Framework version: 0.1.4 -> 1.0.0\n\nAdds CHANGELOG.md (Keep a Changelog format) documenting the v1 release:\n- Removed (Breaking): 12 types deleted in Phase 2b\n- Changed (Breaking): 11 types moved out of BCL namespaces in Phase 5a\n- Deprecated: ITimeProvider + TimeProviderWrapper\n- Fixed: St\n[…]\none-time nuget.org dashboard config)\n- docs/archived-packages/NUGET_DEPRECATION_CHECKLIST.md (mark each 0.x package ID Deprecated)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: phase 10 - cut v1.0.0 (CHANGELOG + version bump)",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:24:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0a60df5ef54086ae27b8b582281660d03ef52628",
"body": "Procedure:\n1. Installed Microsoft.DotNet.ApiCompat.Tool 10.0.300 as a local dotnet tool\n (manifest at .config/dotnet-tools.json).\n2. Downloaded NexusLabs.Framework 0.1.4 from nuget.org and extracted lib/net10.0/.dll.\n3. Ran: dotnet apicompat --left <0.1.4 dll> --right <v1 dll>\n4. Wrote docs/v1-bre\n[…]\ndownloaded baseline, extracted dll, and raw diff)\nis already covered by .gitignore from Phase 1A so nothing under it is committed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: phase 9 - v1 breaking-API inventory via dotnet apicompat",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:24:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "78e5957be23191ca713f681e1fa92b23fe099803",
"body": "Removes:\n- .circleci/ (the prior CI was restore + build only; no tests, no pack, no publish)\n\nAdds:\n- .github/workflows/ci.yml\n Trigger: PR to master, push to master, workflow_dispatch.\n Steps: actions/checkout@v6, NuGet restore cache, setup-dotnet@v5 (reads global.json),\n restore, build, \n[…]\ne to land before\n the dashboard setup.\n\nBuild verify (workflow files are not compiled, so this is just a sanity check):\n0 errors.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: phase 8 - GitHub Actions CI + OIDC release pipeline",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:24:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a1351f69e527107ad6071a8afb1cba654193788f",
"body": "LICENSE:\n- Added MIT LICENSE at repo root.\n\nREADME.md:\n- Rewrote from the BitBucket-template scaffold into a real package README\n describing surviving types, archived packages, and install instructions.\n Used as both repo README and PackageReadmeFile.\n\nDirectory.Build.props - packaging conventions\n[…]\np this phase semantically inert for the package\noutput. The bump to 1.0.0 happens in Phase 10 alongside the CHANGELOG.md creation.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: phase 7 - package metadata foundation",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:24:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7ee1004ab1fc217b46a119a951ec465d74e4ebcf",
"body": "Hoists test-project conventions into the repo-wide Directory.Build.props\nso any future *.Tests project gets standard wiring automatically:\n\nFor projects matching $(MSBuildProjectName.EndsWith('.Tests')):\n- IsPackable=false, IsTestProject=true, OutputType=Exe (required for MTP)\n- PackageReferences: M\n[…]\nt change package outputs or test runner behavior.\n\nBuild: 0 errors, 0 warnings.\nTests: 149 total, 148 passed, 1 skipped, 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: phase 6 - test runner conventions in Directory.Build.props",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:24:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "aa5dfc5e4a5958b3b85affba44de7a0c74a8cd8f",
"body": "Library code (src/NexusLabs.Framework) warning fixes:\n\nDiagnostics/ProcessExtensions.cs:\n- TaskCompletionSource<object> -> TaskCompletionSource<object?> (TrySetResult(null) was CS8625)\n- Action<Process> afterStartCallback = default -> Action<Process>? afterStartCallback = null\n\nSafely.cs:\n- 4x 'retu\n[…]\nw enabled repo-wide.\n\nBuild: 0 errors, 0 warnings.\nTests: 149 total, 148 passed, 1 skipped (flaky test from Phase 5d-1), 0 failed.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: phase 5d-2/3 - fix lib warnings + flip TreatWarningsAsErrors=true",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:24:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "680fcad5f6f039b11d82b95e7e619d19c5093a55",
"body": "Test fixes:\n\n1. TriedNullExTests.ImplicitConversion_NullValueToTriedReturnType{Inline,SplitLine}_ExpectedValue\n The tests were materially broken: Assert.Null(TryDoSomething()) boxed the\n TriedNullEx<int?> struct into object, which is never null. Fixed by\n explicitly typing the local as 'int? r\n[…]\ne guidance).\n\nTest results: 149 total, 148 passed, 1 skipped, 0 failed.\nBuild: 0 errors. Test-project warnings drop from ~96 to 0.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: phase 5d-1 - fix flaky tests + suppress test analyzer noise",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:24:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7c20c569d136b3e781472f6bab0ffc4fccde3a5e",
"body": "The Position setter docs claimed 'Setting a value less than or equal to zero\nis ignored' but 0.1.4's release notes already documented the fix removing that\nguard. The implementation just delegates to the wrapped stream. The\nPosition_SetToZero_Works test confirms the intended behavior.\n\nUpdated both \n[…]\nmarks> and the property-level <summary> to\ndescribe the actual unconditional-delegation behavior.\n\nNo behavior change (docs-only).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: phase 5c - fix StreamWithLength.Position docs vs impl mismatch",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:23:59Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "230925709efb7b6a8acbb46de570ee7f1f2797e2",
"body": "Marks both as Obsolete with a warning-level diagnostic pointing at:\n- BCL System.TimeProvider (.NET 8+) as the canonical replacement\n- Microsoft.Extensions.TimeProvider.Testing package for FakeTimeProvider in tests\n\nBoth types remain functional and binary-compatible. They are scheduled for\nfull remo\n[…]\nuild: 0 errors, 83 warnings (stable - the fluctuations are MSBuild dedup\nnoise on the same set of pre-existing analyzer warnings).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: phase 5b - [Obsolete] ITimeProvider + TimeProviderWrapper",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:23:59Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "01309ae08b7ae5c2084136f1f12582451746961f",
"body": "…Framework.X)\n\nMoves all surviving Framework files out of BCL namespaces into NexusLabs.Framework.* sub-namespaces. This is a breaking change for downstream consumers but the entire point of the v1 cut.\n\nFiles moved:\n- Data/IAsyncDbCommand, IAsyncDbConnection, IAsyncDbDataReader, IDbConnectionFactor\n[…]\nstics;' added where the moved types are used.\nMechanical fix; clear 'type or namespace not found' errors will point each consumer.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: phase 5a - namespace pollution cleanup (System.X -> NexusLabs.…",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:23:59Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "45f937bdf376ff1455cec3a8e13ee047646e0ab8",
"body": "- Add Directory.Packages.props with ManagePackageVersionsCentrally=true\n- Pin test package versions: Microsoft.NET.Test.Sdk 18.0.1, xunit.v3 3.2.1, xunit.runner.visualstudio 3.1.5\n- Remove Version= attributes from PackageReferences in tests/NexusLabs.Framework.Tests.csproj\n- CentralPackageTransitive\n[…]\nero PackageReferences (pure library) so no CPM work there.\n\nBuild: 0 errors, 83 warnings (unchanged from Phase 3 - pure refactor).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: phase 4 - Central Package Management",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:23:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5758ae6e494f42ee75417cd871dcc32b76f71378",
"body": "Pure git mv operations, no content edits:\n- NexusLabs.Framework/ -> src/NexusLabs.Framework/\n- NexusLabs.Framework.Tests/ -> tests/NexusLabs.Framework.Tests/\n\nUpdated:\n- NexusLabs.slnx: added Solution Items folder, src/ folder, tests/ folder\n- tests/NexusLabs.Framework.Tests/NexusLabs.Fram\n[…]\n\\..\\src\\NexusLabs.Framework\\NexusLabs.Framework.csproj\n\nBuild: 0 errors, 83 warnings (unchanged from Phase 2b - pure layout move).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: phase 3 - layout (src/ and tests/)",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:23:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "54adcf491e10f8c8eeb53470dfc3a448b8dbad51",
"body": "Deletes 11 files from NexusLabs.Framework + 2 matching test files:\n\nDropped library files:\n- Cast.cs / ICast.cs (346 lines of reflection-based magic-cast)\n- OnlyOnce.cs / IOnlyOnce.cs (Lazy<T> does this trivially)\n- StringExtensions.cs (one trivial extension)\n- IO/BlockingBufferStream.cs (System.IO.\n[…]\nreferences any\nof the dropped types (grep showed only self-references).\n\nBuild: 0 errors, 83 warnings (down from 129 in Phase 2a).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: phase 2b - internal Framework triage",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T21:23:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "77310983d24941701f81561fe4ec8f53966d5714",
"body": "Removes the following from disk + .slnx:\n- NexusLabs.Autofac + NexusLabs.Autofac.Tests\n- NexusLabs.Collections.Generic + .Tests + .Benchmarks\n- NexusLabs.Contracts\n- NexusLabs.Dynamo + NexusLabs.Dynamo.Tests\n- NexusLabs.Reflection + NexusLabs.Reflection.Tests\n- NexusLabs.Testing.Xunit\n\nAdds docs/arc\n[…]\nerrors, 129 warnings (down from 285 in Phase 1A baseline as\ndeleted projects no longer surface their CS86xx nullability warnings).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: phase 2a - archive 6 sibling packages",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T17:17:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "974e6e826091237ccb6b08bfa2f10f9562c08707",
"body": "…nfig, Directory.Build.props, .slnx, .gitignore)\n\nAdds genesis-aligned baseline infrastructure with no semantic build change:\n- global.json pinning .NET 10 SDK + MTP test runner\n- .editorconfig copied verbatim from genesis seed\n- nuget.config pinning official nuget.org feed\n- Directory.Build.props: \n[…]\nssed)\n- TargetFramework default -> later phase (after archived projects are gone)\n- IVT, packaging metadata, SourceLink -> Phase 7\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "chore: phase 1a - neutral infra (global.json, .editorconfig, nuget.co…",
"author_name": "ncosentino",
"author_login": "ncosentino",
"committed_at": "2026-05-23T17:14:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "93ac9e8277c2132139d1f60c9f082de2e6e83f00",
"body": "- Added tests for StreamWithLength\n- Fixed issue with StreamWithLength where setting Position to zero would be a no-op\n- Fixed tests for NexusLabs.Framework.Tests to work with xUnitv3",
"is_bot": false,
"headline": "0.1.4 - Fixes For StreamWithLength",
"author_name": "Nick Cosentino",
"author_login": null,
"committed_at": "2025-12-05T04:00:18Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 8,
"commits_last_year": 99,
"latest_release_at": "2026-07-24T16:39:49Z",
"latest_release_tag": "v0.2.7",
"releases_from_tags": true,
"days_since_last_push": 0,
"active_weeks_last_year": 11,
"days_since_latest_release": 0,
"mean_days_between_releases": 8.8
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": false,
"has_contributing": false,
"health_percentage": 28,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "NexusLabs.CodeAnalysis.Testing.TUnit",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "nuget",
"matches_repo": true,
"registry_url": "https://www.nuget.org/packages/NexusLabs.CodeAnalysis.Testing.TUnit",
"is_deprecated": false,
"latest_version": "0.2.7",
"repository_url": "https://github.com/ncosentino/NexusLabs.Framework",
"versions_count": 7,
"total_downloads": 1107,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-24T16:54:34.610000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 0
},
{
"name": "NexusLabs.Data.Sql.MySql",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "nuget",
"matches_repo": true,
"registry_url": "https://www.nuget.org/packages/NexusLabs.Data.Sql.MySql",
"is_deprecated": false,
"latest_version": "0.2.7",
"repository_url": "https://github.com/ncosentino/NexusLabs.Framework",
"versions_count": 7,
"total_downloads": 740,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-24T16:54:37.193000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 0
},
{
"name": "NexusLabs.Data.Sql",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "nuget",
"matches_repo": true,
"registry_url": "https://www.nuget.org/packages/NexusLabs.Data.Sql",
"is_deprecated": false,
"latest_version": "0.2.7",
"repository_url": "https://github.com/ncosentino/NexusLabs.Framework",
"versions_count": 7,
"total_downloads": 807,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-24T16:54:34.900000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 0
},
{
"name": "NexusLabs.Framework.Analyzers",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "nuget",
"matches_repo": true,
"registry_url": "https://www.nuget.org/packages/NexusLabs.Framework.Analyzers",
"is_deprecated": false,
"latest_version": "0.2.7",
"repository_url": "https://github.com/ncosentino/NexusLabs.Framework",
"versions_count": 7,
"total_downloads": 5283,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-24T16:54:35.343000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 0
},
{
"name": "NexusLabs.Framework",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "nuget",
"matches_repo": true,
"registry_url": "https://www.nuget.org/packages/NexusLabs.Framework",
"is_deprecated": false,
"latest_version": "0.2.7",
"repository_url": "https://github.com/ncosentino/NexusLabs.Framework",
"versions_count": 39,
"total_downloads": 34521,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-24T16:54:35.667000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 0
}
]
},
"popularity": {
"forks": 2,
"stars": 12,
"watchers": 1,
"fork_history": {
"days": [
{
"date": "2023-02-26",
"count": 1
},
{
"date": "2023-12-15",
"count": 1
}
],
"complete": true,
"collected": 2,
"total_forks": 2
},
"star_history": null,
"open_issues_and_prs": 2
},
"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/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj",
"src/NexusLabs.Data.Sql.MySql/NexusLabs.Data.Sql.MySql.csproj",
"src/NexusLabs.Data.Sql/NexusLabs.Data.Sql.csproj",
"src/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj",
"src/NexusLabs.Framework.Analyzers/NexusLabs.Framework.Analyzers.csproj",
"src/NexusLabs.Framework/NexusLabs.Framework.csproj",
"src/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj",
"src/NexusLabs.StronglyTypedIds.Analyzers/NexusLabs.StronglyTypedIds.Analyzers.csproj",
"src/NexusLabs.StronglyTypedIds/NexusLabs.StronglyTypedIds.csproj",
"src/NexusLabs.TUnit.Assertions.Analyzers/NexusLabs.TUnit.Assertions.Analyzers.csproj",
"src/NexusLabs.TUnit.Assertions/NexusLabs.TUnit.Assertions.csproj",
"src/NexusLabs.Xunit.Assertions/NexusLabs.Xunit.Assertions.csproj",
"tests/NexusLabs.CodeAnalysis.Testing.TUnit.Tests/NexusLabs.CodeAnalysis.Testing.TUnit.Tests.csproj",
"tests/NexusLabs.Data.Sql.MySql.Tests/NexusLabs.Data.Sql.MySql.Tests.csproj",
"tests/NexusLabs.Data.Sql.Tests/NexusLabs.Data.Sql.Tests.csproj",
"tests/NexusLabs.Framework.Analyzers.Tests/NexusLabs.Framework.Analyzers.Tests.csproj",
"tests/NexusLabs.Framework.Tests/NexusLabs.Framework.Tests.csproj",
"tests/NexusLabs.StronglyTypedIds.Tests/NexusLabs.StronglyTypedIds.Tests.csproj",
"tests/NexusLabs.Xunit.Assertions.Tests/NexusLabs.Xunit.Assertions.Tests.csproj",
"tests/TUnit/NexusLabs.TUnit.Assertions.Tests/NexusLabs.TUnit.Assertions.Tests.csproj"
],
"largest_source_bytes": 45288,
"source_files_sampled": 175,
"oversized_source_files": 0,
"agent_instruction_files": [
".github/copilot-instructions.md",
".github/instructions/genesis/adr.instructions.md",
".github/instructions/genesis/astro/components.instructions.md",
".github/instructions/genesis/astro/config.instructions.md",
".github/instructions/genesis/astro/content-collections.instructions.md",
".github/instructions/genesis/astro/humans-txt.instructions.md",
".github/instructions/genesis/astro/layouts.instructions.md",
".github/instructions/genesis/astro/llms-txt.instructions.md",
".github/instructions/genesis/astro/pages.instructions.md",
".github/instructions/genesis/astro/robots-txt.instructions.md",
".github/instructions/genesis/astro/security.instructions.md",
".github/instructions/genesis/astro/seo.instructions.md",
".github/instructions/genesis/astro/sitemap.instructions.md",
".github/instructions/genesis/astro/styles.instructions.md",
".github/instructions/genesis/blazor/code-behind.instructions.md",
".github/instructions/genesis/blazor/components.instructions.md",
".github/instructions/genesis/blazor/css-isolation.instructions.md",
".github/instructions/genesis/blazor/extensibility.instructions.md",
".github/instructions/genesis/blazor/performance.instructions.md",
".github/instructions/genesis/blazor/render-modes.instructions.md",
".github/instructions/genesis/carter-modules.instructions.md",
".github/instructions/genesis/consumers.instructions.md",
".github/instructions/genesis/deployment-github-pages.instructions.md",
".github/instructions/genesis/feature-structure.instructions.md",
".github/instructions/genesis/file-type-isolation.instructions.md",
".github/instructions/genesis/http-clients.instructions.md",
".github/instructions/genesis/instructions.instructions.md",
".github/instructions/genesis/jobs/job-schedulers.instructions.md",
".github/instructions/genesis/jobs/jobs.instructions.md",
".github/instructions/genesis/logging.instructions.md",
".github/instructions/genesis/masstransit-contracts.instructions.md",
".github/instructions/genesis/n-plus-one-prevention.instructions.md",
".github/instructions/genesis/options/http-client-options.instructions.md",
".github/instructions/genesis/options/options.instructions.md",
".github/instructions/genesis/plugins.instructions.md",
".github/instructions/genesis/post-api-handlers.instructions.md",
".github/instructions/genesis/project-structure.instructions.md",
".github/instructions/genesis/raw-string-literals.instructions.md",
".github/instructions/genesis/repositories.instructions.md",
".github/instructions/genesis/request-validators.instructions.md",
".github/instructions/genesis/result-dtos.instructions.md",
".github/instructions/genesis/roslyn-analyzers.instructions.md",
".github/instructions/genesis/source-generators.instructions.md",
".github/instructions/genesis/sql-migrations.instructions.md",
".github/instructions/genesis/testing/tests-api.instructions.md",
".github/instructions/genesis/testing/tests-common.instructions.md",
".github/instructions/genesis/testing/tests-mock-boundaries.instructions.md",
".github/instructions/genesis/testing/tests-repository.instructions.md",
".github/instructions/genesis/testing/tests-service.instructions.md",
".github/instructions/genesis/testing/time-provider-testing.instructions.md",
".github/instructions/genesis/time-provider.instructions.md",
".github/instructions/genesis/ui/app-shell.instructions.md",
".github/instructions/genesis/ui/avalonia.instructions.md",
".github/instructions/genesis/ui/string-resources.instructions.md",
".github/instructions/genesis/ui/theme-resources.instructions.md",
".github/instructions/genesis/ui/viewmodel.instructions.md",
".github/instructions/genesis/ui/wpf.instructions.md",
".github/instructions/genesis/ui/xaml-shared.instructions.md",
".github/instructions/genesis/unit-of-work.instructions.md",
".github/instructions/genesis/web-dtos.instructions.md",
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 13939
},
"dependencies": {
"manifests": [],
"advisories": {
"error": "No resolved dependencies carried a version and a supported ecosystem",
"scope": "repository_graph",
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 17,
"direct_affected_count": 0
},
"ecosystems": [],
"dependencies": [
{
"name": "Microsoft.CodeAnalysis.Analyzer.Testing",
"manifest": "src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.CodeAnalysis.Common",
"manifest": "src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.CodeAnalysis.CSharp.Workspaces",
"manifest": "src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "TUnit.Assertions",
"manifest": "src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "MySql.Data",
"manifest": "src/NexusLabs.Data.Sql.MySql/NexusLabs.Data.Sql.MySql.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.Extensions.Logging.Abstractions",
"manifest": "src/NexusLabs.Data.Sql/NexusLabs.Data.Sql.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.CodeAnalysis.CSharp",
"manifest": "src/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.CodeAnalysis.CSharp.Workspaces",
"manifest": "src/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.CodeAnalysis.Analyzers",
"manifest": "src/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.CodeAnalysis.CSharp",
"manifest": "src/NexusLabs.Framework.Analyzers/NexusLabs.Framework.Analyzers.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.CodeAnalysis.Analyzers",
"manifest": "src/NexusLabs.Framework.Analyzers/NexusLabs.Framework.Analyzers.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.Extensions.Logging.Abstractions",
"manifest": "src/NexusLabs.Framework/NexusLabs.Framework.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.CodeAnalysis.CSharp",
"manifest": "src/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.CodeAnalysis.CSharp.Workspaces",
"manifest": "src/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.CodeAnalysis.Analyzers",
"manifest": "src/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.CodeAnalysis.CSharp",
"manifest": "src/NexusLabs.StronglyTypedIds.Analyzers/NexusLabs.StronglyTypedIds.Analyzers.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.CodeAnalysis.Analyzers",
"manifest": "src/NexusLabs.StronglyTypedIds.Analyzers/NexusLabs.StronglyTypedIds.Analyzers.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.Extensions.DependencyInjection.Abstractions",
"manifest": "src/NexusLabs.StronglyTypedIds/NexusLabs.StronglyTypedIds.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "StronglyTypedId",
"manifest": "src/NexusLabs.StronglyTypedIds/NexusLabs.StronglyTypedIds.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.CodeAnalysis.CSharp",
"manifest": "src/NexusLabs.TUnit.Assertions.Analyzers/NexusLabs.TUnit.Assertions.Analyzers.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "Microsoft.CodeAnalysis.Analyzers",
"manifest": "src/NexusLabs.TUnit.Assertions.Analyzers/NexusLabs.TUnit.Assertions.Analyzers.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "TUnit.Assertions",
"manifest": "src/NexusLabs.TUnit.Assertions/NexusLabs.TUnit.Assertions.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "xunit.v3.assert",
"manifest": "src/NexusLabs.Xunit.Assertions/NexusLabs.Xunit.Assertions.csproj",
"ecosystem": "nuget",
"version_constraint": null
},
{
"name": "xunit.v3.extensibility.core",
"manifest": "src/NexusLabs.Xunit.Assertions/NexusLabs.Xunit.Assertions.csproj",
"ecosystem": "nuget",
"version_constraint": null
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "Microsoft.CodeAnalysis.Analyzer.Testing",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "Microsoft.CodeAnalysis.Analyzers",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "Microsoft.CodeAnalysis.Common",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "Microsoft.CodeAnalysis.CSharp",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "Microsoft.CodeAnalysis.CSharp.Workspaces",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "Microsoft.Extensions.DependencyInjection.Abstractions",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "Microsoft.Extensions.Logging.Abstractions",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "MySql.Data",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "StronglyTypedId",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "TUnit.Assertions",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "xunit.v3.assert",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "xunit.v3.extensibility.core",
"direct": true,
"version": null,
"ecosystem": "nuget"
},
{
"name": "Microsoft.CodeAnalysis.CSharp.Analyzer.Testing",
"direct": false,
"version": null,
"ecosystem": "nuget"
},
{
"name": "Microsoft.CodeAnalysis.CSharp.CodeFix.Testing",
"direct": false,
"version": null,
"ecosystem": "nuget"
},
{
"name": "Microsoft.Extensions.DependencyInjection",
"direct": false,
"version": null,
"ecosystem": "nuget"
},
{
"name": "Microsoft.Extensions.TimeProvider.Testing",
"direct": false,
"version": null,
"ecosystem": "nuget"
},
{
"name": "Moq",
"direct": false,
"version": null,
"ecosystem": "nuget"
}
],
"collected": true,
"truncated": false,
"total_count": 17,
"direct_count": 12,
"indirect_count": 5
}
},
"maintainership": {
"issues": {
"open_prs": 2,
"merged_prs": 18,
"open_issues": 0,
"closed_ratio": 1,
"closed_issues": 1,
"closed_unmerged_prs": 8
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "ncosentino",
"commits": 203,
"avatar_url": "https://avatars.githubusercontent.com/u/5169280?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"release.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": true,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "17 out of 17 merged PRs checked by a CI test -- score normalized to 10",
"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": 0,
"reason": "Found 0/23 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"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": 10,
"reason": "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": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10",
"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": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"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": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 10,
"reason": "GitHub workflow tokens follow principle of least privilege",
"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": "219016f16e6acd9b1d079df3b772baa1151ef8ed",
"ran_at": "2026-07-24T17:02:18Z",
"aggregate_score": 6,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": true
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-24T16:54:41Z",
"oldest_open_prs": [
{
"number": 24,
"created_at": "2026-07-18T07:08:05Z",
"last_comment_at": "2026-07-20T03:17:02Z",
"last_comment_author": "copilot-swe-agent"
},
{
"number": 27,
"created_at": "2026-07-20T03:19:14Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-07-24T16:39:50Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/ncosentino/NexusLabs.Framework",
"host": "github.com",
"name": "NexusLabs.Framework",
"owner": "ncosentino"
},
"metrics": {
"overall": {
"key": "overall",
"band": "good",
"name": "Overall health",
"note": "The weighted overall 62 is calibrated to 69 on the published index scale (record calibration 2026-08-02).",
"notes": [
{
"code": "overall_calibration",
"params": {
"raw": 62,
"calibrated": 69,
"calibration": "2026-08-02"
}
}
],
"value": 69,
"inputs": {
"security": 60,
"vitality": 78,
"community": 39,
"governance": 57,
"calibration": "2026-08-02",
"engineering": 70,
"ai_readiness": 78,
"weighted_overall_raw": 62
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 78,
"weight": 0.21,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 72,
"inputs": {
"commits_last_year": 99,
"human_commit_share": 0.92,
"days_since_last_push": 0,
"active_weeks_last_year": 11
},
"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": "11/52 weeks with commits",
"points": 7.6,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 11
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "99 commits in the last year",
"points": 18,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 99
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 88,
"inputs": {
"releases_count": 8,
"latest_release_tag": "v0.2.7",
"releases_from_tags": true,
"days_since_latest_release": 0,
"mean_days_between_releases": 8.8
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "8 version tags (no GitHub releases)",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "version_tags_no_releases",
"params": {
"count": 8
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~8.8 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 8.8
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "exceptional",
"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": 9,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 9 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 9
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "weak",
"name": "Community & Adoption",
"value": 39,
"weight": 0.17,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 17,
"inputs": {
"forks": 2,
"stars": 12,
"watchers": 1,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "12 stars",
"points": 16.9,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 12
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "2 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 2
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "1 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 1
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"readme_badges": null,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"readme_badge_services": [],
"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": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"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": "moderate",
"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": 60,
"inputs": {
"packages": [
"NexusLabs.CodeAnalysis.Testing.TUnit",
"NexusLabs.Data.Sql.MySql",
"NexusLabs.Data.Sql",
"NexusLabs.Framework.Analyzers",
"NexusLabs.Framework"
],
"dependents": null,
"ecosystems": "nuget",
"total_downloads": 42458,
"monthly_downloads": null
},
"components": [
{
"key": "total_downloads",
"name": "Total downloads",
"detail": "42,458 downloads all-time across nuget",
"points": 48.1,
"status": "partial",
"details": [
{
"code": "downloads_total",
"params": {
"count": 42458,
"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": "moderate",
"name": "Sustainability & Governance",
"value": 57,
"weight": 0.23,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 13,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 1,
"top_contributor_share": 1
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 100% of commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "1 contributors",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 1
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"newcomer_pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 72,
"inputs": {
"merged_prs": 18,
"open_issues": 0,
"closed_issues": 1,
"prs_merged_7d": null,
"prs_decided_7d": null,
"prs_merged_30d": null,
"prs_decided_30d": null,
"issue_closed_ratio": 1,
"closed_unmerged_prs": 8,
"first_time_authors_30d": null,
"first_time_prs_merged_30d": null,
"first_time_prs_decided_30d": null
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "100% of issues closed",
"points": 42,
"status": "met",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 100
}
}
],
"max_points": 42
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "18/26 decided PRs merged",
"points": 20.8,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 18,
"decided": 26
}
}
],
"max_points": 30
},
{
"key": "newcomer_pr_acceptance",
"name": "Newcomer PR acceptance",
"detail": "no first-time contributor's PR decided in 30d",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_newcomer_prs",
"params": {
"days": 30
}
}
],
"max_points": 13
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/23 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 62,
"inputs": {
"followers": 278,
"owner_type": "User",
"is_verified": null,
"owner_login": "ncosentino",
"public_repos": 25,
"account_age_days": 4735
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "278 followers of ncosentino",
"points": 17.6,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 278,
"login": "ncosentino"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "25 public repos, account ~12 yr old",
"points": 22.3,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 25
}
},
{
"code": "account_age_years",
"params": {
"years": 12
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "exceptional",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"NexusLabs.CodeAnalysis.Testing.TUnit",
"NexusLabs.Data.Sql.MySql",
"NexusLabs.Data.Sql",
"NexusLabs.Framework.Analyzers",
"NexusLabs.Framework"
],
"ecosystems": "nuget",
"any_deprecated": false,
"min_days_since_publish": 0
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "5 package(s) on nuget",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 5,
"ecosystems": "nuget"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 0 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 0
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "39 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 39
}
}
],
"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": "good",
"name": "Engineering Quality",
"value": 70,
"weight": 0.19,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 74,
"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": "2 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 2
}
}
],
"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": "17 out of 17 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"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": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 60,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 60,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 6
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "17 out of 17 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"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": "Found 0/23 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"status": "partial",
"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": "update tool detected",
"points": 7.5,
"status": "met",
"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 detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"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 0",
"points": 0,
"status": "missed",
"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": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "GitHub workflow tokens follow principle of least privilege",
"points": 7.5,
"status": "met",
"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": "high_risk_jurisdiction_exposure",
"band": "exceptional",
"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"
],
"commit_weight_rule": {
"min_commits": 50,
"min_commit_share": 0.1
},
"review_only_matches": 0,
"below_threshold_exposures": [],
"assessed_self_published_locations": 2
},
"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": "good",
"name": "AI Readiness",
"value": 78,
"weight": 0.04,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 1,
"agent_instruction_files": [
".github/copilot-instructions.md",
".github/instructions/genesis/adr.instructions.md",
".github/instructions/genesis/astro/components.instructions.md",
".github/instructions/genesis/astro/config.instructions.md",
".github/instructions/genesis/astro/content-collections.instructions.md",
".github/instructions/genesis/astro/humans-txt.instructions.md",
".github/instructions/genesis/astro/layouts.instructions.md",
".github/instructions/genesis/astro/llms-txt.instructions.md",
".github/instructions/genesis/astro/pages.instructions.md",
".github/instructions/genesis/astro/robots-txt.instructions.md",
".github/instructions/genesis/astro/security.instructions.md",
".github/instructions/genesis/astro/seo.instructions.md",
".github/instructions/genesis/astro/sitemap.instructions.md",
".github/instructions/genesis/astro/styles.instructions.md",
".github/instructions/genesis/blazor/code-behind.instructions.md",
".github/instructions/genesis/blazor/components.instructions.md",
".github/instructions/genesis/blazor/css-isolation.instructions.md",
".github/instructions/genesis/blazor/extensibility.instructions.md",
".github/instructions/genesis/blazor/performance.instructions.md",
".github/instructions/genesis/blazor/render-modes.instructions.md",
".github/instructions/genesis/carter-modules.instructions.md",
".github/instructions/genesis/consumers.instructions.md",
".github/instructions/genesis/deployment-github-pages.instructions.md",
".github/instructions/genesis/feature-structure.instructions.md",
".github/instructions/genesis/file-type-isolation.instructions.md",
".github/instructions/genesis/http-clients.instructions.md",
".github/instructions/genesis/instructions.instructions.md",
".github/instructions/genesis/jobs/job-schedulers.instructions.md",
".github/instructions/genesis/jobs/jobs.instructions.md",
".github/instructions/genesis/logging.instructions.md",
".github/instructions/genesis/masstransit-contracts.instructions.md",
".github/instructions/genesis/n-plus-one-prevention.instructions.md",
".github/instructions/genesis/options/http-client-options.instructions.md",
".github/instructions/genesis/options/options.instructions.md",
".github/instructions/genesis/plugins.instructions.md",
".github/instructions/genesis/post-api-handlers.instructions.md",
".github/instructions/genesis/project-structure.instructions.md",
".github/instructions/genesis/raw-string-literals.instructions.md",
".github/instructions/genesis/repositories.instructions.md",
".github/instructions/genesis/request-validators.instructions.md",
".github/instructions/genesis/result-dtos.instructions.md",
".github/instructions/genesis/roslyn-analyzers.instructions.md",
".github/instructions/genesis/source-generators.instructions.md",
".github/instructions/genesis/sql-migrations.instructions.md",
".github/instructions/genesis/testing/tests-api.instructions.md",
".github/instructions/genesis/testing/tests-common.instructions.md",
".github/instructions/genesis/testing/tests-mock-boundaries.instructions.md",
".github/instructions/genesis/testing/tests-repository.instructions.md",
".github/instructions/genesis/testing/tests-service.instructions.md",
".github/instructions/genesis/testing/time-provider-testing.instructions.md",
".github/instructions/genesis/time-provider.instructions.md",
".github/instructions/genesis/ui/app-shell.instructions.md",
".github/instructions/genesis/ui/avalonia.instructions.md",
".github/instructions/genesis/ui/string-resources.instructions.md",
".github/instructions/genesis/ui/theme-resources.instructions.md",
".github/instructions/genesis/ui/viewmodel.instructions.md",
".github/instructions/genesis/ui/wpf.instructions.md",
".github/instructions/genesis/ui/xaml-shared.instructions.md",
".github/instructions/genesis/unit-of-work.instructions.md",
".github/instructions/genesis/web-dtos.instructions.md",
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 13939
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": ".github/copilot-instructions.md, .github/instructions/genesis/adr.instructions.md, .github/instructions/genesis/astro/components.instructions.md, .github/instructions/genesis/astro/config.instructions.md, .github/instructions/genesis/astro/content-collections.instructions.md, .github/instructions/genesis/astro/humans-txt.instructions.md, .github/instructions/genesis/astro/layouts.instructions.md, .github/instructions/genesis/astro/llms-txt.instructions.md, .github/instructions/genesis/astro/pages.instructions.md, .github/instructions/genesis/astro/robots-txt.instructions.md, .github/instructions/genesis/astro/security.instructions.md, .github/instructions/genesis/astro/seo.instructions.md, .github/instructions/genesis/astro/sitemap.instructions.md, .github/instructions/genesis/astro/styles.instructions.md, .github/instructions/genesis/blazor/code-behind.instructions.md, .github/instructions/genesis/blazor/components.instructions.md, .github/instructions/genesis/blazor/css-isolation.instructions.md, .github/instructions/genesis/blazor/extensibility.instructions.md, .github/instructions/genesis/blazor/performance.instructions.md, .github/instructions/genesis/blazor/render-modes.instructions.md, .github/instructions/genesis/carter-modules.instructions.md, .github/instructions/genesis/consumers.instructions.md, .github/instructions/genesis/deployment-github-pages.instructions.md, .github/instructions/genesis/feature-structure.instructions.md, .github/instructions/genesis/file-type-isolation.instructions.md, .github/instructions/genesis/http-clients.instructions.md, .github/instructions/genesis/instructions.instructions.md, .github/instructions/genesis/jobs/job-schedulers.instructions.md, .github/instructions/genesis/jobs/jobs.instructions.md, .github/instructions/genesis/logging.instructions.md, .github/instructions/genesis/masstransit-contracts.instructions.md, .github/instructions/genesis/n-plus-one-prevention.instructions.md, .github/instructions/genesis/options/http-client-options.instructions.md, .github/instructions/genesis/options/options.instructions.md, .github/instructions/genesis/plugins.instructions.md, .github/instructions/genesis/post-api-handlers.instructions.md, .github/instructions/genesis/project-structure.instructions.md, .github/instructions/genesis/raw-string-literals.instructions.md, .github/instructions/genesis/repositories.instructions.md, .github/instructions/genesis/request-validators.instructions.md, .github/instructions/genesis/result-dtos.instructions.md, .github/instructions/genesis/roslyn-analyzers.instructions.md, .github/instructions/genesis/source-generators.instructions.md, .github/instructions/genesis/sql-migrations.instructions.md, .github/instructions/genesis/testing/tests-api.instructions.md, .github/instructions/genesis/testing/tests-common.instructions.md, .github/instructions/genesis/testing/tests-mock-boundaries.instructions.md, .github/instructions/genesis/testing/tests-repository.instructions.md, .github/instructions/genesis/testing/tests-service.instructions.md, .github/instructions/genesis/testing/time-provider-testing.instructions.md, .github/instructions/genesis/time-provider.instructions.md, .github/instructions/genesis/ui/app-shell.instructions.md, .github/instructions/genesis/ui/avalonia.instructions.md, .github/instructions/genesis/ui/string-resources.instructions.md, .github/instructions/genesis/ui/theme-resources.instructions.md, .github/instructions/genesis/ui/viewmodel.instructions.md, .github/instructions/genesis/ui/wpf.instructions.md, .github/instructions/genesis/ui/xaml-shared.instructions.md, .github/instructions/genesis/unit-of-work.instructions.md, .github/instructions/genesis/web-dtos.instructions.md, AGENTS.md, CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".github/copilot-instructions.md, .github/instructions/genesis/adr.instructions.md, .github/instructions/genesis/astro/components.instructions.md, .github/instructions/genesis/astro/config.instructions.md, .github/instructions/genesis/astro/content-collections.instructions.md, .github/instructions/genesis/astro/humans-txt.instructions.md, .github/instructions/genesis/astro/layouts.instructions.md, .github/instructions/genesis/astro/llms-txt.instructions.md, .github/instructions/genesis/astro/pages.instructions.md, .github/instructions/genesis/astro/robots-txt.instructions.md, .github/instructions/genesis/astro/security.instructions.md, .github/instructions/genesis/astro/seo.instructions.md, .github/instructions/genesis/astro/sitemap.instructions.md, .github/instructions/genesis/astro/styles.instructions.md, .github/instructions/genesis/blazor/code-behind.instructions.md, .github/instructions/genesis/blazor/components.instructions.md, .github/instructions/genesis/blazor/css-isolation.instructions.md, .github/instructions/genesis/blazor/extensibility.instructions.md, .github/instructions/genesis/blazor/performance.instructions.md, .github/instructions/genesis/blazor/render-modes.instructions.md, .github/instructions/genesis/carter-modules.instructions.md, .github/instructions/genesis/consumers.instructions.md, .github/instructions/genesis/deployment-github-pages.instructions.md, .github/instructions/genesis/feature-structure.instructions.md, .github/instructions/genesis/file-type-isolation.instructions.md, .github/instructions/genesis/http-clients.instructions.md, .github/instructions/genesis/instructions.instructions.md, .github/instructions/genesis/jobs/job-schedulers.instructions.md, .github/instructions/genesis/jobs/jobs.instructions.md, .github/instructions/genesis/logging.instructions.md, .github/instructions/genesis/masstransit-contracts.instructions.md, .github/instructions/genesis/n-plus-one-prevention.instructions.md, .github/instructions/genesis/options/http-client-options.instructions.md, .github/instructions/genesis/options/options.instructions.md, .github/instructions/genesis/plugins.instructions.md, .github/instructions/genesis/post-api-handlers.instructions.md, .github/instructions/genesis/project-structure.instructions.md, .github/instructions/genesis/raw-string-literals.instructions.md, .github/instructions/genesis/repositories.instructions.md, .github/instructions/genesis/request-validators.instructions.md, .github/instructions/genesis/result-dtos.instructions.md, .github/instructions/genesis/roslyn-analyzers.instructions.md, .github/instructions/genesis/source-generators.instructions.md, .github/instructions/genesis/sql-migrations.instructions.md, .github/instructions/genesis/testing/tests-api.instructions.md, .github/instructions/genesis/testing/tests-common.instructions.md, .github/instructions/genesis/testing/tests-mock-boundaries.instructions.md, .github/instructions/genesis/testing/tests-repository.instructions.md, .github/instructions/genesis/testing/tests-service.instructions.md, .github/instructions/genesis/testing/time-provider-testing.instructions.md, .github/instructions/genesis/time-provider.instructions.md, .github/instructions/genesis/ui/app-shell.instructions.md, .github/instructions/genesis/ui/avalonia.instructions.md, .github/instructions/genesis/ui/string-resources.instructions.md, .github/instructions/genesis/ui/theme-resources.instructions.md, .github/instructions/genesis/ui/viewmodel.instructions.md, .github/instructions/genesis/ui/wpf.instructions.md, .github/instructions/genesis/ui/xaml-shared.instructions.md, .github/instructions/genesis/unit-of-work.instructions.md, .github/instructions/genesis/web-dtos.instructions.md, AGENTS.md, CLAUDE.md"
}
}
],
"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": "92 of 92 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 92,
"sampled": 92
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 64,
"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.9,
"toolchain_manifests": [
"src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj",
"src/NexusLabs.Data.Sql.MySql/NexusLabs.Data.Sql.MySql.csproj",
"src/NexusLabs.Data.Sql/NexusLabs.Data.Sql.csproj",
"src/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj",
"src/NexusLabs.Framework.Analyzers/NexusLabs.Framework.Analyzers.csproj",
"src/NexusLabs.Framework/NexusLabs.Framework.csproj",
"src/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj",
"src/NexusLabs.StronglyTypedIds.Analyzers/NexusLabs.StronglyTypedIds.Analyzers.csproj",
"src/NexusLabs.StronglyTypedIds/NexusLabs.StronglyTypedIds.csproj",
"src/NexusLabs.TUnit.Assertions.Analyzers/NexusLabs.TUnit.Assertions.Analyzers.csproj",
"src/NexusLabs.TUnit.Assertions/NexusLabs.TUnit.Assertions.csproj",
"src/NexusLabs.Xunit.Assertions/NexusLabs.Xunit.Assertions.csproj",
"tests/NexusLabs.CodeAnalysis.Testing.TUnit.Tests/NexusLabs.CodeAnalysis.Testing.TUnit.Tests.csproj",
"tests/NexusLabs.Data.Sql.MySql.Tests/NexusLabs.Data.Sql.MySql.Tests.csproj",
"tests/NexusLabs.Data.Sql.Tests/NexusLabs.Data.Sql.Tests.csproj",
"tests/NexusLabs.Framework.Analyzers.Tests/NexusLabs.Framework.Analyzers.Tests.csproj",
"tests/NexusLabs.Framework.Tests/NexusLabs.Framework.Tests.csproj",
"tests/NexusLabs.StronglyTypedIds.Tests/NexusLabs.StronglyTypedIds.Tests.csproj",
"tests/NexusLabs.Xunit.Assertions.Tests/NexusLabs.Xunit.Assertions.Tests.csproj",
"tests/TUnit/NexusLabs.TUnit.Assertions.Tests/NexusLabs.TUnit.Assertions.Tests.csproj"
],
"dependency_bot_commit_share": 0.08
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj, src/NexusLabs.Data.Sql.MySql/NexusLabs.Data.Sql.MySql.csproj, src/NexusLabs.Data.Sql/NexusLabs.Data.Sql.csproj (toolchain convention, no task runner)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "toolchain_convention",
"params": {
"files": "src/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj, src/NexusLabs.Data.Sql.MySql/NexusLabs.Data.Sql.MySql.csproj, src/NexusLabs.Data.Sql/NexusLabs.Data.Sql.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": "90 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 90,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "8 of the last 100 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 8,
"sampled": 100
}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "exceptional",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "C#",
"largest_source_bytes": 45288,
"source_files_sampled": 175,
"oversized_source_files": 0
},
"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": "0/175 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 175,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
}
],
"metrics_version": "2.1.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"No resolved dependencies carried a version and a supported ecosystem"
],
"report_type": "repository",
"generated_at": "2026-07-24T17:02:30.635644Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/n/ncosentino/NexusLabs.Framework.svg",
"full_name": "ncosentino/NexusLabs.Framework",
"license_state": "standard",
"license_spdx": "MIT"
}Оцінки — це сигнали, а не гарантії. Вони відображають публічно видимі практики на GitHub — це не аудит коду й не гарантія безпеки.
Відсутні дані виключаються, а ваги перенормовуються — нуль за відсутність ніколи не ставиться. Методологія версіонована й відкрита: метрики v2.1.0, схема v0.27.0 — повна методологія · вікі метрик.
Як окремий результат виглядає на тлі всього реєстру: сукупна статистика — NuGet.