Koru logo Koru
Learn Platform Status Blog
The Koru Book

918/1126 tests passing

CORE LANGUAGE / BASIC SYNTAX 22/24
  • ✓ 000 hello world koru
  • ✓ 001 hello world
  • ✓ 002 simple event
  • ✓ 003 event multiline shape
  • ✓ 004 const block module scope
  • ✓ 005 const typed values
  • ✓ 006 const cross target
  • ✓ 007 string escape in flow arg
  • ✓ 020 eol comments
  • ✓ 050 kebab event emits
  • ✓ 051 kebab event field
  • ✓ 052 slash namespace
  • ✓ 053 reject underscore name
  • ✓ 054 println removed
  • ✓ 055 bare import
  • ✓ 056 slash resolves qualified event
  • ✓ 057 reject dot namespace
  • ✓ 058 kebab canonical in pipeline
  • ✓ 059 backtick raw pattern branch
  • ✓ 060 quoted branch with space
  • ✓ 061 backtick bracket equivalence
  • ✓ 062 const array index
  • ✗ 063 modulo operator signed i64 gap
  • ✗ 064 for range loop var i64 mix gap
CORE LANGUAGE / EVENTS FLOWS 34/34
  • ✓ 001 simple flow
  • ✓ 002 multiple flows
  • ✓ 004 void event
  • ✓ 005 void event chained
  • ✓ 006 void pipeline sequence
  • ✓ 007 binding annotations
  • ✓ 008 wildcard branch payload
  • ✓ 010 expression with brace
  • ✓ 011 reject tilde inside flow
  • ✓ 012 reject pub proc
  • ✓ 013 reject function call in branch constructor
  • ✓ 014 pure subflow impl
  • ✓ 015 reject binding on void branch
  • ✓ 016 destructure basic
  • ✓ 017 destructure nested host
  • ✓ 018 destructure effect branch
  • ✓ 019 reject destructure unused field
  • ✓ 020 reject destructure void branch
  • ✓ 021 event arrow return
  • ✓ 022 proc arrow return
  • ✓ 023 subflow arrow return
  • ✓ 024 event arrow record return
  • ✓ 025 continuation handler bare return
  • ✓ 026 slice arrow return
  • ✓ 027 record arrow return proc
  • ✓ 028 loop exit arrow return
  • ✓ 029 subflow bind produce
  • ✓ 030 chained subflow bind produce
  • ✓ 031 midchain bind produce in handler
  • ✓ 032 reject unimplemented event invocation
  • ✓ 033 if bare return produce
  • ✓ 034 recursive if bind produce
  • ✓ 035 destructure effect branch when guard
  • ✓ 036 destructure when guard boolean and
CORE LANGUAGE / LITERALS 7/7
  • ✓ 010 array literal simple
  • ✓ 011 array literal bindings
  • ✓ 012 struct literal inline
  • ✓ 013 array of structs
  • ✓ 014 array literal invalid target
  • ✓ 016 array literal subflow impl
  • ✓ host type injection
CORE LANGUAGE / TYPE SYSTEM 5/15
  • ✓ 102 float type
  • ✓ 103 bool type
  • ✗ 110 generic struct basic
  • ✗ 111 generic struct two params
  • ✗ 112 generic struct nested
  • ✗ 113 generic struct with primitives
  • ✗ 120 instantiate basic
  • ✗ 121 instantiate with named type
  • ✗ 122 instantiate two params
  • ✗ 123 instantiate nested generic
  • ✗ 132 generic type mismatch
  • ✗ 133 instantiation param mismatch
  • ✓ 140 type with const
  • ✓ 141 type with capture
  • ✓ 142 nominal in pipeline
CORE LANGUAGE / CONTROL FLOW 28/30
  • ✗ 008 if print ln branch
  • ✓ multiple branches
  • ✓ binding scopes
  • ✓ shadowing behavior
  • ○ shadowing rejected
  • ✓ labels and jumps
  • ✓ zig keyword escaping
  • ✓ continuation label
  • ✓ nested labels
  • ✓ label scope errors
  • ✓ arbitrary label jumps
  • ✓ label scope isolation
  • ✓ simple server flow
  • ✓ branching flow
  • ✓ nested depth 2
  • ✓ nested depth 3
  • ✓ nested depth 4
  • ✓ nested depth 5
  • ✓ nested depth 5 multi branch
  • ✓ reserved keyword branch
  • ✓ binding in string literal
  • ✓ namespace nested flow
  • ✓ nested labels
  • ✓ multi event chain
  • ✓ namespace labels combo
  • ✓ empty payload branches
  • ✓ loop module qualified
  • ✓ loop imported module
  • ✓ loop in library tapped from user
  • ✓ subflow defines semantics
MODULE SYSTEM / IMPORTS 16/16
  • ✓ 001 file import basic
  • ✓ 002 directory import basic
  • ✓ 003 directory import public
  • ✓ 004 file processor
  • ✓ 005 deep error handling
  • ✓ 006 transitive file import
  • ✓ 007 dir import basic
  • ✓ 008 dir import no pub
  • ✓ 009 dir import dotted
  • ✓ 010 dir import flow
  • ✓ 012 auto import parent
  • ✓ 013 module event globbing
  • ✓ 014 auto import index
  • ✓ 015 sibling in same directory
  • ✓ 016 optional parent
  • ✓ 020 cross module literal arg
MODULE SYSTEM / NAMESPACES 2/2
  • ✓ 001 directory namespace collision
  • ✓ 002 local name priority
MODULE SYSTEM / PACKAGES 1/1
  • ✓ 002 package requires npm
MODULE SYSTEM / FILE LAYOUT 13/15
  • ✓ 001 kjs extension import
  • ✓ 002 k pure contract
  • ✓ 003 directory mixed extensions
  • ✓ 004 index kjs directory source
  • ✓ 005 companion k and kz
  • ✓ 006 reject private event in contract
  • ✓ 007 reject pub event in impl when k exists
  • ✓ 008 pub event in kz alone is fine
  • ✓ 009 entry merges companions
  • ✓ 010 cross target host line routing
  • ✓ 011 vaxis pump realistic
  • ✓ 012 js dispatch binding shadow
  • ✓ 013 js continuation branch dispatch
  • ✗ 014 for template cross target
  • ✗ 015 if template cross target
