Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
443 commits
Select commit Hold shift + click to select a range
7410761
Hot reload demo: hint about trace flag in smoke script
NatElkins Nov 14, 2025
887bef6
Hot reload demo: add keep-workdir hint and env toggle
NatElkins Nov 14, 2025
d2b4502
Hot reload demo: mention tracing/keep env hints on startup
NatElkins Nov 14, 2025
a6f9f9b
Hot reload demo: add --keep-workdir flag
NatElkins Nov 14, 2025
006ed6c
Add blob-handle translation to metadata aggregator
NatElkins Nov 14, 2025
863229f
Cover method blob translation in aggregator tests
NatElkins Nov 14, 2025
f79510d
Cache StandaloneSig blobs and add local signature test
NatElkins Nov 14, 2025
556a1cc
Add multi-generation method signature aggregator test
NatElkins Nov 14, 2025
6fde6b3
Add multi-gen method signature aggregator regression
NatElkins Nov 14, 2025
ad41538
Enable method signature multi-gen regression
NatElkins Nov 14, 2025
6e40776
Add property signature multi-gen aggregator test
NatElkins Nov 14, 2025
68eced0
Add event name multi-gen aggregator test
NatElkins Nov 14, 2025
6f7be68
Document lack of local signature StandAloneSig rows
NatElkins Nov 14, 2025
0eca2db
Emit standalone signature rows in hot-reload deltas
NatElkins Nov 14, 2025
cc1e056
Add heap tracing toggle for delta writer
NatElkins Nov 14, 2025
1833ecd
Add heap offset regression for property deltas
NatElkins Nov 14, 2025
a9d0547
Add heap offset regression for event deltas
NatElkins Nov 14, 2025
8fe0115
Add heap offset regression for async deltas
NatElkins Nov 14, 2025
4b4c0e8
Document hot reload heap tracing workflow
NatElkins Nov 14, 2025
32822ce
Reuse baseline module name handle in deltas
NatElkins Nov 14, 2025
16930dc
Reuse baseline string handles for parameter rows
NatElkins Nov 14, 2025
8e4069a
Capture baseline heap sizes for metadata delta artifacts
NatElkins Nov 14, 2025
21a6826
Apply baseline offsets when encoding string heap entries
NatElkins Nov 14, 2025
d7757e7
Add heap-snapshot coverage for local signature and closure deltas
NatElkins Nov 14, 2025
1640649
Keep delta string/blob heap offsets relative to local heaps
NatElkins Nov 14, 2025
e1d7f11
Verify baseline heap snapshots for multi-generation artifacts
NatElkins Nov 14, 2025
c69b615
Bound string heap growth for property/event/async deltas
NatElkins Nov 14, 2025
d197e90
Bound async blob heap growth for local signature deltas
NatElkins Nov 14, 2025
7f400b4
Bound string/blob growth for closure helpers
NatElkins Nov 14, 2025
90dbbb2
Clamp closure string/blob heap growth
NatElkins Nov 14, 2025
bcaf62f
Clamp local signature string heap growth
NatElkins Nov 14, 2025
ee859c4
Reuse metadata delta heap sizes in growth guards
NatElkins Nov 14, 2025
ab31f26
Anchor new string/blob entries to baseline heap offsets
NatElkins Nov 14, 2025
c426855
Rebase delta heap handles on baseline offsets
NatElkins Nov 14, 2025
66184e1
Emit string/blob heaps as pure suffixes
NatElkins Nov 14, 2025
561f27d
Clamp hot reload heap growth budgets
NatElkins Nov 14, 2025
74d6532
Gate mdv heap growth with suffix budgets
NatElkins Nov 14, 2025
c2b9f07
Add opt-in runtime apply smoke path
NatElkins Nov 14, 2025
735c5cc
Log runtime apply failures with HResult
NatElkins Nov 14, 2025
d657e49
Emit method rows for method-body edits
NatElkins Nov 14, 2025
70cc3e6
Synthesize parameter rows for method edits
NatElkins Nov 14, 2025
398a952
Add reference table rows to hot reload deltas
NatElkins Nov 15, 2025
75b51f8
Emit TypeRef reference rows for async parity
NatElkins Nov 15, 2025
466be36
Annotate async test module with AsyncStateMachine attribute
NatElkins Nov 15, 2025
1624041
Rebuild TypeRef/MemberRef rows for hot reload
NatElkins Nov 16, 2025
5e60496
Emit custom attribute metadata rows
NatElkins Nov 16, 2025
0dd7c41
Fix custom attribute delta serialization
NatElkins Nov 18, 2025
a664dfa
Checkpoint hot reload metadata updates
NatElkins Nov 18, 2025
785a520
Use delta RVAs for hot reload method rows
NatElkins Nov 18, 2025
603c7fa
Emit empty local signatures for method deltas
NatElkins Nov 18, 2025
c74b2c5
Synthesize return parameter rows for metadata deltas
NatElkins Nov 18, 2025
3e195b1
Align async TypeRef/MemberRef metadata with Roslyn
NatElkins Nov 18, 2025
3dfe917
Add async metadata parity regression
NatElkins Nov 18, 2025
4104758
Re-enable mdv validation in smoke script
NatElkins Nov 18, 2025
3c316f7
Align hot reload metadata with stand-alone sig parity
NatElkins Nov 18, 2025
7b5daac
Align EncBaseId flow with Roslyn
NatElkins Nov 18, 2025
c34798b
Add metadata root/heap zero regression test
NatElkins Nov 21, 2025
ea3885a
Hot reload: tighten delta metadata parity and coverage
NatElkins Nov 21, 2025
593a4ed
Hot reload: strengthen EncId chaining helpers
NatElkins Nov 21, 2025
1c379eb
Hot reload: assert EncLog update ops for async deltas
NatElkins Nov 21, 2025
e0988ef
Hot reload: EncMap presence checks in component mdv tests
NatElkins Nov 21, 2025
db15c75
Hot reload: normalize EncMap handle assertions
NatElkins Nov 21, 2025
4eff1fb
Hot reload: align PDB Enc tables with metadata
NatElkins Nov 21, 2025
d067038
Hot reload: encode module GUID columns as offsets
NatElkins Nov 23, 2025
0d54803
Hot reload: cover MethodDef EncLog for updates
NatElkins Nov 24, 2025
2037029
Hot reload: param coverage for added/update methods
NatElkins Nov 24, 2025
22f8689
Hot reload: StandAloneSig EncLog/EncMap assertion
NatElkins Nov 24, 2025
930bc85
Hot reload: validate MethodDef RVA matches delta body
NatElkins Nov 24, 2025
6f8e9ba
Hot reload: verify IL fat header and MethodDef RVA
NatElkins Nov 24, 2025
a28017b
Hot reload: reuse MemberRef tokens on unchanged calls
NatElkins Nov 24, 2025
4f3020f
Hot reload: verify StandAloneSig tokens in locals headers
NatElkins Nov 24, 2025
87456e4
Hot reload: PDB EncLog/EncMap matches metadata
NatElkins Nov 24, 2025
1a6409d
Hot reload: PDB delta limits to updated methods
NatElkins Nov 24, 2025
6ea5620
Hot reload: guard PDB heap offsets vs baseline sizes
NatElkins Nov 24, 2025
40209c8
Hot reload: fix GUID heap format and Param row handling for runtime a…
NatElkins Nov 25, 2025
5be3f05
Hot reload: preserve baseline state across compilations for multi-gen…
NatElkins Nov 25, 2025
0efe8e9
Hot reload: add end-to-end rude edit rejection tests
NatElkins Nov 25, 2025
b6a3d47
Hot reload: implement ApplyUpdate runtime integration test
NatElkins Nov 25, 2025
716a8c3
Fix IncrementOnly return type to match signature
NatElkins Nov 25, 2025
a741a50
Fix 7 failing MdvValidationTests after rebase
NatElkins Nov 26, 2025
4b51ce2
Hot reload: fix 10 issues from code review (3 critical)
NatElkins Nov 26, 2025
b59bcdf
Add pre-existing test failure to checklist
NatElkins Nov 26, 2025
54332e9
Hot reload: fix parameter EncLog capacity + verify 2 items
NatElkins Nov 26, 2025
611fa57
Hot reload: fix GUID heap index serialization (Session 4)
NatElkins Nov 26, 2025
dd6a1d4
fix(hot-reload): revert GUID index serialization and add GenerationId…
NatElkins Nov 26, 2025
ca7fa11
checklist: mark pre-existing test failure as fixed
NatElkins Nov 26, 2025
de47dbf
docs: add git bisect guidance for debugging test failures
NatElkins Nov 26, 2025
4edc2a9
docs: add guidance on accurate test result reporting
NatElkins Nov 26, 2025
e5e4839
docs: add note about rebuilding fsi/fsc after clean builds
NatElkins Nov 26, 2025
7f3482a
docs: add guidance on incremental changes and frequent testing
NatElkins Nov 26, 2025
5c295db
refactor(hot-reload): extract helpers from emitDelta function
NatElkins Nov 26, 2025
d6b59df
refactor(hot-reload): consolidate duplicate token remapping functions
NatElkins Nov 26, 2025
eb94acb
fix(hot-reload): add parameter row validation per ECMA-335 II.22.33
NatElkins Nov 26, 2025
f02e08d
docs(hot-reload): clarify UserString heap offset conversion semantics
NatElkins Nov 26, 2025
212df14
docs: add push to upstream step in issue resolution workflow
NatElkins Nov 26, 2025
f322659
fix(hot-reload): use invalidArg instead of failwithf for unsupported …
NatElkins Nov 26, 2025
4cbee61
fix(hot-reload): align Blob/UserString heap sizes for generation 2+ d…
NatElkins Nov 26, 2025
aef7bfc
fix(hot-reload): improve PropertyMap/EventMap error messages with row…
NatElkins Nov 26, 2025
16c61ae
fix(hot-reload): handle BadImageFormatException in PDB document reading
NatElkins Nov 26, 2025
df4f018
docs(hot-reload): document PDB limitation for newly added methods
NatElkins Nov 26, 2025
e0dea3a
fix(hot-reload): emit PDB EncMap with MethodDebugInformation entries
NatElkins Nov 26, 2025
a7b5a81
test(hot-reload): update PDB tests to verify MethodDebugInformation E…
NatElkins Nov 26, 2025
364c441
test(hot-reload): add regression tests for 6 key fixes
NatElkins Nov 26, 2025
1ac6af2
docs: add test coverage requirements to CLAUDE.md
NatElkins Nov 26, 2025
ff7f02e
fix(hot-reload): replace weak hash function with FNV-1a in FSharpMeta…
NatElkins Nov 26, 2025
1efecc3
fix(hot-reload): add depth limit to nested type traversal in SymbolMa…
NatElkins Nov 26, 2025
ea4147a
fix(hot-reload): use ILTypeRef.Enclosing for synthesized name prefix …
NatElkins Nov 26, 2025
b96f085
fix(hot-reload): distinguish uninitialized vs empty readers in FSharp…
NatElkins Nov 26, 2025
d260f4e
fix(hot-reload): add thread-safety to HotReloadState session access (…
NatElkins Nov 26, 2025
674bdee
fix(hot-reload): add thread-safety coordination in EditAndContinueLan…
NatElkins Nov 26, 2025
6578440
fix(hot-reload): add generation counter validation in recordDeltaApplied
NatElkins Nov 27, 2025
2a0a9b8
fix(hot-reload): improve exception handling and document state restor…
NatElkins Nov 27, 2025
42c0246
test(hot-reload): add regression tests for validation fixes
NatElkins Nov 27, 2025
280a32f
chore(hot-reload): remove dead code ilDelta.fs
NatElkins Nov 27, 2025
aee40e5
fix(hot-reload): add thread-safety to CompilerGlobalState.Synthesized…
NatElkins Nov 27, 2025
d66724d
fix(hot-reload): add thread-safety to SynthesizedTypeMaps (CRITICAL x2)
NatElkins Nov 27, 2025
cbde577
fix(hot-reload): only clear session when not in hot reload capture mode
NatElkins Nov 27, 2025
82eba2a
perf(hot-reload): eliminate double emission in fsc.fs baseline capture
NatElkins Nov 27, 2025
d2dc959
fix(hot-reload): implement exponential backoff for file change detection
NatElkins Nov 27, 2025
fc3b346
docs: mark HotReloadOptimizationData error check as verified
NatElkins Nov 27, 2025
8723c51
fix(hot-reload): validate incompatible compiler options
NatElkins Nov 27, 2025
68b0543
fix(hot-reload): use stable file path hash instead of FileIndex for n…
NatElkins Nov 27, 2025
fe9e69b
fix(hot-reload): prevent counter drift in NiceNameGenerator
NatElkins Nov 27, 2025
f2adc99
fix(hot-reload): add snapshot validation in LoadSnapshot
NatElkins Nov 27, 2025
ea649e9
refactor(hot-reload): remove unused structured name generators
NatElkins Nov 27, 2025
88e9032
test(hot-reload): add thread-safety tests for SynthesizedTypeMaps
NatElkins Nov 27, 2025
1a171b7
test(hot-reload): add coded index table order tests per ECMA-335
NatElkins Nov 27, 2025
90a8052
test(hot-reload): add PDB tests for method additions and local variables
NatElkins Nov 27, 2025
5ae082e
test(hot-reload): add error path and validation tests
NatElkins Nov 27, 2025
5fe100e
test(hot-reload): add edge case tests for index size thresholds
NatElkins Nov 28, 2025
5c708fb
test(hot-reload): add comprehensive edge case tests
NatElkins Nov 28, 2025
fb158c2
chore: update xlf localization files for hot reload error messages
NatElkins Nov 28, 2025
5e12f62
test(hot-reload): add SRM parity tests for AbstractIL migration valid…
NatElkins Nov 28, 2025
97a0440
feat(hot-reload): add F# foundation types to replace SRM handles
NatElkins Nov 28, 2025
cc36161
refactor(hot-reload): replace HandleKind with F# DU coded index types
NatElkins Nov 28, 2025
6381ffb
refactor(hot-reload): replace SRM heap handle types with F# offset wr…
NatElkins Nov 28, 2025
ddf0e6b
refactor(hot-reload): remove MetadataBuilder from FSharpDeltaMetadata…
NatElkins Nov 28, 2025
4d85d0e
refactor(hot-reload): replace MetadataTokens utilities with DeltaToke…
NatElkins Nov 28, 2025
193e9aa
fix(hot-reload): correct heap size reporting for SRM compatibility
NatElkins Nov 28, 2025
59966d5
test(hot-reload): add heap size verification tests for all delta types
NatElkins Nov 28, 2025
d840476
test(hot-reload): add explicit tests for SRM heap trimming behavior
NatElkins Nov 28, 2025
625f5e2
refactor(hot-reload): replace SRM TableIndex enum with DeltaTokens in…
NatElkins Nov 28, 2025
2851c15
refactor(hot-reload): unify table index types using TableNames from B…
NatElkins Nov 29, 2025
e05eb8b
feat(hot-reload): add ILBaselineReader for metadata parsing without SRM
NatElkins Nov 29, 2025
567fef9
feat(hot-reload): extend ILBaselineReader with BaselineMetadataReader…
NatElkins Nov 30, 2025
9115a7c
refactor(hot-reload): update call sites to use byte-based baseline fu…
NatElkins Nov 30, 2025
82203d0
refactor(hot-reload): remove unused FSharpMetadataAggregator
NatElkins Nov 30, 2025
2af5d0c
feat(hot-reload): replace SRM with pure F# parsing in PDB createSnapshot
NatElkins Dec 1, 2025
d4f9a98
refactor(hot-reload): remove unused SRM imports and legacy functions
NatElkins Dec 1, 2025
74b386a
test(hot-reload): update tests for SRM removal
NatElkins Dec 1, 2025
88296b4
test(hot-reload): add comprehensive tests for byte-based readers
NatElkins Dec 1, 2025
ba51b46
test(hot-reload): add comprehensive Portable PDB reader parity tests
NatElkins Dec 1, 2025
e3ac7ed
refactor(hot-reload): unify handle/coded-index types into BinaryConst…
NatElkins Dec 1, 2025
a0f0bf1
docs(hot-reload): document SRM boundary in HotReloadPdb.fs
NatElkins Dec 1, 2025
c7811e8
refactor(hot-reload): share PDB utilities between ILPdbWriter and Hot…
NatElkins Dec 1, 2025
7517f91
refactor(hot-reload): remove SRM MetadataBuilder from token calculati…
NatElkins Dec 1, 2025
4197e8c
fix(hot-reload): use shared markerForUnicodeBytes for user string ter…
NatElkins Dec 2, 2025
005edeb
fix(hot-reload): update tests to use SRM-free APIs
NatElkins Dec 2, 2025
33b634c
fix(hot-reload): use baseline metadata for StandAloneSig row IDs (Ros…
NatElkins Dec 2, 2025
c454aeb
feat(hot-reload): enable method additions with Roslyn-parity restrict…
NatElkins Dec 3, 2025
d81e989
Allow insert-only edits through EmitDeltaForCompilation
NatElkins Feb 7, 2026
ffcf4b1
Emit accessor semantics for additions on mapped types
NatElkins Feb 7, 2026
63d4fcc
feat(hot-reload): harden pending commit/discard session semantics
NatElkins Feb 7, 2026
a8a7e58
refactor(hot-reload): deduplicate baseline/session ownership
NatElkins Feb 7, 2026
ae9b3ba
test(hot-reload): add single-command verification gate script
NatElkins Feb 7, 2026
6662b3c
fix(hot-reload): accept short -o output arguments in checker sessions
NatElkins Feb 7, 2026
04e92d0
feat(hot-reload): add snapshot-based checker session overloads
NatElkins Feb 7, 2026
ed38217
feat(hot-reload): drive checker sessions from workspace snapshots
NatElkins Feb 8, 2026
8eb432a
Fix F# watch method mapping to apply edited methods in place
NatElkins Feb 8, 2026
f6f9d5c
fix(hot-reload): use symbol-driven method identity for delta mapping
NatElkins Feb 9, 2026
15b8724
fix(hot-reload): disambiguate same-arity overload edits
NatElkins Feb 10, 2026
b694b01
fix(hot-reload): map generic overload edits by compiled signature ide…
NatElkins Feb 10, 2026
1631692
test(hot-reload): cover computation-expression usage token targeting
NatElkins Feb 11, 2026
3bf9dba
feat(workspace): track non-source input timestamps in project config
NatElkins Feb 11, 2026
02a3ca2
feat(hot-reload): classify explicit interface inserts separately
NatElkins Feb 11, 2026
fc189a9
fix(hot-reload): track resource dependencies in workspace config hashes
NatElkins Feb 11, 2026
f184112
feat(hot-reload): classify lowered shape rude edits
NatElkins Feb 11, 2026
f8f4026
test(hot-reload): add type-provider parity matrix coverage
NatElkins Feb 11, 2026
8be76f5
fix(hot-reload): preserve CE/async output shape on in-place updates
NatElkins Feb 11, 2026
7766def
fix(hot-reload): use netstandard-safe ordinal contains checks
NatElkins Feb 11, 2026
1382ab5
test(hot-reload): fix synthesized-helper assertion formatting
NatElkins Feb 11, 2026
a57def6
Fix MethodSpec and MemberRef delta remapping parity
NatElkins Feb 11, 2026
c7cc18c
Expand lowered-shape and type-provider hot reload test matrix
NatElkins Feb 11, 2026
7bc2d0b
Classify async resource-scope edits as state-machine shape changes
NatElkins Feb 11, 2026
1af5c7f
Apply PR review feedback for hot reload parity/perf
NatElkins Feb 13, 2026
e5ddb0c
fix(hot-reload): gate synthesized naming to active sessions
NatElkins Feb 19, 2026
c333ac5
fix(hot-reload): ignore split output args in tracked input hashing
NatElkins Feb 19, 2026
2df90b5
fix(hot-reload): make synthesized name allocation atomic
NatElkins Feb 19, 2026
45c13b1
fix(hot-reload): stabilize synthesized helper replay across session c…
NatElkins Feb 19, 2026
0901899
Refactor hot reload layering and add mainline drift guard
NatElkins Feb 20, 2026
49f932b
Harden synthesized diff classification and expand runtime matrix
NatElkins Feb 20, 2026
a523925
Clarify process-wide hot reload session semantics
NatElkins Feb 23, 2026
948bc52
Add quotation coverage to Tier2 runtime apply matrix
NatElkins Feb 23, 2026
b15a642
Add mainline naming parity guards for non-hot-reload mode
NatElkins Feb 23, 2026
e64e34a
Fail closed on unsupported metadata token remap tables
NatElkins Feb 23, 2026
9ad7326
Refactor method update input resolution in IlxDeltaEmitter
NatElkins Feb 23, 2026
b9eb740
Harden plugin boundary with generated-name map abstraction
NatElkins Feb 23, 2026
28f4901
Complete plugin boundary for compiler emit hooks
NatElkins Feb 23, 2026
8579c2a
Harden process-wide hot reload session transitions
NatElkins Feb 23, 2026
9a518f5
Extract metadata/reference phases from IlxDeltaEmitter
NatElkins Feb 23, 2026
19a66c4
Add TypedTreeDiff architecture guards for fail-closed matching
NatElkins Feb 23, 2026
a65b1c9
Normalize DeltaBuilder type matching across nested separators
NatElkins Feb 23, 2026
c50f65f
Further decompose IlxDeltaEmitter row snapshot phases
NatElkins Feb 24, 2026
54a2597
Fail closed on ambiguous hot reload symbol resolution
NatElkins Feb 24, 2026
abf8ede
Lock ilwrite.fsi drift fingerprint against origin/main
NatElkins Feb 24, 2026
f191a22
Add metadata coupling guard for ilread/ilwrite drift
NatElkins Feb 24, 2026
2f5e3df
Move capture emission behind compiler emit hook
NatElkins Feb 24, 2026
b5f1b50
Add IlxGen naming path guardrail
NatElkins Feb 24, 2026
7a4506e
Deduplicate ApplyUpdate runtime harness setup
NatElkins Feb 24, 2026
aaf81f3
Isolate hot reload hook wiring behind bootstrap adapter
NatElkins Feb 24, 2026
2ca48ae
docs(hot-reload): clarify emit-hook boundary and tricky paths
NatElkins Feb 24, 2026
7dfd96b
Refine hot reload emit hook plugin boundary lifecycle
NatElkins Feb 25, 2026
0877c96
Fail closed when runtime method identity is incomplete
NatElkins Feb 25, 2026
be6c442
Tighten main-branch fsi drift guardrails
NatElkins Feb 25, 2026
78d0001
Document T-Gro hot reload feedback closure matrix
NatElkins Feb 25, 2026
16f80b7
Isolate ambient emit hook state from CompilerConfig
NatElkins Feb 25, 2026
7797f2b
Enforce hot reload plugin boundary guardrails
NatElkins Feb 25, 2026
e21066f
Reduce main-relative .fsi drift for name-map plumbing
NatElkins Feb 25, 2026
5c7e2b7
Refresh .fsi drift lockfile after drift reduction
NatElkins Feb 25, 2026
ae7de37
Strengthen metadata parity guardrails for hot reload
NatElkins Feb 25, 2026
58a58c3
Extract IlxDeltaEmitter metadata phases for safer changes
NatElkins Feb 25, 2026
b0d9bec
Constrain lowered-shape heuristics to member paths
NatElkins Feb 25, 2026
42e68ff
Fail closed on explicit containing-entity mismatches
NatElkins Feb 25, 2026
5709fc7
Refresh T-Gro closure matrix after hardening
NatElkins Feb 25, 2026
8cf89d6
Scope hot reload session state to service-owned store
NatElkins Feb 25, 2026
9ff1cff
Add output parity gate for hot reload capture flag
NatElkins Feb 25, 2026
3a15996
Constrain lowered-shape value heuristics to member refs
NatElkins Feb 25, 2026
8f466d2
Harden DeltaBuilder method resolution with identity index
NatElkins Feb 25, 2026
53ab23e
Extract method/parameter row phase from IlxDeltaEmitter
NatElkins Feb 25, 2026
a4b1ba9
Reduce main-relative .fsi drift in Activity surface
NatElkins Feb 25, 2026
19c62d4
Route fsc emit-hook resolution through bootstrap adapter
NatElkins Feb 26, 2026
08bc248
Broaden metadata parity gate with mdv component slice
NatElkins Feb 26, 2026
5e40b16
Extract IlxDeltaEmitter finalization phase helpers
NatElkins Feb 26, 2026
e89ac38
Scope ambient hot reload emit hook to service instance
NatElkins Feb 26, 2026
38e39a8
Reduce hot reload signature surface in checker results
NatElkins Feb 26, 2026
3019b5f
Harden TypedImplementationFiles reflection across hot reload paths
NatElkins Feb 26, 2026
1a9b6c1
feat(hot-reload): remove ambient emit-hook state and keep hook wiring…
NatElkins Feb 26, 2026
c668619
feat(hot-reload): supplement lowered-shape detection with trait finge…
NatElkins Feb 26, 2026
d48a36f
feat(hot-reload): harden DeltaBuilder fallback signature matching
NatElkins Feb 26, 2026
afae208
Harden delta serializer heap offset bounds checks
NatElkins Feb 26, 2026
062b570
Trim stale main-relative fsi drift lock entries
NatElkins Feb 26, 2026
a4065ff
Extract metadata reference remapper from emitDelta
NatElkins Feb 26, 2026
08ed6cf
Refine lowered-shape churn classification evidence
NatElkins Feb 26, 2026
9564234
Harden DeltaBuilder containing-type identity resolution
NatElkins Feb 26, 2026
3dd7bf1
hot reload: remove lowered-shape operation-name heuristics
NatElkins Feb 27, 2026
a45dd61
feat(hot-reload): replace string signature identity with typed runtim…
NatElkins Feb 28, 2026
8d60d83
refactor(hot-reload): separate ilx delta definition and reference rem…
NatElkins Feb 28, 2026
2c6797f
feat(hot-reload): add SRM shadow delta metadata parity path
NatElkins Mar 2, 2026
c60e688
refactor(hot-reload): reduce main-relative .fsi drift surface
NatElkins Mar 3, 2026
11ce6a0
refactor(hot-reload): centralize delta metadata encoding and trim ilw…
NatElkins Mar 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
149 changes: 149 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
# CLAUDE.md - F# Hot Reload Implementation

## Issue Resolution Workflow

When working through the `HOT_RELOAD_REVIEW_CHECKLIST.md`:

1. **Read the issue** - Understand the problem and affected files
2. **Make the fix** - Edit the relevant code
3. **Validate the change** - ALWAYS do one of:
- Run `dotnet build src/Compiler/FSharp.Compiler.Service.fsproj` to verify compilation
- Run relevant tests: `dotnet test tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj --filter "FullyQualifiedName~HotReload"`
- For critical changes, do both
4. **Update the checklist** - Mark the item as `[x]` with `✅ FIXED` notation
5. **Commit the fix** - After tests pass, create a commit with a detailed message:
- Reference the issue from the checklist (e.g., "Session 4: CustomAttribute parent encoding")
- Describe what was wrong and how it was fixed
- Note any ECMA-335 references if applicable
- Example: `fix(hot-reload): implement all 21 HasCustomAttribute parent types per ECMA-335 II.24.2.6`
6. **Push to upstream** - After every commit, push to the upstream hot-reload branch:
```bash
git push upstream hot-reload
```
7. **Move to next issue** - Continue top-to-bottom through the checklist

## Build Commands

```bash
# Quick build (compiler only)
dotnet build src/Compiler/FSharp.Compiler.Service.fsproj --no-restore

# Full build
dotnet build FSharp.sln

# Run hot reload tests
dotnet test tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj --filter "FullyQualifiedName~HotReload"

# Run specific test file
dotnet test tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj --filter "FullyQualifiedName~MdvValidationTests"
```

## Key Files

- `HOT_RELOAD_REVIEW_CHECKLIST.md` - Master checklist of all issues (61 total)
- `src/Compiler/CodeGen/` - Delta emission, metadata serialization
- `src/Compiler/HotReload/` - Session management, state
- `src/Compiler/TypedTree/` - Semantic diff, definition map
- `tests/FSharp.Compiler.ComponentTests/HotReload/` - Component tests
- `tests/FSharp.Compiler.Service.Tests/HotReload/` - Service tests

## Priority Order

1. **Critical (6 issues)** - Merge blockers, must fix
2. **High (18 issues)** - Should fix before merge
3. **Medium (22 issues)** - Post-merge acceptable
4. **Low (15 issues)** - Technical debt

## Making Changes Incrementally

Make changes in small increments and run tests frequently. This prevents large regressions that are hard to debug. For example:

- Fix one issue, run tests, commit
- Don't batch multiple unrelated fixes into one commit
- If tests fail after a change, you know exactly which change caused it

A single commit that "fixes 10 issues" can introduce subtle bugs (like the GUID index serialization regression) that are hard to trace back to their root cause.

## Test Coverage Requirements

**Add test coverage for every behavioral change** unless it doesn't make sense to do so. Examples:

**DO add tests for:**
- Bug fixes (test that the bug no longer occurs)
- New detection logic (e.g., rude edit detection for constraint/mutable changes)
- Error handling improvements (test that proper exceptions are raised)
- ECMA-335 compliance fixes (test correct encoding)
- Heap/offset calculations (test alignment, boundaries)

**DON'T need tests for:**
- Pure refactoring (extracting functions, renaming, reorganizing code)
- Comment/documentation changes
- Code style fixes
- Removing dead code

When in doubt, add a test. Future maintainers will thank you for the regression protection.

**Test file locations:**
- `tests/FSharp.Compiler.Service.Tests/HotReload/` - Unit tests for individual components
- `tests/FSharp.Compiler.ComponentTests/HotReload/` - Integration tests, end-to-end scenarios

## Respecting Task Boundaries

If the user specifies "one task at a time" or similar pacing instructions, **strictly adhere to this**:

- Complete the current task fully (including tests and commit)
- **Stop and wait** for direction before starting the next task
- Do not begin investigating or working on the next item proactively
- The user controls the pace; don't assume they want to continue immediately

This is important because the user may want to review changes, take a break, or change priorities between tasks.

## Reporting Test Results Accurately

**Never say "all tests pass" if any tests fail.** Even if failures seem unrelated or infrastructure-caused, report the actual numbers:

- Bad: "130 HotReload service tests: All pass (4 fail due to infrastructure)"
- Good: "130 pass, 4 fail (infrastructure - missing fsi.dll from clean build)"

If failures are infrastructure-related, investigate or note them separately, but don't claim success when there are failures.

## Rebuilding After Clean Builds

After deleting `artifacts/bin` or `artifacts/obj` (e.g., during git bisect), some tests may fail with missing file errors like:
```
Couldn't find "fsi/Debug/net10.0/fsi.dll"
Couldn't find "fsc/Debug/net10.0/fsc.dll"
```

Rebuild these infrastructure projects:
```bash
dotnet build src/fsi/fsiProject/fsi.fsproj
dotnet build src/fsc/fscProject/fsc.fsproj
```

## Debugging Unexpected Test Failures

If a test fails unexpectedly (especially one that was previously passing):

1. **Use git bisect** to find which commit introduced the regression:
```bash
git bisect start
git bisect bad HEAD
git bisect good <known-good-commit>
# At each step: clean build, run test, mark good/bad
```

2. **Always do clean builds** when bisecting to avoid stale artifacts:
```bash
rm -rf artifacts/bin artifacts/obj
dotnet build tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj
dotnet test ... --no-build
```

3. **Check the last 5-10 commits** - regressions are often recent

4. Once found, **diff the breaking commit** to understand the root cause

## Current Progress

Track progress in `HOT_RELOAD_REVIEW_CHECKLIST.md` by checking off completed items.
Loading