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": "" } ] } }
Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 2.1.0 · 2026-07-24 17:02 UTC

ncosentino / NexusLabs.Framework

C#MIT★ 12 estrellas⑂ 2 forksdesde ago 2020Ver en GitHub ↗

ncosentino/NexusLabs.Framework tiene un índice de salud de 69 sobre 100, lo que lo sitúa en la banda Bueno. Su puntuación más alta es Vitality (78/100) y la más baja, Community & Adoption (39/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

69
global / 100
Bueno

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala estandarizada de 1 a 100. El resultado global parte de su media ponderada, calibrada contra la distribución del registro público para que las bandas tengan significado percentil; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe un límite «En riesgo» de 34.

69
Excepcional93-100El nivel más alto del registro (≈ el 5% superior); cumple prácticamente todos los criterios evaluados
Excelente80-92Sólido en todos los frentes; carencias menores
Bueno65-79Saludable; carencias limitadas y manejables
Moderado50-64Aceptable con carencias notables; se recomienda revisión
Débil35-49Debilidades sustanciales en varias áreas
En riesgo20-34Debilidades significativas; su adopción exige cautela
Crítico1-19Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

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

El resultado global ponderado 62 se calibra a 69 en la escala publicada del índice (calibración del registro 2026-08-02).

Titularidad

Nick CosentinoCuenta personal
278 seguidores25 repositorios públicosdesde ago 2013Microsoft

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
NuGetNexusLabs.CodeAnalysis.Testing.TUnit0.2.7-7hace 0 días
NuGetNexusLabs.Data.Sql.MySql0.2.7-7hace 0 días
NuGetNexusLabs.Data.Sql0.2.7-7hace 0 días
NuGetNexusLabs.Framework.Analyzers0.2.7-7hace 0 días
NuGetNexusLabs.Framework0.2.7-39hace 0 días

Métricas por categoría

Vitalidad

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

78Bueno · 21% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
7.6/36Cadencia de commits — 11/52 semanas con commits
18/18Volumen de commits — 99 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year99
human_commit_share0,92
days_since_last_push0
active_weeks_last_year11
Cómo se puntúa
16.2/27Publica versiones — 8 etiquetas de versión (sin releases de GitHub)
36/36Recencia de las versiones — última versión hace 0 días
27/27Cadencia de publicación — una versión cada ~8,8 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count8
latest_release_tagv0.2.7
releases_from_tags
days_since_latest_release0
mean_days_between_releases8,8
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

39Débil · 17% del índice global
Cómo se puntúa
16.9/60Estrellas — 12 estrellas
0/25Forks — 2 forks
0/15Observadores — 1 observadores
Datos de entrada utilizados
forks2
stars12
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
readme_badges
has_contributingno
has_issue_templateno
has_code_of_conductno
readme_badge_services
has_pull_request_templateno
Cómo se puntúa
48.1/80Descargas totales — 42.458 descargas históricas en nuget
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesNexusLabs.CodeAnalysis.Testing.TUnit, NexusLabs.Data.Sql.MySql, NexusLabs.Data.Sql, NexusLabs.Framework.Analyzers, NexusLabs.Framework
dependents
ecosystemsnuget
total_downloads42.458
monthly_downloads
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

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

57Moderado · 23% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
42/42Resolución de issues — 100% de issues cerradas
20.8/30Aceptación de PR — 18/26 PR decididos fusionados
0/13Newcomer PR acceptance — ningún PR de un contribuyente primerizo decidido en 30 d
0/15OpenSSF Scorecard: Code-Review — Found 0/23 approved changesets -- score normalized to 0
Datos de entrada utilizados
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
Excluidos de la puntuación (sin datos o no aplicable): newcomer_pr_acceptance. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
17.6/25Alcance del propietario — 278 seguidores de ncosentino
22.3/25Trayectoria — 25 repos públicos, cuenta de ~12 años
Datos de entrada utilizados
followers278
owner_typeUser
is_verified
owner_loginncosentino
public_repos25
account_age_days4735
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 5 paquete(s) en nuget
35/35Recencia de publicación — última publicación hace 0 días
20/20Historial de versiones — 39 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesNexusLabs.CodeAnalysis.Testing.TUnit, NexusLabs.Data.Sql.MySql, NexusLabs.Data.Sql, NexusLabs.Framework.Analyzers, NexusLabs.Framework
ecosystemsnuget
any_deprecatedno
min_days_since_publish0

Calidad de Ingeniería

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

70Bueno · 19% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
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
Datos de entrada utilizados
has_ci
has_tests
has_editorconfig
has_linter_configno
has_precommit_configno
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
0/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dir
has_descriptionno

Seguridad

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

60Moderado · 16% del índice global
Cómo se puntúa
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.5Licencia — 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 — sin datos
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate6
Excluidos de la puntuación (sin datos o no aplicable): signed_releases. Los pesos restantes se han renormalizado.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Tiene un peso deliberadamente pequeño (4%): las herramientas para agentes son una señal real de mantenimiento, pero un repositorio sin ninguna puede alcanzar igualmente 100/100.

78Bueno · 4% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — .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/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 92 de 92 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
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
Cómo se puntúa
12.6/18Arranque con un solo comando — 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 (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — C# (tipado estático)
0/10Entorno reproducible
10/10Práctica demostrada con agentes — 90 de los últimos 100 commits con autoría o crédito de agente
8/8Mantenimiento automatizado — 8 de los últimos 100 commits son actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,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
Cómo se puntúa
45/45Código verificable por tipos — C# (tipado estático)
55/55Tamaños de archivo manejables — 0/175 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageC#
largest_source_bytes45.288
source_files_sampled175
oversized_source_files0

Datos clave

12estrellas de GitHub
1contribuidores
99commits en los últimos 12 meses
0días desde el último push
8versiones publicadas
1factor bus
0issues abiertas
ecosistemas de paquetes

Advertencias de recopilación de datos

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

Más detalle

Historial de estrellas y forks 0 ★ / 2 ⇿
0Estrellas
2Forks

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

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

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-24 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
n/dSigned-Releasesno releases found
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
10Vulnerabilities0 existing vulnerabilities detected
Dependencias directas 24
RegistroPaqueteRestricción de versiónManifiesto
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
Todas las dependencias 17

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

RegistroPaqueteVersiónRelación
NuGetMicrosoft.CodeAnalysis.Analyzer.Testingdirecta
NuGetMicrosoft.CodeAnalysis.Analyzersdirecta
NuGetMicrosoft.CodeAnalysis.Commondirecta
NuGetMicrosoft.CodeAnalysis.CSharpdirecta
NuGetMicrosoft.CodeAnalysis.CSharp.Workspacesdirecta
NuGetMicrosoft.Extensions.DependencyInjection.Abstractionsdirecta
NuGetMicrosoft.Extensions.Logging.Abstractionsdirecta
NuGetMySql.Datadirecta
NuGetStronglyTypedIddirecta
NuGetTUnit.Assertionsdirecta
NuGetxunit.v3.assertdirecta
NuGetxunit.v3.extensibility.coredirecta
NuGetMicrosoft.CodeAnalysis.CSharp.Analyzer.Testingindirecta
NuGetMicrosoft.CodeAnalysis.CSharp.CodeFix.Testingindirecta
NuGetMicrosoft.Extensions.DependencyInjectionindirecta
NuGetMicrosoft.Extensions.TimeProvider.Testingindirecta
NuGetMoqindirecta
Avisos de dependencias sin evaluar

El cotejo de avisos no pudo ejecutarse para este informe: No resolved dependencies carried a version and a supported ecosystem

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

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

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

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