PARSER 9/10
  • ✓ 050 identity branches
  • ✓ 052 braceless branch constructors
  • ✓ 053 braceless continuation constructors
  • ✓ 060 single line source blocks
  • ✓ 070 nested tilde invocations
  • ✓ 080 nested when guards
  • ✓ 081 unbalanced bracket in payload
  • ✓ 082 unbalanced bracket in args
  • ✗ 083 unclosed paren in capture value
  • ✓ 084 bare module call in kz is host line
COMPILER FEATURES / PARSER 98/107
  • ✓ lenient multiple errors
  • ✓ 001 event multiline shape
  • ✓ 003 conditional imports
  • ✓ 004 branch when clauses
  • ✓ 006 flow checker validation
  • ✓ 007 flow checker missing else
  • ✓ 008 tap nested continuation
  • ✓ 009 source with scope capture
  • ✓ 010 module annotations
  • ✓ 011 optional branch catchall
  • ✓ 012 missing required branch
  • ✓ 013 void event chaining
  • ✓ 014 void chaining nested
  • ? 015 abstract impl
  • ✓ 016 optional branches ignored
  • ✗ 017 catchall end to end
  • ✓ 018 multiline annotations
  • ✓ 019 subflow multiline call
  • ✓ 020 transitive imports
  • ✓ 022 invocation parentheses rules
  • ✓ 023 pipeline chain depth
  • ○ 024 source scope capture
  • ✓ 026 template interpolation
  • ✗ 029 transform requires comptime
  • ✓ 030 comptime flows
  • ✓ 031 annotations in ast
  • ✓ 032 implicit source param
  • ✓ 034 parser wrapper
  • ✓ 035 circular imports
  • ✓ 036 expression parameter
  • ✓ 037 expression scope capture
  • ✓ 038 implicit expr and source
  • ○ 039 file source syntax
  • ✓ 040 expression string capture
  • ✓ 041 expression backslash escape
  • ✓ 042 orisha pattern
  • ✓ 043 inline continuation rejected
  • ✓ 044 source block with branches
  • ✓ 045 source block in pipeline
  • ✓ 046 implicit expression with semicolon
  • ✓ 047 flow step brace is invocation not constructor
  • ✓ 048 loop unhandled branch
  • ✓ 049 parser runtime
  • ✓ 050 expression parameter emit
  • ✓ 051 subflow field shorthand
  • ✓ 052 pattern branches
  • ✗ 053 reject old tap syntax
  • ✓ 054 inline source block args
  • ✓ 056 cross module comptime dispatch
  • ○ 057 cross module comptime callsite fields
  • ✓ 058 cross module comptime return type
  • ✓ 059 reject tilde after pipe forward
  • ✓ 060 proc abstract override
  • ✓ 061 reject zig struct syntax
  • ✓ 062 reject empty brace payload
  • ✓ 063 reject single field braces
  • ✓ 064 parser drops second call after void
  • ✓ 065 reject inline flow in proc
  • ✓ 066 reject pipe forward body on next line
  • ✓ 070 reject terminal before effect at decl
  • ✓ 071 reject terminal before effect at dispatch
  • ✓ 072 effect branch simple decl
  • ✓ 073 effect branch only no terminal
  • ✓ 074 effect branch resume type
  • ✓ 075 effect branch consumer dispatch
  • ✓ 076 optional effect branch decl
  • ✓ 077 effect catchall dispatch
  • ✓ 078 reject redundant when parens
  • ✓ 079 effect branch resume expression
  • ✓ 080 body position expressions
  • ✓ 081 reject bare terminal catchall discard
  • ✓ 082 reject bare effect catchall discard
  • ✓ 083 reject metatype catchall full discard
  • ✓ 084 reject when only required terminal branch
  • ✓ 085 reject when only required effect branch
  • ✓ 086 accept when only optional effect branch
  • ✓ 087 phantom literal suffix
  • ✓ 088 reject redundant punning call site
  • ✓ 089 reject redundant punning path
  • ✓ 090 reject redundant punning constructor
  • ✓ 091 explicit label required when not punnable
  • ✓ 092 effect multi arm decl indented
  • ✓ 093 effect multi arm decl single line
  • ✓ 094 reject bare arg name mismatch
  • ✓ 095 reject bare literal arg
  • ✓ 096 reject bare path name mismatch
  • ✓ 120 reject square bracket phantom
  • ✓ 121 module annotation above import
  • ✓ 122 char literal paren in args
  • ✓ 123 label on subflow rhs panics
  • ✓ 124 if cond and dropped
  • ✓ 125 panic branch decl
  • ✓ 126 panic effect branch decl
  • ✓ 127 panic branch synthesized
  • ✓ 128 reject bare panic marker
  • ✓ 129 reject panic dup name
  • ✓ 130 panic branch strict flag
  • ✗ 131 reject single continuation branch with payload
  • ✓ 132 reject arrow in continuation branch decl
  • ✓ 133 reject bare const decl dot k
  • ✓ 134 effect arm indent must align
  • ✓ 135 effect arms exclusive with resume type
  • ✓ 136 effect arms never nest effects
  • ✓ 137 effect unit payload spelled by omission
  • ✓ 138 reject empty ctor braces
  • ✓ 139 inline block close then branch
  • ✗ 140 variant selector on transform swallowed
COMPILER FEATURES / COMPILATION 15/15
  • ✓ 001 cross module type basic
  • ✓ 002 reject dotted type ref
  • ✓ 003 cross module type basic
  • ✓ 004 cross module type nested
  • ✓ 005 cross module type nullable
  • ✓ 006 std module type ref
  • ✓ 007 parser dump ast
  • ✓ 008 parser benchmark
  • ✓ 010 module annotation serialization
  • ✓ 013 many transforms no cap
  • ✓ 021 void chaining codegen
  • ✓ 022 combined continuation bugs
  • ✓ 023 comptime program return
  • ✓ compiler requires
  • ✓ compiler flags declare
COMPILER FEATURES / FLOW CHECKER 5/6
  • ✓ 009 unused binding error
  • ✓ 011 discard binding ok
  • ○ 012 interpolation use in for loop
  • ✓ 014 reject void redundant terminator
  • ✓ 015 reject branch payload unbound
  • ✓ 016 reject continuation without branch handler
COMPILER FEATURES / CODEGEN 1/1
  • ✓ 002 emitter wrapper
