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": 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": 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": 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": 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": 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": "" } ] } }
Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 2.1.0 · 2026-07-24 17:02 UTC

ncosentino / NexusLabs.Framework

C#MIT★ 12 Sterne⑂ 2 Forksseit Aug. 2020Auf GitHub ansehen ↗

ncosentino/NexusLabs.Framework erreicht einen Gesundheitsindex von 69 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Vitality (78/100) ab, am schwächsten bei Community & Adoption (39/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

69
gesamt / 100
Gut

Software-Gesundheitsindex

Metriken werden auf einer standardisierten Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr gewichtetes Mittel, kalibriert auf die Verteilung des öffentlichen Registers, sodass die Stufen Perzentilbedeutung tragen; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze Gefährdet von 34.

69
Außergewöhnlich93-100Die Spitzengruppe des Registers (≈ obere 5 %); erfüllt im Wesentlichen alle geprüften Kriterien
Exzellent80-92Durchgehend stark; geringfügige Lücken
Gut65-79Gesund; Lücken sind begrenzt und beherrschbar
Mittel50-64Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Schwach35-49Wesentliche Schwächen in mehreren Bereichen
Gefährdet20-34Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-19Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Der gewichtete Gesamtwert 62 wird auf der veröffentlichten Indexskala auf 69 kalibriert (Register-Kalibrierung 2026-08-02).

Eigentümerschaft

Nick CosentinoPersönliches Konto
278 Follower25 öffentliche Reposseit Aug. 2013Microsoft

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
NuGetNexusLabs.CodeAnalysis.Testing.TUnit0.2.7-7vor 0 Tagen
NuGetNexusLabs.Data.Sql.MySql0.2.7-7vor 0 Tagen
NuGetNexusLabs.Data.Sql0.2.7-7vor 0 Tagen
NuGetNexusLabs.Framework.Analyzers0.2.7-7vor 0 Tagen
NuGetNexusLabs.Framework0.2.7-39vor 0 Tagen

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

78Gut · 21 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
7.6/36Commit-Rhythmus — 11/52 Wochen mit Commits
18/18Commit-Volumen — 99 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year99
human_commit_share0,92
days_since_last_push0
active_weeks_last_year11
Wie die Bewertung erfolgt
16.2/27Liefert Releases aus — 8 Versions-Tags (keine GitHub-Releases)
36/36Release-Aktualität — letztes Release vor 0 Tagen
27/27Release-Rhythmus — ein Release etwa alle 8,8 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count8
latest_release_tagv0.2.7
releases_from_tagsja
days_since_latest_release0
mean_days_between_releases8,8
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

39Schwach · 17 % des Gesamtindex
Wie die Bewertung erfolgt
16.9/60Stars — 12 Stars
0/25Forks — 2 Forks
0/15Watcher — 1 Watcher
Verwendete Eingangsdaten
forks2
stars12
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
readme_badges
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
readme_badge_services
has_pull_request_templatenein
Wie die Bewertung erfolgt
48.1/80Downloads gesamt — 42.458 Downloads insgesamt über nuget
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesNexusLabs.CodeAnalysis.Testing.TUnit, NexusLabs.Data.Sql.MySql, NexusLabs.Data.Sql, NexusLabs.Framework.Analyzers, NexusLabs.Framework
dependents
ecosystemsnuget
total_downloads42.458
monthly_downloads
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

57Mittel · 23 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
42/42Issue-Lösungsquote — 100 % der Issues geschlossen
20.8/30PR-Annahme — 18/26 entschiedene PRs gemergt
0/13Newcomer PR acceptance — kein PR eines Erstbeitragenden in 30 Tagen entschieden
0/15OpenSSF Scorecard: Code-Review — Found 0/23 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs18
open_issues0
closed_issues1
prs_merged_7d
prs_decided_7d
prs_merged_30d
prs_decided_30d
issue_closed_ratio1
closed_unmerged_prs8
first_time_authors_30d
first_time_prs_merged_30d
first_time_prs_decided_30d
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): newcomer_pr_acceptance. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
17.6/25Reichweite des Inhabers — 278 Follower von ncosentino
22.3/25Kontohistorie — 25 öffentliche Repos, Kontoalter ca. 12 Jahre
Verwendete Eingangsdaten
followers278
owner_typeUser
is_verified
owner_loginncosentino
public_repos25
account_age_days4.735
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Außergewöhnlich
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 5 Paket(e) auf nuget
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 0 Tagen
20/20Versionshistorie — 39 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesNexusLabs.CodeAnalysis.Testing.TUnit, NexusLabs.Data.Sql.MySql, NexusLabs.Data.Sql, NexusLabs.Framework.Analyzers, NexusLabs.Framework
ecosystemsnuget
any_deprecatednein
min_days_since_publish0

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

70Gut · 19 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 2 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
6.4/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 17 out of 17 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfigja
has_linter_confignein
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
0/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionnein

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

60Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 17 out of 17 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/23 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate6
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): signed_releases. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Trägt ein bewusst kleines Gewicht (4 %): Agenten-Tooling ist ein echtes Pflegesignal, doch ein Repository ohne jedes Signal kann weiterhin 100/100 erreichen.

78Gut · 4 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — .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/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 92 von 92 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
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_bytes13.939
Wie die Bewertung erfolgt
12.6/18Bootstrap mit einem Befehl — 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-Konvention, kein Task-Runner)
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — C# (statisch typisiert)
0/10Reproduzierbare Umgebung
10/10Belegte Agentenpraxis — 90 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 8 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0,9
toolchain_manifestssrc/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_share0,08
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — C# (statisch typisiert)
55/55Handhabbare Dateigrößen — 0/175 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageC#
largest_source_bytes45.288
source_files_sampled175
oversized_source_files0

