ludic/examples/rejected
Orkuncakilkaya 8cf4b3fed6 fix(lang): the action drain is the program's; --check runs every check a build makes; a registry key named count is refused; name lookups are tables
- the function that calls every reducer (and the action queue) is written in the program's own
  file: in the first action's file it belonged to that module, depended on every module with a
  reducer, and joined a game's modules into one 69-module cycle (examples/actions/modules and a
  ludic deps case hold it); the state instances, the queue and the reducers make no deps edges
- ludicc --check / ludic build --check lower the program too and write nothing, so the code
  writer's refusals are in it: a bind to a function that is gone, an unknown name (and the checker
  now refuses fn <missing> itself); rejects bind_missing_fn, unknown_name, registry_count_key
- def R count is refused: its constant would be PREFIX_COUNT, the registry's size
- a file's module, package, trust and numbers-float are tables, and from the check on the lookups
  of functions, enums, records, globals and externs are too (tagged enums kept as a list): Maroon
  Lake's check-only build went from about 20 s to 7 s including lowering, its IR from about 2
  minutes to under 10 s; duplicate declarations are found by table, not a pair of loops
- threads.ludic's pool check gives each call a little work, so a busy machine cannot run them all
  on the caller before a worker wakes (it failed one run in three under load)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 23:34:43 +03:00