COMPILER FEATURES / EMITTER 5/6
  • ✓ 010 variable naming nested scopes
  • ✓ 011 print ln continuation ordering
  • ✓ 012 for binding in nested range
  • ✓ 013 qualified type in branch
  • ✓ 014 binding param name collision
  • ✗ 015 nested inline effect arg shadow
COMPILER FEATURES / STD LIBRARY 3/3
  • ✓ 020 args basic
  • ✓ 021 args passthrough
  • ✓ 022 args cross target
COMPILER FEATURES / TEMPLATE ENGINE 7/7
  • ✓ 001 substitute arg
  • ✓ 002 if truthy
  • ✓ 003 if else
  • ✓ 004 for over continuations
  • ✓ 005 missing branch comp error
  • ✓ 006 template continues to terminal
  • ✓ 007 if returns terminals
COMPILER FEATURES / SUBFLOW 1/1
  • ✓ 010 plain value branch
SYNTAX / STRUCT CONSTRUCTORS 2/2
  • ✓ 021 field punning shorthand
  • ✓ 025 field punning
ADVANCED FEATURES / COMPTIME 62/77
  • ✓ 001 import registers taps
  • ✓ 002 import registers taps wildcards
  • ✓ 003 implicit destructuring shadowing
  • ✓ 005 annotation inline syntax
  • ✓ 006 event taps
  • ✓ 007 event taps nested
  • ✓ 008 annotation vertical syntax
  • ✓ 009 multiple taps
  • ✓ 010 annotation edge cases
  • ✗ 013 tap chains
  • ✓ 014 taps with labels
  • ✗ 015 when clauses
  • ✓ 017 namespace wildcards
  • ✓ 018 ccp opt in
  • ✓ 020 ccp flag only
  • ✓ 021 build requires basic
  • ✓ 022 multiline params
  • ✓ 023 scoped patterns
  • ✓ 024 shorthand field params
  • ✓ 025 qualified patterns
  • ✓ 026 destination scoping
  • ✓ 027 conditional imports
  • ✓ 028 conditional import flag off
  • ✓ 029 conditional import flag on
  • ✓ 030 build command sh
  • ✓ 031 flow annotations
  • ✓ 032 default override basic
  • ✓ 033 default with dependencies
  • ○ 034 metatype branch requires binding
  • ✓ 035 tap void event transition
  • ✓ 036 tap terminal invocation
  • ✓ 037 tap destination matching
  • ✓ 038 tap terminal void
  • ✓ 039 branch payload requires binding
  • ○ 040 literate annotations
  • ✓ 041 metatype profile binding
  • ✓ 042 metatype transition binding
  • ✓ 043 metatype audit binding
  • ✓ 044 metatype multiple observers
  • ✓ 045 metatype when guards
  • ✓ 046 metatype enum helpers
  • ✓ 047 deps system
  • ✓ 048 branch payload discard ok
  • ✗ 049 invocation meta
  • ✗ 050 build flag check
  • ✗ 051 build variants
  • ✓ 052 optional expression
  • ✓ 053 help discovers commands
  • ✓ 054 help discovers flags
  • ✓ 055 command subcommands
  • ✓ 056 user defined flags
  • ✓ 057 build config basic
  • ✓ 058 build config annotation quotes
  • ✓ 059 opaque tap skipping
  • ✓ 060 tap as library
  • ○ 061 named expression params
  • ✓ 062 tap nested invocation
  • ✓ 063 deps install
  • ○ 090 aspire comptime pure koru fold
  • ✓ 091 aspire comptime loop
  • ✓ 092 table from comptime range
  • ✓ 093 table keep wheel
  • ✓ 094 wheel 30030
  • ✓ 095 wheel gaps
  • ✓ 096 wheel gaps 30030
  • ✓ 097 wheel runtime walk
  • ✓ 098 comptime fold expression
  • ○ 099 aspire koru template facet
  • ○ 100 aspire comptime pgo route order
  • ○ 101 aspire comptime data to liquid
  • ✗ 102 comptime obligation leak
  • ✓ 103 bare stem command dispatch
  • ○ 104 multiline conditional import
  • ○ 105 conditional import expression entry
  • ✓ 106 annotation nested entry delimiters
  • ✓ comptime pass noop
  • ✓ buildstep api
ADVANCED FEATURES / STDLIB 48/51
  • ✓ 001 std if
  • ✓ 002 stdlib if
  • ✓ 003 stdlib if scoped
  • ✓ 010 std for basic
  • ✓ 011 std for nested
  • ✓ 018 template define
  • ✓ 019 template lookup
  • ✓ 020 if inline codegen
  • ✓ 021 for zero overhead
  • ✓ 022 for outer scope
  • ✓ 023 for pipeline
  • ✓ 024 for deeply nested
  • ✓ 025 if deeply nested
  • ✓ 026 for subflow
  • ✓ 027 capture basic
  • ✓ 028 capture multi
  • ✓ 029 template lookup in transform
  • ✓ 030 println basic
  • ✓ 031 println types
  • ✓ 032 println blk basic
  • ✓ 033 println koru scope
  • ✓ 034 capture nested
  • ○ 035 capture multi field
  • ✓ 036 capture nested qualified
  • ✓ 037 nested if simple
  • ✓ 039 if inside for
  • ✓ 040 for inside if
  • ✓ 041 triple nested
  • ✓ 042 capture if for multi
  • ✓ 043 const basic
  • ✓ 044 const simple
  • ✓ 045 capture array index
  • ✓ 046 capture existing struct
  • ✓ 047 if subflow enclosing branches
  • ✗ 048 reject for terminal each
  • ✓ 049 println conditionals
  • ✓ 050 transform impl pattern
  • ✓ 053 println blk conditionals
  • ✓ 054 transform order
  • ✓ 055 nested for simple
  • ✓ 057 capture 2d array index
  • ✓ 060 fs read lines
  • ✓ 070 for with binding
  • ✓ 081 ecology pass ran mechanism
  • ○ 082 ecology custom transform
  • ✓ 090 rings basic
  • ✓ 091 print float format
  • ✓ 092 print blk void chain multiline
  • ✓ 093 print blk void chain inline second
  • ✓ 094 std if nested
  • ✓ 098 capture nested site