Eckdaten

12GitHub-Sterne
1Mitwirkende
99Commits, letzte 12 Monate
0Tage seit letztem Push
8Releases
1Bus-Faktor
0offene Issues
Paket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • No resolved dependencies carried a version and a supported ecosystem

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 2 ⇿
0Sterne
2Forks

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

111222212023-022023-072023-12
OpenSSF Scorecard 6.0 / 10
6.0Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-24 17:02 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests17 out of 17 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/23 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 24
RegistryPaketVersionsvorgabeManifest
NuGetMicrosoft.CodeAnalysis.Analyzer.Testingsrc/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj
NuGetMicrosoft.CodeAnalysis.Commonsrc/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj
NuGetMicrosoft.CodeAnalysis.CSharp.Workspacessrc/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj
NuGetTUnit.Assertionssrc/NexusLabs.CodeAnalysis.Testing.TUnit/NexusLabs.CodeAnalysis.Testing.TUnit.csproj
NuGetMySql.Datasrc/NexusLabs.Data.Sql.MySql/NexusLabs.Data.Sql.MySql.csproj
NuGetMicrosoft.Extensions.Logging.Abstractionssrc/NexusLabs.Data.Sql/NexusLabs.Data.Sql.csproj
NuGetMicrosoft.CodeAnalysis.CSharpsrc/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj
NuGetMicrosoft.CodeAnalysis.CSharp.Workspacessrc/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj
NuGetMicrosoft.CodeAnalysis.Analyzerssrc/NexusLabs.Framework.Analyzers.CodeFixes/NexusLabs.Framework.Analyzers.CodeFixes.csproj
NuGetMicrosoft.CodeAnalysis.CSharpsrc/NexusLabs.Framework.Analyzers/NexusLabs.Framework.Analyzers.csproj
NuGetMicrosoft.CodeAnalysis.Analyzerssrc/NexusLabs.Framework.Analyzers/NexusLabs.Framework.Analyzers.csproj
NuGetMicrosoft.Extensions.Logging.Abstractionssrc/NexusLabs.Framework/NexusLabs.Framework.csproj
NuGetMicrosoft.CodeAnalysis.CSharpsrc/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj
NuGetMicrosoft.CodeAnalysis.CSharp.Workspacessrc/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj
NuGetMicrosoft.CodeAnalysis.Analyzerssrc/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes/NexusLabs.StronglyTypedIds.Analyzers.CodeFixes.csproj
NuGetMicrosoft.CodeAnalysis.CSharpsrc/NexusLabs.StronglyTypedIds.Analyzers/NexusLabs.StronglyTypedIds.Analyzers.csproj
NuGetMicrosoft.CodeAnalysis.Analyzerssrc/NexusLabs.StronglyTypedIds.Analyzers/NexusLabs.StronglyTypedIds.Analyzers.csproj
NuGetMicrosoft.Extensions.DependencyInjection.Abstractionssrc/NexusLabs.StronglyTypedIds/NexusLabs.StronglyTypedIds.csproj
NuGetStronglyTypedIdsrc/NexusLabs.StronglyTypedIds/NexusLabs.StronglyTypedIds.csproj
NuGetMicrosoft.CodeAnalysis.CSharpsrc/NexusLabs.TUnit.Assertions.Analyzers/NexusLabs.TUnit.Assertions.Analyzers.csproj
NuGetMicrosoft.CodeAnalysis.Analyzerssrc/NexusLabs.TUnit.Assertions.Analyzers/NexusLabs.TUnit.Assertions.Analyzers.csproj
NuGetTUnit.Assertionssrc/NexusLabs.TUnit.Assertions/NexusLabs.TUnit.Assertions.csproj
NuGetxunit.v3.assertsrc/NexusLabs.Xunit.Assertions/NexusLabs.Xunit.Assertions.csproj
NuGetxunit.v3.extensibility.coresrc/NexusLabs.Xunit.Assertions/NexusLabs.Xunit.Assertions.csproj
Alle Abhängigkeiten 17

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 12 direkte und 5 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
NuGetMicrosoft.CodeAnalysis.Analyzer.Testingdirekt
NuGetMicrosoft.CodeAnalysis.Analyzersdirekt
NuGetMicrosoft.CodeAnalysis.Commondirekt
NuGetMicrosoft.CodeAnalysis.CSharpdirekt
NuGetMicrosoft.CodeAnalysis.CSharp.Workspacesdirekt
NuGetMicrosoft.Extensions.DependencyInjection.Abstractionsdirekt
NuGetMicrosoft.Extensions.Logging.Abstractionsdirekt
NuGetMySql.Datadirekt
NuGetStronglyTypedIddirekt
NuGetTUnit.Assertionsdirekt
NuGetxunit.v3.assertdirekt
NuGetxunit.v3.extensibility.coredirekt
NuGetMicrosoft.CodeAnalysis.CSharp.Analyzer.Testingindirekt
NuGetMicrosoft.CodeAnalysis.CSharp.CodeFix.Testingindirekt
NuGetMicrosoft.Extensions.DependencyInjectionindirekt
NuGetMicrosoft.Extensions.TimeProvider.Testingindirekt
NuGetMoqindirekt
Abhängigkeits-Advisories nicht bewertet

Der Advisory-Abgleich konnte für diesen Bericht nicht ausgeführt werden: No resolved dependencies carried a version and a supported ecosystem

JSON-Rohbericht maschinenlesbar
{
  "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"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v2.1.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenNuGet.