Skip to content

v0.251.0

Latest

Choose a tag to compare

@github-actions github-actions released this 03 Aug 08:46
b851d62

0.251.0 (2026-08-02)

Features

  • cli: confine the Linux scenario child's writes with a Landlock self-exec launcher (#1781) (#1784) (417bb47)
  • cli: warn on koine.config namespace-map keys that match no context (#1255) (#1607) (f3d4d4d)
  • emit-common: route factory endpoints through RouteDerivation, emit openapi factory paths (#1747) (#1832) (32be49a)
  • emit-cs: bind @route template tokens into the emitted C# handler (#1748) (#1753) (e339346)
  • emit-cs: post-commit domain-event dispatch in the C# Application layer (#1721) (#1722) (018c1d9)
  • emit-java: emit the strategic/CQRS layer (#1090) (#1719) (a246962)
  • emit-java: emit unit of work, pipeline behaviors, and infrastructure composition helper (#1726) (#1751) (ae62ea5)
  • execution: bounded cross-aggregate fan-out in executed scenario runs (#1758) (#1790) (7c74d1a)
  • execution: confine the Windows scenario child's filesystem and network (#1780) (#1804) (a6c3e8d)
  • execution: OS-level confinement for the scenario execution sandbox (#1759) (#1773) (f9c7e02)
  • lang: @route/@get/@post/@put/@delete/@patch/@auth annotations for commands and queries (#1219) (#1734) (7522f57)
  • lang: give 'publishes' a modelled producer with a 'publish' command clause (#1796) (#1816) (bb709c6)
  • lang: let a create factory carry @route/verb/@auth api annotations (#1846) (#1850) (9d6b5ed)
  • skills: bring the socratic-prompts eval suite under version control (#1578) (ab1e82c)
  • studio: CRDT shared document and collaboration session lifecycle (#481) (#1803) (70abaad)
  • studio: derive the keybinding conflict-check from the live editor keymap (#431) (#1413) (7f745e7)
  • studio: encrypt collaboration traffic with a pinned-key Noise handshake (#1811) (#1820) (dfb6b3d)
  • studio: explorer batch — bulk buffers, rebindable keybindings, and five Preact panel migrations (#1416) (a6b087f)
  • studio: gitignore the model seeded by Open-anyway (#1063) (#1659) (9a27d13)
  • studio: grow useEditableField with transient-session mode + adopt in ExplorerPanel (#1396) (a6b087f)
  • studio: host/relay session broker for real-time collaboration (#481) (#1808) (aaa873f)
  • studio: light up Source Control ⋮/caret menus for Discard/Pull/Push/Fetch/Amend/Commit&Push (#1401) (#1453) (2a809bc)
  • studio: light up the Domain navigator's behavioural vocabulary and typed context-map relationships (#483) (#1730) (e3f97df)
  • studio: migrate EventsPanel, GlossaryPanel, RelationshipsPanel to koine-ui via the ReadableStore host-adapter (#1408) (#1458) (431ac92)
  • studio: opt-in "execute generated code" high-fidelity scenario mode (#236) (#1738) (fc8cbbd)
  • studio: Platform collaboration seam and live presence layer (#481) (#1786) (f788d61)
  • studio: raw keybindings.json editor in Advanced settings (#434) (#1688) (eb9cf6a)
  • studio: reconcile change-set targetRoot when a root is removed mid-review (#1689) (#1695) (544895b)
  • studio: restore per-file DDD-kind tint and line count in the generated tree (#1361) (a6b087f)
  • studio: route model-proposed new files to a chosen root (#1132) (#1680) (46e8e5b)
  • studio: scope + global commands in the rebindable keybindings registry (#432) (a6b087f)
  • studio: show workspace-op-gated palette entries as visible-but-disabled (#1407) (#1454) (b5ef514)
  • templates: pair ordering.koi's states block with place/ship/cancel commands (#1381) (#1657) (a1d1bd9)

Bug Fixes

  • ci: assert the Tauri system libraries actually installed (#1580) (011c50e)
  • ci: disable MSBuild node reuse to stop concurrent-worktree dotnet test deadlocks (#1552) (#1559) (144b2c4)
  • ci: eliminate the phantom skipped build-and-test check-run on draft-gated workflows (#1530) (#1546) (73ed156)
  • ci: eliminate the shared-cargo-target-dir false-Ok under concurrent Rust conformance tests (#1777) (#1779) (99dacf2)
  • ci: refresh the apt index before the cold-cache package download (#1579) (b414dfd)
  • cli: attribute a wrapper-nested OutOfMemoryException to the sandbox memory ceiling (#1858) (#1864) (be646da)
  • cli: make koine fmt --check agree with templates/ (#1842) (#1859) (dbd5d9f)
  • cli: scope WorkspaceIndex.FindReferences by bounded context (#1376) (#1428) (03f9671)
  • compiler: declare the ModelNode/ModelMember record API in PublicAPI.Unshipped.txt (#1474) (708f0a7)
  • deps: update non-major dependencies (#1576) (af823fc)
  • design-sync: carry the --koi-muted WCAG-AA fix into the design source (#1424) (#1441) (af7c24c)
  • emit-core: audit C#/OpenAPI read-model direct field for cross-context bug (#1702) (#1707) (f258d12)
  • emit-core: context-scope bare enum-member qualifiers in the Java, Python and Rust emitters (#1793) (#1795) (23448c7)
  • emit-core: emit a declared identity value object once (#1848) (#1869) (bc072fd)
  • emit-core: honor an explicit qualifier in a command's/factory's parameter import (#1716) (#1717) (319cd63)
  • emit-core: honor an explicit qualifier in a repository/service parameter import (#1718) (#1741) (5dee81d)
  • emit-core: honor an explicit qualifier in a value object's/entity's own field import (#1712) (#1714) (12a843b)
  • emit-core: honor MemberAnalysis.AutoBinds in TS/Python/PHP factory ctor args (#1731) (#1743) (b1d3682)
  • emit-core: make ModelIndex.AllTypes() enumerate every per-context declaration (#1632) (#1735) (9e31621)
  • emit-core: qualify a bare enum member owned by another bounded context (#1799) (#1800) (271327d)
  • emit-core: qualify an explicit cross-context enum-type reference (#1802) (#1805) (6aae179)
  • emit-core: reconcile a command transition against the target member's declared type (#1887) (#1900) (0de4e8f)
  • emit-core: reconcile a derived member's body against its declared type (#1888) (#1894) (2b88138)
  • emit-core: reconcile a member's default initializer against its declared type (#1880) (#1881) (cdb446e)
  • emit-core: reconcile a numeric Int/Decimal mismatch in TypeScript/Python/PHP coalesce operands (#1762) (#1766) (461c82d)
  • emit-core: reconcile a result expression and event-payload argument against their declared type (#1866) (#1872) (9fe7a3d)
  • emit-core: reconcile a result expression and event-payload argument against their declared type for TS/Python/PHP (#1875) (#1877) (e3462e8)
  • emit-core: resolve ModelIndex.Classify context-aware to fix cross-context misclassification (#1560) (#1612) (428503a)
  • emit-core: resolve OperatorNeedsAnalyzer's TypeResolver context-aware (#1642) (#1651) (4b40eac)
  • emit-core: resolve PHP/Python read-model direct-field imports against source context (#1701) (#1708) (d2b3cc5)
  • emit-core: resolve TypeResolver.IsValueLike/IsUserType context-aware (#1641) (b2b9b4e)
  • emit-core: restore shadowed outer bindings via a shared LocalScopeStack in the TS/Python/PHP/Java/Kotlin translators (#1497) (#1532) (608f63f)
  • emit-core: thread context through emitter TypeMapper Classify calls (#1638) (#1679) (173c9f7)
  • emit-core: thread context through remaining blind ModelIndex.Classify calls (#1700) (#1709) (bef3609)
  • emit-core: widen an Int factory init to Decimal in Kotlin/TS/Python/PHP ctor args (#1732) (#1757) (5d6728c)
  • emit-cs: bind enum query criteria correctly in emitted GET endpoints (#1656) (#1660) (d8eed33)
  • emit-cs: emit TryParse on identity value objects for query binding (#1649) (#1654) (70df8d5)
  • emit-cs: inline a derived member's expression inside invariant guards (#1756) (#1760) (764dc5e)
  • emit-cs: rename a member-shadowing lambda/let binding for hygienic substitution (#1768) (#1812) (3db9815)
  • emit-java,emit-kotlin,emit-rust: resolve a result clause's bare enum member against the declared return type (#1860) (#1868) (b51f9b6)
  • emit-java: alpha-rename a let binding that shadows a live local (#1536) (#1554) (8bdcfbc)
  • emit-java: apply value-object stored-member default initializers (#1635) (#1636) (9fe7981)
  • emit-java: inline a derived member's expression inside invariant guards (#1763) (#1772) (55867fc)
  • emit-java: numerically coerce a factory's explicit init against the member's declared type (#1519) (#1540) (13de1fe)
  • emit-java: Optional.of-wrap a factory's explicit init of an optional-declared required member (#1518) (fb197f8)
  • emit-java: Optional.of-wrap an auto-bound parameter binding to an optional-declared required member (#1480) (#1521) (175ffb9)
  • emit-java: Optional.of(...)-lift the result/payload paths toward their target's declared optionality (#1865) (#1879) (5a0a315)
  • emit-java: preserve Optional-shape when a coalesce's fallback is itself optional-typed (#1520) (#1545) (e127444)
  • emit-java: reconcile numeric-type mismatch in coalesce lowering (#1548) (#1610) (e54d8da)
  • emit-java: resolve Classify context-aware to fix cross-context misclassification (#1621) (#1628) (da98639)
  • emit-java: thread a sibling-operand enum hint through binary comparisons (#1771) (#1778) (c1deb32)
  • emit-kotlin: reconcile a numeric-type mismatch in coalesce elvis lowering (#1615) (#1624) (9023aaf)
  • emit-kotlin: resolve Classify context-aware to fix cross-context misclassification (#1625) (#1637) (f904c9e)
  • emit-kotlin: resolve multi-owner cross-context types via shared owner policy (#1130) (#1646) (45b7df3)
  • emit-php: compare entity id by value in equals(), not by PHP object reference (#1377) (#1427) (afaca1b)
  • emit-php: reconcile a numeric Int/Decimal mismatch in ternary branches (#1761) (#1828) (14655c1)
  • emit-php: resolve ModelIndex.Classify context-aware at every PHP emitter call site (#1620) (#1629) (2030529)
  • emit-php: thread context into the value-object equals() resolver (#1633) (#1647) (3f592b9)
  • emit-php: truncate bare Int/Int division toward zero via intdiv() (#1587) (#1593) (38135bd)
  • emit-php: truncate guarded-optional Int division toward zero via intdiv() (#1598) (#1602) (3d2b2fd)
  • emit-py: resolve Classify context-aware in the Python emitter (#1619) (#1630) (e2c2fd7)
  • emit-rust: bind a collection quantifier's lambda by value for Copy elements (#1801) (#1833) (78a1852)
  • emit-rust: close the five remaining optionality/guard emit gaps (#1510) (8264f87)
  • emit-rust: coerce a factory's explicit init of a required numeric member in BuildFactoryCtorArgs (#1438) (#1449) (5e65d35)
  • emit-rust: coerce a read-model derived field's numeric type mismatch (#1378) (#1494) (64da45f)
  • emit-rust: coerce a transition value toward the target field's declared type (#1511) (#1516) (25e6de7)
  • emit-rust: coerce OwnDerived's optional-body numeric mismatch (#1495) (#1509) (15ccbf4)
  • emit-rust: entity's optional-declared defaulted member gains a ctor parameter and honors factory init (#1437) (#1459) (79c51f3)
  • emit-rust: give PushLocal/PopLocal shadow-stack semantics (#1370) (#1496) (f2183c5)
  • emit-rust: inline a derived member's expression inside invariant guards (#1764) (#1769) (c06cff4)
  • emit-rust: map-coerce an Option-typed numerically-mismatched derived/default body in WriteDerived (#1487) (#1490) (3c1edd1)
  • emit-rust: map-coerce an Option-typed numerically-mismatched factory-init value in BuildFactoryCtorArgs (#1468) (#1484) (373f9c2)
  • emit-rust: map-render WriteUnary's Neg/Not when the operand is itself optional (#1372) (#1499) (ef18497)
  • emit-rust: narrow a presence-guarded optional member in a command's invariant re-check (#1489) (#1502) (e1bacd4)
  • emit-rust: own a smart-enum String associated-data read instead of cloning a borrowed &str (#1533) (#1555) (459fa80)
  • emit-rust: reconcile a numeric Int/Decimal mismatch in coalesce operands (#1829) (#1831) (413902d)
  • emit-rust: render a non-optional defaulted member as a trailing Option<T> constructor parameter (#1380) (#1429) (3f5568b)
  • emit-rust: resolve a quantity value object's explicit qualifier in its own context (#1871) (#1892) (4bd0a9e)
  • emit-rust: return optional smart-enum accessors by value instead of by reference (#1508) (8264f87)
  • emit-rust: return optional-but-Copy-inner accessors by value (#1373) (#1507) (129ec2f)
  • emit-rust: run invariant guards before re-wrapping a defaulted optional member (#1472) (#1488) (30033ce)
  • emit-rust: Some-wrap a factory's explicit init of an optional-declared required member (#1452) (#1464) (1a51f15)
  • emit-rust: Some-wrap an auto-bound non-optional parameter binding to an optional-declared required member (#1467) (#1476) (cf7aa06)
  • emit-rust: Some(...)-wrap result and emit-payload paths toward their target's declared optionality (#1523) (#1539) (8489d3c)
  • emit-rust: value object's non-optional-declared defaulted member becomes a trailing Option<T> constructor parameter (#1436) (#1455) (a0684b4)
  • emit-rust: value object's optional-declared defaulted member gains a ctor parameter (#1463) (#1469) (c0d1db7)
  • emit-ts: inline a derived member's expression inside invariant guards (#1765) (#1776) (dbdbec1)
  • emit-ts: map-widen a guard-narrowed optional Decimal operand in Decimal arithmetic (#1557) (#1562) (adcb342)
  • emit-ts: narrow a postfix when-guarded value before rendering its body (#1604) (#1609) (d468cdf)
  • emit-ts: resolve ModelIndex.Classify context-aware in TypeScript emitter (#1622) (#1631) (77337b2)
  • emit-ts: truncate bare Int/Int division toward zero (#1558) (#1582) (facf6b4)
  • emit-ts: truncate guarded-optional Int division toward zero (#1597) (#1601) (319fbe8)
  • emit-ts: widen an Int operand to Decimal in Decimal arithmetic (#1537) (#1553) (5a75e8c)
  • execution: name the sandbox memory ceiling whichever stage exhausts it (#1791) (#1807) (5ed209a)
  • koine-ui: queue overlapping confirm dialog requests (#1064) (#1613) (97c4537)
  • language: degrade a keyword enum member to a diagnostic instead of an NRE (#1836) (#1843) (694e6ba)
  • language: report a let expression with a missing body instead of crashing (#1512) (#1514) (e583e9c)
  • semantics,emit-core: resolve a policy's event name in its enclosing context (#1849) (#1851) (ce09469)
  • semantics,emit-core: resolve an emit's event name in its enclosing context (#1834) (#1844) (a020bf7)
  • semantics: context-scope the enum-member indexes so a same-name collision can't widen ambiguity (#1739) (#1788) (77037cc)
  • semantics: diagnose a declared identity with a non-hashable field (#1873) (#1896) (af70a5d)
  • semantics: narrow same-expression isPresent guards in conditional inference (#1564) (#1611) (d44684c)
  • semantics: recognize a compound expression built from narrowed leaves as narrowed (#1563) (#1586) (aec9098)
  • semantics: reject an optional selector type for sum/min/max (#1556) (#1561) (bf22837)
  • semantics: resolve a context-map-permit-visible type in TryGetDeclIn (#1853) (#1855) (21ad04c)
  • semantics: resolve bare enum members against explicitly-qualified enums (#1797) (#1798) (4159779)
  • semantics: resolve CheckAggregateSelector's sum/min/max checks context-aware (#1655) (#1661) (2e19750)
  • semantics: resolve CheckMember's enum-qualifier check context-aware (#1634) (#1640) (b7d3148)
  • semantics: resolve ConcreteEnumType's enum checks context-aware (#1644) (#1648) (6c089ab)
  • semantics: resolve context-blind flat ModelIndex lookups across the audited call sites (#1870) (#1882) (c11e29f)
  • semantics: resolve ReferenceDisciplineAnalyzer's classify calls context-aware (#1664) (#1674) (a66ee51)
  • semantics: resolve residual flat-ModelIndex lookups in context (#1863) (#1867) (ccc8a6a)
  • semantics: route remaining ExpressionChecker call sites through EffectiveType (#1614) (#1623) (ca48e38)
  • semantics: scope ModelIndex.PoliciesTriggeredByEvent to the declaring context (#1876) (#1878) (9898b8a)
  • semantics: scope scenario fan-out's policy trigger match to the emitting context (#1854) (#1874) (635d247)
  • semantics: stop double-reporting KOI0402 on a wrapping arithmetic node (#1589) (#1596) (841a3f5)
  • semantics: suppress redundant outer diagnostics for an already-reported nested mismatch (#1525) (#1549) (8972253)
  • semantics: thread context through ValidateQuantity's unit-member Classify call (#1711) (#1713) (beef80c)
  • semantics: validate Neg/Not operand types instead of accepting anything (#1501) (#1517) (aa5924c)
  • semantics: validate unknown member access on Enum receivers and block the Rust EffectiveScope shadow fallthrough (#1498) (#1529) (6170bce)
  • skills: flatten paginated comments before selecting the latest plan comment (#1544) (#1550) (bd419cd)
  • skills: gate merge-pr on failed/pending checks, not on build-and-test success (#1535) (#1541) (7c95069)
  • skills: repair the broken _shared/preconditions.md link in four skills (#1577) (3d75094)
  • studio: adopt mid-edit external committedValue on cancel in useCommittableField (#1398) (#1446) (692ec8c)
  • studio: align the settings gear with the right-rail icons and seat the rail on a 36px grid (#1426) (efebb86)
  • studio: deflake the Source Control header-actions portal test in inspectorController.test.ts (#1448) (#1466) (4caaca4)
  • studio: fall back to a Nerd Font for terminal prompt icon glyphs (#1412) (#1676) (5b685aa)
  • studio: guard the async recents branch capture against reorder/resurrect (#1016) (a6b087f)
  • studio: guard the domain-index and model-index caches against a stale-build TOCTOU race (#1447) (#1456) (5e419c3)
  • studio: key tool-card identity off a per-turn id instead of message position (#1286) (#1645) (b27eec9)
  • studio: lighten --koi-muted to meet WCAG AA contrast on dark card surfaces (#991) (a6b087f)
  • studio: parse git_status porcelain v2 with -z so quoted paths round-trip (#1400) (#1430) (112e81d)
  • studio: polish keyboard-panel styling, a11y, and resolve caching (#1421) (#1626) (d096a4c)
  • studio: precache Studio Web SW's real entry JS/CSS chunks so single-visit offline boot works (#1685) (#1696) (8ce0dcd)
  • studio: raise launcher .lx-kind/.lx-sub tokens to WCAG-AA contrast (#1672) (#1691) (b5c1312)
  • studio: raise launcher .lx-modepill/.lx-mchip.on tokens to WCAG-AA contrast (#1677) (#1698) (98d7d2f)
  • studio: raise the remaining accent-on-accent-tint sites to WCAG-AA contrast (#1704) (#1705) (2f6700b)
  • studio: raise the storybook vitest project's Windows test timeout to stop CI flakes (#1693) (#1697) (2ebf385)
  • studio: remove untracked directory rows on Discard via pathspec-scoped git clean -d (#1399) (#1461) (f0f2c25)
  • studio: render real glossary text instead of [object Object] in GlossaryPanel (#1470) (#1473) (9a5643b)
  • studio: resolve storybook vitest project's react-dom-shim dependency gap (#1686) (#1690) (4f342f6)
  • studio: reuse busy-port MCP fallback until the port frees (#958) (#1669) (94c43da)
  • studio: route saveProjectToDisk through the locked openWorkspace facade (#1404) (#1460) (913beea)
  • studio: seat the collapsed left navigator spine on the right rail's 36px grid (#1435) (89250b6)
  • studio: show an untracked directory row's folder name instead of a blank primary label (#1462) (#1465) (e69a903)
  • studio: show live resolved chords in F1 help overlay (#1627) (#1639) (adb0050)
  • studio: stop nesting the launcher's quick-action button inside role=option (#1673) (#1683) (eb985e3)
  • studio: stop one slow collaboration peer stalling the whole broker (#1822) (#1825) (525a8e1)
  • studio: strip literal NUL bytes from modelTables.ts (#1384) (#1524) (071fbdf)
  • studio: use lang-json in the JSON view and quiet expected error-path test logs (#1475) (af0b57f)
  • templates: guard polyglot demo reference/ folders against drift (#1903) (#1904) (2a2cce1)
  • templates: refresh demo/reference and guard against drift (#1841) (#1898) (0c64ae3)
  • website: adapt blog/rss.xml.ts to starlight-blog 0.28's prefix-required RSS handler (#1431) (#1434) (363b64e)

Performance Improvements

  • emit-core: infer each ConditionalExpr branch's type once in Java/Kotlin/TypeScript/Python (#1369) (#1482) (8eca379)
  • studio: bulk buffer-set → O(N) workspace open/teardown (#1012) (a6b087f)
  • studio: cache the per-turn DisplayIndex in runEditToolStaging (#1135) (#1650) (785da9c)
  • studio: seed the Domain navigator's first-mount fetch (#1397) (#1450) (c31f4c2)
  • studio: share the in-flight glossaryModel fetch with buildDomainIndex (#1405) (#1444) (7b4efb0)
  • studio: unmount the StoreInspector overlay when hidden (#1395) (#1445) (f7fbd02)