ADVANCED FEATURES / KEYWORD 5/5
  • ✓ 001 keyword basic
  • ✓ 002 keyword collision
  • ✓ 003 keyword explicit
  • ✓ 004 keyword requires pub
  • ✓ 005 keyword expression
ADVANCED FEATURES / PHANTOM TYPES 83/95
  • ✓ 006 cleanup consumed by disposal
  • ✓ 007 use after disposal
  • ✓ 008 obligation escapes via interface
  • ✓ 009 universal wildcard metatype
  • ✓ 010 module wildcard metatype
  • ✓ 011 auto discharge multiple
  • ✓ 012 auto discharge explicit with multiple
  • ✓ 013 auto discharge explicit ok
  • ✓ 014 scope for loop inner
  • ✓ 015 scope for loop outer
  • ✓ 016 scope nested
  • ○ 017 scope label loop
  • ✓ 018 auto discharge escaped obligation
  • ✓ 019 auto discharge branch constructor
  • ○ 020 auto discharge void event
  • ✓ 021 auto discharge multiple resources
  • ✓ 022 if manual both branches
  • ✓ 023 if auto both branches
  • ✓ 024 if hybrid manual auto
  • ✓ 025 auto discharge disabled
  • ✓ 026 auto discharge warn
  • ✓ 027 db transaction pattern
  • ✓ 028 ambiguous without default
  • ✓ 029 module qualified phantom states
  • ✓ 030 taps with auto discharge
  • ✓ 031 tap binding substitution
  • ✓ 032 nested for scopes
  • ✓ 033 phantom state mismatch
  • ✓ 034 unknown phantom module
  • ✓ 035 autodischarge prefers void
  • ✓ 036 autodischarge no void candidate
  • ✓ 037 default discharge must be void
  • ✓ 038 cleanup obligation satisfied
  • ○ 039 transition metatype
  • ✓ 040 undisposed nested obligation
  • ✓ 041 auto discharge single
  • ✓ 042 metatype binding scope
  • ✓ 043 auto discharge none
  • ✓ 044 for manual done ok
  • ✓ 045 for manual each error
  • ✓ 046 for auto done ok
  • ✓ 047 nested if in for
  • ✓ 048 nested for in if
  • ✓ 049 default discharge annotation
  • ✓ 050 union accepts either state
  • ✓ 051 union with consume marker
  • ✓ 052 escape field name mismatch
  • ✓ 053 for loop obligation escape
  • ✓ 054 optional branch obligation
  • ○ 055 auto discharge cascade
  • ✓ 056 union per member consume marker
  • ✓ 057 auto discharge emission parity
  • ✓ 058 reject issue on input
  • ✓ 059 reject consume on output
  • ✗ 060 reject state mismatch on input
  • ✓ 061 inline obligation cascade
  • ✓ 062 reject identity struct mismatch
  • ✓ 063 phantom state on primitive
  • ✓ 064 reject phantom primitive mismatch
  • ✓ 065 phantom compound unit
  • ✓ 066 phantom literal suffix callsite
  • ✓ 067 reject bare literal at phantom param
  • ✓ 068 phantom obligation on primitive string
  • ✓ 069 reject undischarged string obligation
  • ✓ 070 auto discharge strict convention
  • ✓ 071 aspire chain autodischarge
  • ✓ 073 label fold borrow outer own
  • ✓ 074 obligation carried through back edge
  • ✓ 075 back edge drops obligation
  • ✓ 076 obligation seed via consuming param
  • ✓ 077 reject carry consume in for
  • ✗ 078 reject dropped carried obligation
  • ✓ 079 reject double consume carried
  • ✓ 080 reject consume outside obligation in loop
  • ✓ 081 container move i64 in loop
  • ✓ 082 element obligation move in for
  • ✓ 083 element obligation move through loop
  • ✓ 084 nested loop carries outer obligation
  • ✓ 085 obligation held across back edge
  • ✓ 086 inline nested fold outer obligation
  • ○ 087 cross module qualified state unifies
  • ○ 088 reject bare state outside declaring module
  • ○ 089 taint tracking capability
  • ✓ 090 auto discharge dotted disposer
  • ✗ 091 auto discharge disable leaks through borrow
  • ✓ multiple cleanup paths
  • ✓ multiple resources cleanup
  • ✗ multiple resources partial cleanup
  • ✓ state variable wildcard
  • ✓ state variable constrained accepts
  • ✓ state variable constraint violation
  • ✓ state variable chaining
  • ○ phantom state mismatch
  • ✓ phantom state valid
  • ✓ multiple errors
ADVANCED FEATURES / OBLIGATION STRESS 8/18
  • ✓ 002 if else discharges then drops
  • ✓ 003 if then discharges else drops strict
  • ✓ 004 loop body discharges outer
  • ✓ 005 nested loop inner discharges outer
  • ✗ 006 err branch leaks opened resource
  • ✗ 007 chain second err leaks first resource
  • ✗ 020 instance ambiguous discharge
  • ✗ 021 instance no explicit free
  • ✗ 022 disconnect before commit
  • ✗ 023 disconnect before rollback
  • ✓ 024 stale view after take
  • ✓ 025 stale tx after commit
  • ✓ 040 subflow drops obligation on input
  • ✗ 042 read file no free
  • ✗ 043 read stdin no free
  • ✗ 044 taint stripped at untyped param
  • ✓ 045 taint stripped at echo boundary
  • ✗ 046 continuation after borrow drops obligation
ADVANCED FEATURES / OBLIGATION MATRIX 6/6
  • ✓ 001 string view drop single
  • ✓ 002 string instance drop single
  • ✓ 003 string instance drop discard branch
  • ✓ 004 string view drop multibranch
  • ✓ 005 transaction active nonvoid only
  • ✓ 006 connection active drop single
ADVANCED FEATURES / TYPE SYSTEM 5/9
  • ✓ 001 struct basic
  • ✓ 002 struct keyword
  • ✓ 003 struct pub keyword
  • ✓ 004 struct in flow
  • ✓ 005 type declaration
  • ✗ 006 nominal binding check
  • ✗ 007 registry field comprehension
  • ✗ 008 comprehension rows vec3
  • ✗ 009 mixed literal comprehension rows
ADVANCED FEATURES / AUTO PROC 3/3
  • ✓ 001 basic passthrough
  • ✓ 002 phantom transition
  • ✓ 004 uncalled event ok
