Repository navigation
feat: phase 10 cross-cutting invariants and conformance (XCUT-1..-24, NFR-1..-17, appendix B) - #102
Conversation
…tFace.None (phase 10, #99)
…Combine (phase 10, #99)
…e controls (phase 10, #99)
…he core-only kit (phase 10, #99)
…onary outside BoundedMap (phase 10, #99)
…nd negative controls (phase 10, #99)
…tive controls (phase 10, #99)
…alyzerWaiverTests (phase 10, #99)
…w suites (phase 10, #99)
One row per requirement ID for XCUT-1..24 and NFR-1..17 (39 done, NFR-16 and NFR-17 deferred), the contributed-evidence and hand-off table, the gate table, deviations, rulings, findings and the ruleset request for the lead.
Roadmap Phase 10 card, Phase List row and the dated phase 10 exit note; first-release.md (SHOULD declined, post-release triggers, the ruleset blocker, public-surface candidates); the earlier checklists' hand-off rows marked taken by phase 10; CLAUDE.md and README.md for the four suites and the new scripts; knowledge notes for Stryker on Microsoft.Testing.Platform, the cross-path reproducible pack, the missing required status checks and the HTAB edge.
Two Linux-row steps after the knowledge structure check: the coverage self-test and requirement-coverage.cs --check. CiWorkflowTests gains both rows in its gate table and its conditional allow-list in the same change; dropping the check turns it red.
… and covers a retried downgrade (phase 10, #99)
… outbound and inbound alike (phase 10, #99)
…se; every built component is closed (phase 10, #99)
…x of the body as the error snapshot (phase 10, #99)
… not only 32 lower-case hex characters (phase 10, #99)
…ontinue-on-error or matrix exclude (phase 10, #99)
…as hourglass (phase 10, #99)
…ages, changelog and notes (phase 10, #99)
…list (phase 10, #99)
Review recordImplemented by an 8 verified findings (2 major, 6 minor), all resolved:
Gates after the fixes: build 0 warnings, format clean, 7 356 tests / 0 failed / 27 skipped, coverage 97.46%, pack + dependency audit, packaging conformance 8/8, requirement coverage 645/645, reproducible pack, NativeAOT smoke, tools solution, knowledge structure, housekeeping probe — all green. Routed onward (checklist Findings / Open items): |
What and why
Phase 10 of the v1 roadmap: cross-cutting invariants and non-functional requirements. Design and plan:
docs/work/mvp/phase10/(planning #99, #100). Checklist:docs/work/mvp/phase10/2026-10-13-phase10-cross-cutting-invariants-checklist.md. User page:docs/sdk-documentation/cross-cutting-invariants.md, suites indocs/sdk-documentation/conformance.md.Closes #99
Phase 10 measures and routes; it changes no production behaviour. The only
src/edits outside the kit are twoRS0030bans inBannedSymbols.txtand one scoped pragma atBoundedMap's single construction site. The plan's four stacked PRs were built as four commit groups on this one branch, each green at its gate task.SuiteRunnerCore),TransportFace.None(additive),SuiteOptions, per-suite preambles,ConformanceReport.Combine.XCUT-1..XCUT-24,NFR-11) overInvariantSubjecthooks that default to core; driven by a core driver (Dexpace.Sdk.Core.Tests/Conformance/,SEAM-2's allow-list admits the core-only kit) and a DI driver.SERDE/SEAM-20lift) with public probe models; STJ driver.NFR-1,-2,-3,-8,-10,-13,-14,-15) over the packed.nupkgfiles with BCL-only readers; a CI step (scripts/ci/packaging-conformance.cs) with policy parity against the dependency audit.Nfr11PublicSurfaceArchitectureTests,NFR4ArchitectureTests,LicenseHeaderTests(incl.scripts/ci/*.cs),AnalyzerWaiverTests(every.editorconfigexemption carries a# Re-enable when:),CiWorkflowTests(no advisory gate), cross-pathreproducible-pack.sh.APPENDIX_B.mdmaps all 61 items with an evidence gate (AppendixBCoverageTests);scripts/ci/requirement-coverage.cscounts appendix C against every checklist (645 of 645 owned) with a shell self-test, run in CI.CheckPhase10Asyncruns the invariant and codec suites in the published binary.Every new assertion has a negative control under
tests/Dexpace.Sdk.Conformance.Tests/Controls/. The transport drivers keep exactly their two permanent waivers.Requirements
41 owned rows (
XCUT-1..-24,NFR-1..-17; 26 MUST, 15 SHOULD): 39 ✅ / 0 🚫 / 2 ⏳ / 0 N/A. Eleven ✅ are split (on existing §10 entries, vacuous or declined clauses, or readings). ⏳:NFR-16(release path, phase 12) andNFR-17's merge half (see the lead's action below).Verification
Linux, .NET SDK 10.0.401, re-run after the review fixes.
dotnet build(Release, 0 warnings),dotnet format --verify-no-changes,dotnet test --solution Dexpace.Sdk.sln: 7 356 tests, 0 failed, 27 skippeddotnet pack; dependency audit (5 libraries conform); packaging conformance (8/8); requirement coverage (645/645) and its self-testall checks passedscripts/knowledge verify-structure, housekeeping probe (no drift found)Securityfolders unchanged; only the kit'sPublicAPI.Unshipped.txtmoved; lock files: the two test projects' new kit referenceRecords
CHANGELOG.md[Unreleased](Added;TransportFace.Noneadditive)docs/first-release.md;CLAUDE.mdLead rulings and open action
P10-1..P10-30 accepted at their recommended defaults; plan readings R2, R3, R5, R6, R7, R15, R17 accepted as written.
Admin action needed (
NFR-17):main's ruleset has norequired_status_checksrule, so a red CI job does not block a merge. Request text is in the checklist's Open items for the lead.