..
closed_kit feat(lang): open registry - other modules' defs, in an order imports cannot change 2026-09-25 04:28:34 +03:00
craft_kit feat(lang): def REGISTRY from "file.lres" - a game fills an open registry from its own file 2026-09-25 07:22:05 +03:00
data feat(lang): L9 resource files - registry ... from 2026-09-24 14:00:20 +03:00
exported_events feat(lang): a module's private records and events are its own 2026-09-25 11:02:48 +03:00
exported_kinds feat(lang): a module's private records and events are its own 2026-09-25 11:02:48 +03:00
exported_twins feat(lang): a module's private names are its own 2026-09-25 07:08:05 +03:00
hidden_kit feat(lang): open registry - other modules' defs, in an order imports cannot change 2026-09-25 04:28:34 +03:00
layer_cycle feat(lang): layers - module flow in layer app uses base, items 2026-09-25 12:54:15 +03:00
layer_reach feat(lang): layers - module flow in layer app uses base, items 2026-09-25 12:54:15 +03:00
port_clock feat(lang): ports - port Clock { ... } in a module, bind Clock { ... } in the app 2026-09-25 04:20:12 +03:00
private_bank wip(0.S3): ui blocks, scene on enter/exit, hooks, machines over a state's field, namespace and engine-system injection; a reference out of a read-only state or a module let is read-only; deps counts writes into another module's state; the rejected examples hold states 2026-09-25 14:49:03 +03:00
private_kit feat(lang): L5 generic records and functions 2026-09-24 02:21:15 +03:00
state_component_ro feat(lang): 0.S - components take states in their header; migrate writes them, never inside a name, never outside the programs given, never into a package's state 2026-09-25 17:11:15 +03:00
uses_cycle feat(lang): module NAME uses A, B - a module reaches only the modules it names 2026-09-25 04:06:45 +03:00
uses_pkg_mech wip(0.S3): ui blocks, scene on enter/exit, hooks, machines over a state's field, namespace and engine-system injection; a reference out of a read-only state or a module let is read-only; deps counts writes into another module's state; the rejected examples hold states 2026-09-25 14:49:03 +03:00
uses_r3d_mech feat(lang): packages count under uses; a port of defaults may go unbound 2026-09-25 05:36:11 +03:00
uses_valley feat(lang): module NAME uses A, B - a module reaches only the modules it names 2026-09-25 04:06:45 +03:00
alias_arity.ludic feat(lang): L6 namespaces declared in Ludic - alias 2026-09-24 02:40:57 +03:00
alias_twice.ludic feat(lang): L6 namespaces declared in Ludic - alias 2026-09-24 02:40:57 +03:00
bad_recipes.lres feat(lang): def REGISTRY from "file.lres" - a game fills an open registry from its own file 2026-09-25 07:22:05 +03:00
bind_missing_fn.ludic fix(lang): the action drain is the program's; --check runs every check a build makes; a registry key named count is refused; name lookups are tables 2026-09-25 23:34:43 +03:00
builtin_name.ludic fix(lang): a function named like a compiler built-in is refused; reseed 2026-09-24 22:09:29 +03:00
component_no_template.ludic feat(lang): UI components as files - component Name { ... } beside Name.xml and Name.lss 2026-09-24 16:50:12 +03:00
default_missing.ludic feat(lang): L11 views and templates - the UI is markup, not code 2026-09-24 15:58:47 +03:00
default_unknown.ludic feat(lang): L11 views and templates - the UI is markup, not code 2026-09-24 15:58:47 +03:00
dispatch_unknown.ludic feat(lang): 0.R1 - actions and reducers 2026-09-25 19:13:46 +03:00
duplicate_const.ludic feat(lang): a name is defined once, a local once per block, and a result is always returned 2026-09-23 23:55:20 +03:00
duplicate_property.ludic feat(lang): a name is defined once, a local once per block, and a result is always returned 2026-09-23 23:55:20 +03:00
engine_alias_name.ludic fix(lang): a function named like an engine namespace method's target is refused 2026-09-25 05:14:45 +03:00
every_error.ludic feat(lang): L4 type checker between parse and emit 2026-09-24 01:34:49 +03:00
exported_events.ludic feat(lang): a module's private records and events are its own 2026-09-25 11:02:48 +03:00
exported_kinds.ludic feat(lang): a module's private records and events are its own 2026-09-25 11:02:48 +03:00
exported_twins.ludic feat(lang): a module's private names are its own 2026-09-25 07:08:05 +03:00
float_into_int.ludic feat(lang): L4 type checker between parse and emit 2026-09-24 01:34:49 +03:00
fn_type_mismatch.ludic wip(0.S3): ui blocks, scene on enter/exit, hooks, machines over a state's field, namespace and engine-system injection; a reference out of a read-only state or a module let is read-only; deps counts writes into another module's state; the rejected examples hold states 2026-09-25 14:49:03 +03:00
friend_scope.ludic wip(0.S3): ui blocks, scene on enter/exit, hooks, machines over a state's field, namespace and engine-system injection; a reference out of a read-only state or a module let is read-only; deps counts writes into another module's state; the rejected examples hold states 2026-09-25 14:49:03 +03:00
generic_arity.ludic feat(lang): L5 generic records and functions 2026-09-24 02:21:15 +03:00
generic_mismatch.ludic feat(lang): L5 generic records and functions 2026-09-24 02:21:15 +03:00
generic_unbound.ludic feat(lang): L5 generic records and functions 2026-09-24 02:21:15 +03:00
layer_cycle.ludic feat(lang): layers - module flow in layer app uses base, items 2026-09-25 12:54:15 +03:00
layer_reach.ludic feat(lang): layers - module flow in layer app uses base, items 2026-09-25 12:54:15 +03:00
long_into_int.ludic fix(lang): a template inside another's hole, and integer literals past 2^31 - 1 2026-09-25 08:10:46 +03:00
missing_return.ludic feat(lang): a name is defined once, a local once per block, and a result is always returned 2026-09-23 23:55:20 +03:00
module_let_alias.ludic feat(lang): 0.S - a reference out of a read-only state is read-only (named so), a program's type named like the runtime's is refused (PadButton), tests for both, the migrate case covers lets; changeset 2026-09-25 16:17:03 +03:00
module_let_write.ludic wip(0.S1, 0.S2): state records, mut and read-only state parameters, entry injection, module var refused; ludic migrate state 2026-09-25 13:45:09 +03:00
module_var.ludic wip(0.S1, 0.S2): state records, mut and read-only state parameters, entry injection, module var refused; ludic migrate state 2026-09-25 13:45:09 +03:00
mut_not_state.ludic wip(0.S1, 0.S2): state records, mut and read-only state parameters, entry injection, module var refused; ludic migrate state 2026-09-25 13:45:09 +03:00
port_missing.ludic feat(lang): ports - port Clock { ... } in a module, bind Clock { ... } in the app 2026-09-25 04:20:12 +03:00
port_new.ludic feat(lang): packages count under uses; a port of defaults may go unbound 2026-09-25 05:36:11 +03:00
port_private.ludic feat(lang): ports - port Clock { ... } in a module, bind Clock { ... } in the app 2026-09-25 04:20:12 +03:00
port_twice.ludic feat(lang): ports - port Clock { ... } in a module, bind Clock { ... } in the app 2026-09-25 04:20:12 +03:00
port_unbound.ludic feat(lang): ports - port Clock { ... } in a module, bind Clock { ... } in the app 2026-09-25 04:20:12 +03:00
port_var_args.ludic wip(0.S3): ui blocks, scene on enter/exit, hooks, machines over a state's field, namespace and engine-system injection; a reference out of a read-only state or a module let is read-only; deps counts writes into another module's state; the rejected examples hold states 2026-09-25 14:49:03 +03:00
positional_after_named.ludic feat(lang): L11 views and templates - the UI is markup, not code 2026-09-24 15:58:47 +03:00
private_generic.ludic feat(lang): L5 generic records and functions 2026-09-24 02:21:15 +03:00
private_module.ludic wip(0.S3): ui blocks, scene on enter/exit, hooks, machines over a state's field, namespace and engine-system injection; a reference out of a read-only state or a module let is read-only; deps counts writes into another module's state; the rejected examples hold states 2026-09-25 14:49:03 +03:00
record_as_text.ludic feat(lang): L4 type checker between parse and emit 2026-09-24 01:34:49 +03:00
record_mixup.ludic feat(lang): L4 type checker between parse and emit 2026-09-24 01:34:49 +03:00
redeclared_local.ludic feat(lang): a name is defined once, a local once per block, and a result is always returned 2026-09-23 23:55:20 +03:00
reducer_not_action.ludic feat(lang): 0.R1 - actions and reducers 2026-09-25 19:13:46 +03:00
reducer_two_states.ludic feat(lang): 0.R1 - actions and reducers 2026-09-25 19:13:46 +03:00
registry_closed.ludic feat(lang): open registry - other modules' defs, in an order imports cannot change 2026-09-25 04:28:34 +03:00
registry_count_key.ludic fix(lang): the action drain is the program's; --check runs every check a build makes; a registry key named count is refused; name lookups are tables 2026-09-25 23:34:43 +03:00
registry_extend_field.ludic feat(lang): def REGISTRY from "file.lres" - a game fills an open registry from its own file 2026-09-25 07:22:05 +03:00
registry_field.ludic feat(lang): L8 registries by declaration - registry and def 2026-09-24 13:34:51 +03:00
registry_hidden.ludic feat(lang): open registry - other modules' defs, in an order imports cannot change 2026-09-25 04:28:34 +03:00
registry_twice.ludic feat(lang): L8 registries by declaration - registry and def 2026-09-24 13:34:51 +03:00
registry_unknown.ludic feat(lang): L8 registries by declaration - registry and def 2026-09-24 13:34:51 +03:00
resource_field.ludic feat(lang): L9 resource files - registry ... from 2026-09-24 14:00:20 +03:00
resource_missing.ludic feat(lang): L9 resource files - registry ... from 2026-09-24 14:00:20 +03:00
runtime_type_clash.ludic feat(lang): 0.S - a reference out of a read-only state is read-only (named so), a program's type named like the runtime's is refused (PadButton), tests for both, the migrate case covers lets; changeset 2026-09-25 16:17:03 +03:00
state_alias_readonly.ludic feat(lang): 0.S - a reference out of a read-only state is read-only (named so), a program's type named like the runtime's is refused (PadButton), tests for both, the migrate case covers lets; changeset 2026-09-25 16:17:03 +03:00
state_component_ro.ludic feat(lang): 0.S - components take states in their header; migrate writes them, never inside a name, never outside the programs given, never into a package's state 2026-09-25 17:11:15 +03:00
state_mut_arg.ludic wip(0.S1, 0.S2): state records, mut and read-only state parameters, entry injection, module var refused; ludic migrate state 2026-09-25 13:45:09 +03:00
state_readonly.ludic wip(0.S1, 0.S2): state records, mut and read-only state parameters, entry injection, module var refused; ludic migrate state 2026-09-25 13:45:09 +03:00
text_plus_number.ludic feat(lang): L4 type checker between parse and emit 2026-09-24 01:34:49 +03:00
unknown_name.ludic fix(lang): the action drain is the program's; --check runs every check a build makes; a registry key named count is refused; name lookups are tables 2026-09-25 23:34:43 +03:00
uses_cycle.ludic feat(lang): module NAME uses A, B - a module reaches only the modules it names 2026-09-25 04:06:45 +03:00
uses_missing.ludic feat(lang): module NAME uses A, B - a module reaches only the modules it names 2026-09-25 04:06:45 +03:00
uses_package.ludic feat(lang): packages count under uses; a port of defaults may go unbound 2026-09-25 05:36:11 +03:00
uses_render3d.ludic feat(lang): packages count under uses; a port of defaults may go unbound 2026-09-25 05:36:11 +03:00
view_untyped.ludic wip(0.S3): ui blocks, scene on enter/exit, hooks, machines over a state's field, namespace and engine-system injection; a reference out of a read-only state or a module let is read-only; deps counts writes into another module's state; the rejected examples hold states 2026-09-25 14:49:03 +03:00
view_without_ui.ludic wip(0.S3): ui blocks, scene on enter/exit, hooks, machines over a state's field, namespace and engine-system injection; a reference out of a read-only state or a module let is read-only; deps counts writes into another module's state; the rejected examples hold states 2026-09-25 14:49:03 +03:00
wrong_arity.ludic feat(lang): L4 type checker between parse and emit 2026-09-24 01:34:49 +03:00