ADVANCED FEATURES / PATTERN BRANCHES 3/4
  • ○ 003 pattern dispatch
  • ✓ 006 http routing
  • ✓ 008 pattern syntax
  • ✓ 011 http routing
ADVANCED FEATURES / SUBFLOWS 12/16
  • ✓ subflow immediate
  • ✓ subflow flow
  • ✓ subflow chained
  • ✓ subflow multi continuation
  • ✓ subflow invalid branch
  • ✓ subflow with taps
  • ✓ nested recursive label
  • ✓ subflow with taps pure koru
  • ✗ 005 static router nested
  • ✓ 007 subflow inline body
  • ✓ 009 cross module impl inline body
  • ✗ 010 orisha router showcase
  • ✗ 012 nested router
  • ✗ 013 orisha router rejects terminal
  • ✓ 015 subflow mid chain bare return
  • ✓ 016 subflow bind then construct
ADVANCED FEATURES / OPTIONAL BRANCHES 9/10
  • ✓ 001 basic catchall
  • ✓ 002 explicit plus catchall
  • ✓ 003 ignored no catchall
  • ✓ 004 shape error
  • ✓ 005 all optional
  • ✓ 006 api evolution
  • ✓ 007 when guards
  • ○ 008 event pump
  • ✓ 009 no handler silent
  • ✓ 010 catchall audit binding
ADVANCED FEATURES / TAPS OBSERVERS 6/8
  • ✓ branch coverage complete
  • ✓ void event no branches
  • ✓ multiple events mixed
  • ✗ tap when clause filtering
  • ✓ tap shorthand syntax
  • ○ multi branch tap
  • ✓ meta event taps
  • ✓ tap on bare return
ADVANCED FEATURES / INTERCEPTORS 0/4
  • ○ 001 basic intercept
  • ○ 003 single interceptor error
  • ○ 004 opaque protection
  • ○ 010 no function calls in payload
ADVANCED FEATURES / PHANTOM TYPES 1/1
  • ✓ 020 label jump obligation
ADVANCED FEATURES / VARIANTS 10/15
  • ✓ variants basic
  • ○ variant compilation
  • ✓ blur variants
  • ○ gpu blur real
  • ✓ zig and gpu variants
  • ✓ gpu compiler pass
  • ○ actual glsl compilation
  • ○ gpu execution
  • ✓ mlir cpu variant
  • ✓ mlir cpu loop
  • ✓ bare proc call site fails
  • ✓ bare proc no call site succeeds
  • ✓ subflow variant parser accepts
  • ✓ subflow variant picks no
  • ✗ subflow variant with continuations
ADVANCED FEATURES / TEMPLATING 2/4
  • ✓ 001 basic interpolation
  • ✓ 002 conditionals
  • ○ 003 source metadata
  • ○ 004 optimized codegen
ADVANCED FEATURES / KERNEL 26/30
  • ✓ 001 shape basic
  • ○ 002 array init
  • ✓ 003 pairwise basic
  • ○ 004 dynamic shape
  • ✓ 005 user event binding
  • ✓ 010 layout metadata
  • ✓ 020 nbody benchmark
  • ✓ 021 multiline source
  • ✓ 022 singleline shape bug
  • ✓ 023 require computed in pipeline
  • ✓ 040 self basic
  • ✓ 042 pairwise symmetric
  • ✓ 043 pairwise other readonly
  • ✓ 050 reject for in kernel
  • ✓ 051 reject branch constructor in kernel
  • ✗ 052 reject user event in kernel
  • ✗ 053 reject stdlib event in kernel
  • ✓ 054 require computed branch
  • ✓ 060 multi op fusion
  • ✓ 070 step basic
  • ✓ 080 multiline chained computed
  • ✓ 090 nbody multistep
  • ✓ 091 nested kernel fusion
  • ✓ 092 kernel fusion oracle
  • ✓ 100 self mlir generated
  • ✓ 101 self mlir chained
  • ✓ 102 self mlir under step
  • ✓ 103 self mlir gpu blob
  • ✓ 104 reject f64 gpu kernel
  • ✓ 105 self mlir gpu runs
ADVANCED FEATURES / TESTING 10/10
  • ✓ 001 test syntax
  • ✓ 002 mock multiple branches
  • ✓ 003 pure event no mock
  • ✓ 004 constant event auto inline
  • ✓ 005 impure event error
  • ✓ 006 impure event fixed
  • ✓ 007 failing test
  • ✓ 008 complex flow test
  • ✓ 009 cross module mock
  • ✓ 010 unexpected branch fails
CONTROL FLOW 17/22
  • ✓ 051 expand stdlib wrap
  • ✓ 052 expand with continuations
  • ✓ 056 expand basic
  • ○ 061 auto thread pipeline
  • ✓ 095 recursive value event
  • ✓ 096 if value return subflow
  • ✓ 097 if nested step under return switch
  • ✗ 099 sequential for phases under capture
  • ✓ 101 loopvar in complex capture array write
  • ✓ 102 captured cross field snapshot
  • ○ 120 expand long path overflow KNOWN BUG
  • ✓ 121 tail self loop parallel assign
  • ✓ 122 tail self loop parallel assign multiarg
  • ✓ 123 mutual tail loop crossref reargs
  • ✓ 124 multibind produce tree recursion
  • ✓ 125 nested if arm produce
  • ✗ 126 capture as discard binding
  • ✓ 127 nested call argument
  • ✗ 128 call in if condition
  • ✓ 129 call in produce expression
  • ✓ 130 call in captured field
  • ✓ 131 call in for bound
