Skip to content

Commit 4ef9261

Browse files
reid-spencerclaude
andcommitted
Save session: document 1.15.2 and 1.15.3 releases
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 8ab166f commit 4ef9261

2 files changed

Lines changed: 58 additions & 2 deletions

File tree

CLAUDE.md

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -750,7 +750,7 @@ Items below are NOT duplicated elsewhere in this file.
750750
34. **TatSu 5.17.0 is broken** — Pin `TatSu>=5.12.0,<5.17.0`
751751
35. **No `inline` on Contents extensions** — ScalaDoc 3.7.4
752752
crashes. Filed: scala/scala3#25306
753-
36. **Current release is 1.15.1**State-as-Branch + `do` alias
753+
36. **Current release is 1.15.3**MessageFlowPass fix + perf opts
754754
45. **State is a Branch** — State extends `Branch[StateContents]`
755755
where `StateContents = Handler | Comment`. PassVisitor uses
756756
`openState`/`closeState` (not `doState`). ResolutionPass
@@ -776,3 +776,28 @@ Items below are NOT duplicated elsewhere in this file.
776776
for version parsing. Pin `riddlcVersion` in scripted tests
777777
44. **sbt plugin visibility** — Use `private[plugin] def` to
778778
avoid "private method never used" in sbt plugins (Scala 2.12)
779+
47. **Definition hashCode/equals override**`Definition` trait
780+
overrides `hashCode` (cheap: id+loc+class) and `equals`
781+
(structural but skips `Contents` fields via `productEquals`).
782+
This prevents O(subtree) hashing in all `HashMap[Definition,X]`
783+
operations. Opaque type `Contents[?]` erases to `ArrayBuffer`
784+
at runtime, so `case (_: Contents[?], ...)` matches correctly
785+
48. **TreePass uses Stack not HashMap**`mutable.Stack` of
786+
`ListBuffer[TreeNode]` replaces `Map[Definition, ListBuffer]`
787+
for pure O(n) tree building
788+
49. **UsageResolution uses mutable.Set**`uses`/`usedBy` value
789+
types are `mutable.Set[Definition]` not `Seq[Definition]`.
790+
API boundary methods (`getUsers`, `getUses`) return `.toSeq`
791+
50. **MessageFlowEdge.messageType is Option[Type]** — Changed
792+
in 1.15.3. Adaptor declarations produce edges with `None`.
793+
JS facade returns `""` for missing type. Consumers must use
794+
`.map()`/`.getOrElse()`
795+
51. **MessageFlowPass direction-aware**`InboundAdaptor`
796+
producer=referent, consumer=source. `OutboundAdaptor`
797+
producer=source, consumer=referent. Fixed in 1.15.3
798+
52. **MessageFlowOutput scoping helpers**`edgesForDomain()`
799+
and `edgesForContext()` take `SymbolsOutput` parameter to
800+
walk parent chains
801+
53. **EBNF TatSu syntax** — Use `{rule}+` not `rule+` for
802+
positive closure. TatSu requires curly braces around
803+
repeated elements

NOTEBOOK.md

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,38 @@ to the task file and note completion in this notebook.
1515

1616
## Current Status
1717

18-
**Last Updated**: March 11, 2026
18+
**Last Updated**: March 14, 2026
19+
20+
### Release 1.15.3 Published (Mar 14, 2026)
21+
22+
Bugfix: MessageFlowPass empty results + EBNF grammar fix.
23+
- MessageFlowPass now creates `AdaptorBridge` edges from adaptor
24+
declarations even when handlers contain only `prompt` or `???`
25+
- Fixed adaptor direction bug: was always treating adaptors as
26+
inbound regardless of `from`/`to` declaration
27+
- `MessageFlowEdge.messageType` changed to `Option[Type]` — adaptor
28+
declaration edges have `None`, typed handler edges have `Some`
29+
- Silent resolution failures now emit `Messages.warning`
30+
- Added `edgesForDomain()` and `edgesForContext()` scoping helpers
31+
to `MessageFlowOutput` (takes `SymbolsOutput` parameter)
32+
- JS facade: `messageTypeId` returns `""` for untyped edges
33+
- Fixed EBNF grammar: `state_content+``{state_content}+`
34+
(TatSu requires curly braces for positive closure)
35+
- 6 new MessageFlowPass tests (289 total passes tests)
36+
37+
### Release 1.15.2 Published (Mar 13, 2026)
38+
39+
Performance optimization for Scala.js and Native:
40+
- TreePass: replaced `HashMap[Definition, ListBuffer]` with
41+
`mutable.Stack[ListBuffer]` — pure O(n) tree building
42+
- Definition trait: overrides `hashCode` (cheap: id+loc+class)
43+
and `equals` (structural but skips Contents fields) to prevent
44+
O(subtree) hashing in all HashMap operations
45+
- UsageResolution: changed `uses`/`usedBy` from `Seq[Definition]`
46+
to `mutable.Set[Definition]` for O(1) association lookups
47+
- `Usages.isUsed()` uses `HashMap.contains` instead of
48+
`keys.exists(_ == definition)`
49+
- All 1818 tests pass across JVM, JS, Native
1950

2051
### Release 1.15.1 Published (Mar 11, 2026)
2152

0 commit comments

Comments
 (0)