|
| 1 | +# Mammoth.LiteMapper Decision Log |
| 2 | + |
| 3 | +`SPECIFICATION.md` is authoritative. Accepted entries here are non-semantic implementation decisions unless explicitly stated otherwise. |
| 4 | + |
| 5 | +## Accepted non-semantic implementation decisions |
| 6 | + |
| 7 | +### DEC-0001 |
| 8 | + |
| 9 | +- Date: 2026-06-17 |
| 10 | +- Milestone: 1 |
| 11 | +- Status: Accepted |
| 12 | +- Context: The specification requires exact project names and both solution formats. |
| 13 | +- Decision: Use SDK-style projects under the exact section 4.6 paths and generate `Mammoth.LiteMapper.slnx` from `Mammoth.LiteMapper.sln` with `dotnet sln Mammoth.LiteMapper.sln migrate`. |
| 14 | +- Specification references: 4.6, 25. |
| 15 | +- Consequences: `.sln` remains the editable source solution; `.slnx` is regenerated after solution membership changes. |
| 16 | + |
| 17 | +### DEC-0002 |
| 18 | + |
| 19 | +- Date: 2026-06-17 |
| 20 | +- Milestone: 1 |
| 21 | +- Status: Accepted |
| 22 | +- Context: The skeleton needs repeatable dependency versions and deterministic project settings. |
| 23 | +- Decision: Use central package management in `Directory.Packages.props` and shared deterministic defaults in `Directory.Build.props`. |
| 24 | +- Specification references: 3.4, 4.1, 4.2, 22.1, 22.7, 24.6. |
| 25 | +- Consequences: Package versions are controlled centrally; shipping assemblies target `netstandard2.0`. |
| 26 | + |
| 27 | +### DEC-0003 |
| 28 | + |
| 29 | +- Date: 2026-06-17 |
| 30 | +- Milestone: 1 |
| 31 | +- Status: Accepted |
| 32 | +- Context: Milestone 1 must compile without implementing Milestone 2 public abstractions or Milestone 3 generator behavior. |
| 33 | +- Decision: Shipping assemblies contain internal marker types only. No public mapping or abstraction API is introduced. |
| 34 | +- Specification references: 4.6, 5, 25. |
| 35 | +- Consequences: Public API remains empty until Milestone 2. |
| 36 | + |
| 37 | +### DEC-0004 |
| 38 | + |
| 39 | +- Date: 2026-06-17 |
| 40 | +- Milestone: 1 |
| 41 | +- Status: Accepted |
| 42 | +- Context: The generator must use the Roslyn 4.0.1 API baseline. |
| 43 | +- Decision: Pin `Microsoft.CodeAnalysis.CSharp` to `4.0.1` in central package management and reference it from the generator with `PrivateAssets="all"`. |
| 44 | +- Specification references: 4.1, 22.7. |
| 45 | +- Consequences: Generator code must avoid APIs introduced after Roslyn 4.0.1 unless a later approved specification change raises the baseline. |
| 46 | + |
| 47 | +### DEC-0005 |
| 48 | + |
| 49 | +- Date: 2026-06-17 |
| 50 | +- Milestone: 1 |
| 51 | +- Status: Accepted |
| 52 | +- Context: Milestone 1 requires MSTest with built-in assertions. |
| 53 | +- Decision: Use `MSTest.TestFramework` `4.2.3`, `MSTest.TestAdapter` `4.2.3`, and `Microsoft.NET.Test.Sdk` `18.6.0`; do not add FluentAssertions, Shouldly, or another assertion library. |
| 54 | +- Specification references: 22.1. |
| 55 | +- Consequences: Tests use only MSTest assertion APIs. |
| 56 | + |
| 57 | +### DEC-0006 |
| 58 | + |
| 59 | +- Date: 2026-06-17 |
| 60 | +- Milestone: 1 |
| 61 | +- Status: Accepted |
| 62 | +- Context: Milestone 1 requires initial Windows and Linux CI. |
| 63 | +- Decision: Add separate GitHub Actions workflows for Windows and Linux that restore, build, test, and list both solution formats. |
| 64 | +- Specification references: 22.8, 25. |
| 65 | +- Consequences: CI skeleton exists; release, trimming, AOT, package-consumer, and benchmark validation remain later milestones. |
| 66 | + |
| 67 | +## Pending specification questions |
| 68 | + |
| 69 | +None. |
| 70 | + |
| 71 | +## Rejected alternatives |
| 72 | + |
| 73 | +### DEC-0007 |
| 74 | + |
| 75 | +- Date: 2026-06-17 |
| 76 | +- Milestone: 1 |
| 77 | +- Status: Rejected |
| 78 | +- Context: Public marker APIs could make test code easier to write. |
| 79 | +- Decision or question: Do not expose public marker types in shipping assemblies during Milestone 1. |
| 80 | +- Specification references: 3.2, 5, 25. |
| 81 | +- Consequences: Tests load assemblies by name and validate that no public mapping API exists yet. |
| 82 | + |
| 83 | +## Superseded decisions |
| 84 | + |
| 85 | +None. |
0 commit comments