RUNTIME FEATURES 73/82
  • ✓ 060 fmt blk autodispose
  • ✓ 061 phantom autodispose
  • ✓ 070 effect branch minimal
  • ✓ 071 effect branch multifire void
  • ✓ 072 effect branch multifire with terminal
  • ✓ 073 effect branch multiple kinds
  • ✓ 074 effect branch single fire with terminal
  • ✓ 075 effect branch inside terminal body
  • ✓ 076 effect branch nested in void chain
  • ✓ 077 effect branch optional unhandled
  • ✓ 078 effect branch catchall runtime
  • ✓ 079 effect branch struct payload
  • ✓ 080 effect branch phantom payload
  • ✓ 081 effect branch labeled loop
  • ✓ 082 effect branch resume value
  • ✓ 083 effect branch resume binding
  • ✓ 084 effect branch resume numeric
  • ✓ 085 effect branch resume arithmetic
  • ✓ 086 effect branch iter slice
  • ✓ 087 effect branch when guard
  • ✓ 088 effect branch when guard struct field
  • ✓ 089 effect when with unguarded fallback
  • ✓ 090 template variant passthrough
  • ✓ 091 template variant interpolation
  • ✓ 092 template variant conditional
  • ✓ 093 template per call basic
  • ✓ 094 template per call arg substitution
  • ✓ 095 template per call range expr
  • ✓ 096 effect branch void payload
  • ✓ 097 required terminal must be handled
  • ○ 098 capture with effect branch event
  • ✓ 100 effect obligation discharged in firing
  • ✓ 101 wip for as template effect
  • ✓ 102 effect wildcard payload
  • ✓ 103 effect obligation cannot escape
  • ✓ 104 effect branch cannot discharge outer
  • ✓ 105 effect payload in obligation transfer
  • ✓ 106 effect resume out emits correct zig
  • ✓ 107 effect resume cannot issue obligation
  • ✓ 108 effect handler autodischarge emits member
  • ✓ 109 plain event from handler flow
  • ✓ 110 effect branch single void cross target
  • ✓ 111 effect branch multikind cross target
  • ✓ 112 effect branch arg name mismatch cross target
  • ✓ 113 effect handler cannot recurse producer
  • ✓ 114 effect multi arm output
  • ✓ 115 effect event via subflow
  • ✓ 116 effect resume arrow producer
  • ✓ 117 effect resume produce is call
  • ✓ 118 bench sum range xor
  • ✓ 119 bench multi kind dispatch
  • ✓ 120 bench sum range foldable
  • ✓ 121 bench filter map reduce
  • ✓ 122 reject construct glyph on resume effect
  • ✓ 123 reject chain glyph introduces value
  • ✓ 124 effect arm cannot issue obligation
  • ✓ 125 reject produce glyph on multi arm effect
  • ✓ 126 reject unknown resume arm
  • ✓ 127 effect arm discharge emits correct zig
  • ✓ 128 effect payloadless multi arm
  • ✓ 129 effect record payload arm
  • ✓ 130 effect subflow fires void arm
  • ✓ 131 effect subflow generator for each
  • ✓ 132 effect subflow plain resume bind
  • ✓ 133 effect subflow multi arm resume
  • ✓ 134 effect subflow payloadless multi arm
  • ✓ 135 effect subflow record payload arm
  • ✓ 136 effect subflow obligation in firing
  • ✓ 137 effect subflow obligation cannot escape
  • ✓ 138 effect arm call outside impl rejected
  • ✓ 139 effect subflow record payload fire
  • ✓ 140 effect record fire requires named fields
  • ✗ 141 child run nonzero exit stderr term
  • ✗ 142 effect inliner singleline body discard
  • ✗ 143 effect branch borrow escapes firing
  • ✓ 144 effect subflow optional arm handled
  • ✓ 145 effect subflow optional arm omitted noop
  • ✗ 146 effect subflow optional resume if presence
  • ✗ 147 effect subflow optional when presence
  • ✗ 148 effect proc optional resume nullable alias
  • ✗ 149 effect optional resume unguarded fire
  • ✗ 150 effect required arm presence test rejected
RUNTIME FEATURES / BUDGETED INTERPRETER 0/7
  • ? 001 basic budget tracking
  • ? 002 budget exhaustion
  • ? 003 handle pool tracking
  • ? 004 auto discharge
  • ? 005 exhaustion with handles
  • ? 006 identity branch phantom
  • ? 010 shape contract
RUNTIME FEATURES / PURITY CHECKING 8/9
  • ✓ 007 event purity from impure impl
  • ✓ 008 pure proc annotation
  • ✓ 009 unannotated proc impure
  • ○ 011 opaque procs
  • ✓ 012 subflow locally pure
  • ✓ 013 pure on event redundant
  • ✓ 014 subflow transitive pure
  • ✓ 015 event purity from pure impl
  • ✓ 016 subflow impure
RUNTIME FEATURES / PERFORMANCE 0/20
  • ? array by reference
  • ○ 001 profile metatype
  • ○ 002 profile release
  • ○ 003 profiler loop
  • ? 006 rings vs channels
  • ? 007 simple loop
  • ○ 008 event taps overhead
  • ? 009 multi consumer async
  • ○ 010 threading library
  • ? 011 loop optimization basic
  • ○ 012 loop optimization nested
  • ○ 013 loop optimization work
  • ? generic ring type
  • ? generic ring actual
  • ? ring with taps
  • ? ring with when filter
  • ? when at callsite
  • ? ring with multitaps
  • ⏭ dead code elimination
  • ⏭ handler caching
RUNTIME FEATURES / COORDINATION 7/11
  • ✓ 001 user coordinator
  • ○ 003 impl override only
  • ○ 004 impl with delegation
  • ✓ 005 impl no implementation
  • ✓ 006 coordinator timing
  • ○ 007 tap visibility delegation
  • ✓ 008 pipeline profiling
  • ✗ 009 composed timing
  • ✓ 010 ast dump stages
  • ✓ 011 coordinator timing
  • ✓ custom coordinator bug
RUNTIME FEATURES / RUNTIME 0/36
  • ? 002 parser userland
  • ? 012 registry dispatch test
  • ? 013 interpreter test
  • ? 014 interpreter benchmark
  • ? 015 interpreter dataflow
  • ? 016 interpreter conditionals
  • ? 017 expr evaluator
  • ? 018 runtime if
  • ? 019 interpreter if
  • ? 020 interpreter if e2e
  • ? 021 if arg inspection
  • ? 022 if expression parsing
  • ? 023 registry scope basic
  • ? 024 registry scope composition
  • ? 025 interpreter benchmark real
  • ? 026 interpreter run event
  • ? 030 honest benchmark
  • ? 035 interpreter binding args
  • ? 036 interpreter for loop
  • ○ 037 interpreter field types
  • ? 038 interpreter nested loop benchmark
  • ? 039 runtime eval scope
  • ? 040 registry scope dotted
  • ? 041 registry typed args
  • ? 042 registry scope debug
  • ? 043 runtime run scope
  • ? 044 runtime run budget
  • ? 045 runtime run event denied
  • ? 046 runtime run scope not found
  • ○ 047 runtime run parse error
  • ? 048 runtime run fail fast
  • ? 049 runtime run lenient
  • ? 050 runtime eval autodischarge
  • ? 051 runtime run budget autodischarge
  • ? 052 interpreter identity result
  • ? 053 registry alias
RUNTIME FEATURES / RESOURCE BRIDGE 2/2
  • ✓ 001 bridge basic
  • ✓ 002 cross session discharge
INTEGRATION TESTING / NEGATIVE TESTS 34/36
  • ✓ 001 unclosed input brace
  • ✓ 002 unclosed branch brace
  • ✓ 005 missing event name
  • ✗ 011 invalid module qualifier
  • ✓ 012 multiple defaults error
  • ✓ 013 ambiguous override error
  • ✓ 021 duplicate branch names
  • ✓ 022 double pipe branch
  • ✓ 023 branch without name
  • ✓ 030 missing colon in field
  • ✓ 031 missing comma between fields
  • ✓ 032 numeric field name
  • ✓ 033 empty type after colon
  • ✓ 050 import empty path
  • ✓ 052 reject tilde import
  • ✓ 053 reject quoted import
  • ✓ 061 unknown branch in flow
  • ✓ 062 undefined event call
  • ✓ 063 missing event param
  • ✓ 064 extra event param
  • ✓ 065 pub proc double tilde
  • ⏭ 066 duplicate proc
  • ✓ 067 orphan loop jump
  • ✓ 069 string type
  • ✓ 070 eof in subflow impl
  • ✓ 071 module wildcard concrete
  • ✓ 072 event wildcard concrete
  • ✓ 073 universal wildcard concrete
  • ✓ 074 std log event name
  • ✓ 080 comment inside chain
  • ✓ 081 mock shape mismatch
  • ✓ 090 unknown label error
  • ✓ 100 effect decl handled as terminal
  • ✓ 101 terminal decl handled as effect
  • ✓ 102 resume type mismatch
  • ✓ 103 resume body discard
INTEGRATION TESTING / NEGATIVE TESTS / 020 parse errors 1/1
  • ✓ missing event keyword
INTEGRATION TESTING / NEGATIVE TESTS / 034 type errors 1/1
  • ✓ undefined event
INTEGRATION TESTING / BUG REPRODUCTION 4/4
  • ✓ 001 slice type imported module
  • ✓ 002 array literal imported type
  • ✓ 003 stdlib runtime import
  • ✓ 007 module qualified bug
INTEGRATION TESTING / VALIDATION 7/7
  • ✓ import io
  • ✓ import dotdot forbidden
  • ✓ import unknown alias
  • ✓ import lib root
  • ✓ import rejects dollar prefix
  • ✓ import explicit extension
  • ✓ field shadows event name
STDLIB / STRING 14/15
  • ✓ 001 string basic
  • ✓ 002 string ownership
  • ✓ 003 auto free unused string
  • ✓ 004 reject write on view
  • ✓ 005 reject use after free
  • ✓ 006 reject double free
  • ✗ 007 reject dangling slice
  • ✓ 008 parse int
  • ✓ 009 contains
  • ✓ 010 index of
  • ✓ 011 substring
  • ✓ 012 chained multi resource discharge
  • ✓ 013 from int
  • ✓ 014 auto free string
  • ✓ 020 split stream
STDLIB / FMT 4/4
  • ✓ 001 fmt ln basic
  • ✓ 002 fmt ln nested
  • ✓ 003 fmt ln mid chain result collision
  • ✓ 004 fmt ln chained expand collision
STDLIB / IO 3/4
  • ✗ 001 io println cross target
  • ✓ 002 effect under obligation drops output
  • ✓ 003 read lines under string instance
  • ✓ 004 read lines under scalar anchor
STDLIB / REGEX 16/16
  • ✓ 001 match basic
  • ✓ 002 match nested in for
  • ✓ 003 match binding
  • ✓ 004 match alternation scale
  • ✓ 005 match groups destructure
  • ✓ 006 match groups whole binding
  • ✓ 007 reject groups field mismatch
  • ✓ 008 reject group under quantifier
  • ✓ 009 reject group under alternation
  • ✓ 010 reject groups discarded
  • ✓ 011 scan global match gap
  • ✓ 012 nested match destructure
  • ✓ 013 scan basic
  • ✓ 014 scan no match
  • ✓ 015 scan reject terminal
  • ✓ 016 scan multi pattern pinned
STDLIB / SWITCH 4/4
  • ✓ 001 char single
  • ✓ 002 char range
  • ✓ 003 char set
  • ✓ 004 day08 switch
STDLIB / FS 6/7
  • ✓ 001 read lines effect
  • ✓ 002 stdin lines
  • ✓ 003 lines match capture
  • ✓ 004 capture across handler boundary
  • ✓ 005 cell ctx deep nesting
  • ✓ 006 subflow in effect branch
  • ✗ 007 read ln leaks
STDLIB / COLLECTIONS 23/27
  • ✓ 001 list new flow
  • ✗ 002 list const module
  • ✓ 003 list len in expr
  • ✓ 004 list new free
  • ✓ 005 list push len
  • ✓ 006 list auto discharge
  • ✓ 007 list new transform
  • ✓ 008 list pop
  • ✓ 009 list pop empty
  • ✓ 010 list get
  • ✓ 011 list get oob
  • ✓ 012 list for each index
  • ✗ 013 list loop autodischarge
  • ✓ 014 list push in loop
  • ✓ 015 list stream blocked
  • ✓ 016 list stream accumulate
  • ✓ 017 grid new set count
  • ✓ 018 set dedup count
  • ✓ 019 set under capture
  • ✓ 020 set under capture loop
  • ✓ 021 map trunk
  • ✓ 022 map get missing
  • ✓ 023 map under capture
  • ✓ 024 string map trunk
  • ✓ 025 string map under capture
  • ✗ 026 map generic dispatch gap
  • ✗ 027 obligation param qualified phantom
STDLIB / TRELLIS 3/5
  • ✓ 001 trellis enforce conforming
  • ✓ 002 trellis pairwise outside init
  • ✓ 003 trellis check categorize
  • ✗ 010 trellis census per flow
  • ✗ 011 trellis variant guard
STDLIB / STORE 15/21
  • ✓ 001 store create stored watch
  • ✓ 002 store watch guard producer if
  • ✓ 003 store interceptor cross store sync
  • ✓ 004 store no torn state
  • ✓ 005 store plural query watch
  • ✓ 006 store reject watch body ambient context
  • ✓ 007 store reject take leak
  • ✓ 008 store update where
  • ✓ 009 store chain envelope multi write
  • ✓ 010 store multi watch same field
  • ✓ 011 store insert capacity full branch
  • ✓ 012 store reject cascade cycle
  • ✓ 013 store cross store guard closure
  • ✓ 014 store stripe scan firing
  • ○ 015 store take give back disposal
  • ○ 016 store lifecycle inserted removed
  • ○ 017 store backend arms di
  • ○ 018 store declared key addressing
  • ○ 019 store batch insert fused cascade
  • ○ 020 store compound field types
  • ✓ 021 store f64 scalar columns
NESTING SWEEP 29/30
  • ✓ 010 capture under flow head
  • ✓ 011 capture under scalar
  • ✓ 012 capture under obligation
  • ✓ 013 capture under effect
  • ✓ 014 capture under for each
  • ✓ 015 capture under capture
  • ✓ 020 readlines under flow head
  • ✓ 021 readlines under scalar
  • ✓ 022 readlines under obligation
  • ✗ 023 readlines under effect
  • ✓ 024 readlines under for each
  • ✓ 025 readlines under capture
  • ✓ 030 foreach under flow head
  • ✓ 031 foreach under scalar
  • ✓ 032 foreach under obligation
  • ✓ 033 foreach under effect
  • ✓ 034 foreach under for each
  • ✓ 035 foreach under capture
  • ✓ 040 ifcond under flow-head
  • ✓ 041 ifcond under scalar
  • ✓ 042 ifcond under obligation
  • ✓ 043 ifcond under effect
  • ✓ 044 ifcond under for-each
  • ✓ 045 ifcond under capture
  • ✓ 050 strbranch under flow head
  • ✓ 051 strbranch under scalar
  • ✓ 052 strbranch under obligation
  • ✓ 053 strbranch under effect
  • ✓ 054 strbranch under for each
  • ✓ 055 strbranch under capture
EVENT GLOBBING 4/10
  • ○ 000 permissive event name parsing
  • ✓ 001 glob declaration syntax
  • ✓ 002 glob invocation match
  • ○ 003 glob suffix validation
  • ○ 005 glob with variants
  • ✓ 010 generics bracket syntax
  • ✓ 011 generics param extraction
  • ○ 020 generics ring buffer e2e
  • ○ 030 ai error explanation
  • ○ 031 ai test analysis
CHALLENGES 1/1
  • ✓ 002 effect branch capture shadow
AOC 2015 38/44
  • ✓ 011 day01 part1
  • ✓ 012 day01 part2
  • ✓ 021 day02 part1
  • ✓ 022 day02 part2
  • ✓ 031 day03 part1
  • ✓ 032 day03 part2
  • ✓ 041 day04 part1
  • ✓ 042 day04 part2
  • ✓ 051 day05 part1
  • ✗ 052 day05 part2
  • ✓ 061 day06 part1
  • ✓ 062 day06 part2
  • ✗ 071 day07 part1
  • ✓ 081 day08 part1
  • ✓ 082 day08 part2
  • ✓ 091 day09 part1
  • ✓ 092 day09 part2
  • ✗ 101 day10 part1
  • ✓ 111 day11 part1
  • ✓ 121 day12 part1
  • ✓ 122 day12 part2
  • ✓ 131 day13 part1
  • ✓ 132 day13 part2
  • ✓ 141 day14 part1
  • ✓ 142 day14 part2
  • ✓ 151 day15 part1
  • ✓ 152 day15 part2
  • ✓ 161 day16 part1
  • ✓ 162 day16 part2
  • ✓ 171 day17 part1
  • ✓ 172 day17 part2
  • ✓ 181 day18 part1
  • ✓ 182 day18 part2
  • ✗ 191 day19 part1
  • ✗ 192 day19 part2
  • ✓ 201 day20 part1
  • ✓ 202 day20 part2
  • ✓ 211 day21 part1
  • ✓ 212 day21 part2
  • ✗ 221 day22 part1
  • ✓ 231 day23 part1
  • ✓ 241 day24 part1
  • ✓ 242 day24 part2
  • ✓ 251 day25 part1
EXAMPLES SHOWCASE 1/1
  • ✓ HELLO WORLD
EXAMPLES SHOWCASE / LANGUAGE SHOOTOUT 29/30
  • ✓ 01 unused connection
  • ✓ 02 uncommitted tx
  • ✓ 03 valid commit
  • ✓ 04 valid rollback
  • ✗ 05 commit without close
  • ✓ 06 multiple execs
  • ✓ 07 serial transactions
  • ✓ 08 close without transaction
  • ✓ 09 empty transaction
  • ✓ 10 wrong base type
  • ✓ 11 wrong base type reverse
  • ✓ 12 wrong base type zig catches
  • ✓ 13 wrong base type reverse zig catches
  • ✓ 14 open tx commit close
  • ✓ 15 open tx auto close
  • ✓ 16 open tx rollback close
  • ✓ 17 open tx multiple execs
  • ✓ 18 open tx empty commit
  • ✓ 19 open tx close early
  • ✓ 20 open tx abandoned
  • ✓ 21 open tx forgot close
  • ✓ 22 open tx exec no finish
  • ✓ prime sieve
  • ✓ prime sieve bitfield
  • ✓ prime sieve wheel
  • ✓ prime sieve odds
  • ✓ prime sieve generated
  • ✓ bloom filter field
  • ✓ prime sieve timed loop
  • ✓ prime sieve reuse loop
WATCHDOG SELFTEST 1/1
  • ✓ 001 runtime infinite loop
Learn / ADVANCED FEATURES / PATTERN BRANCHES

advanced features / pattern branches

✓ 3 passing ○ 1 planned

Lessons

1 ○ Planned
003 pattern dispatch — Requires a transform to handle pattern branches.
2 ✓ Passing
006 http routing
3 ✓ Passing
008 pattern syntax
4 ✓ Passing
011 http routing
Koru logo Koru

The Event Continuation Language

Community

Contributing GitHub Discord

Resources