|
| 1 | +name: Bug report |
| 2 | +description: luart misbehaves — wrong result, crash, race, leak, or a pooling / caching / registry / config fault. |
| 3 | +labels: ["bug"] |
| 4 | +body: |
| 5 | + - type: markdown |
| 6 | + attributes: |
| 7 | + value: | |
| 8 | + Thanks for the report. `luart` is a **high-performance, concurrency-safe |
| 9 | + runtime** (bytecode cache + per-script VM pool + dynamic registry) built on |
| 10 | + top of [lua-pure](https://github.com/htcom-code/lua-pure). |
| 11 | +
|
| 12 | + - **Lua *language* bugs** (a script behaves differently from PUC-Lua 5.4.8, |
| 13 | + wrong error text, arithmetic/coercion, `string.*`) belong to |
| 14 | + **[lua-pure](https://github.com/htcom-code/lua-pure/issues)**, not here. |
| 15 | + - File here for luart's runtime: caching, VM pooling, the dynamic registry |
| 16 | + (lazy load, TTL eviction, memory budget, hot reload), `SourceLoader`, |
| 17 | + `ExecTimeout` / `MaxInstructions`, `Config`, observability. |
| 18 | + - **Security issues:** do **not** file here — see |
| 19 | + [SECURITY.md](../blob/main/SECURITY.md). |
| 20 | + - type: textarea |
| 21 | + id: reproducer |
| 22 | + attributes: |
| 23 | + label: Minimal reproducer |
| 24 | + description: The smallest Go program (using luart) plus Lua script that triggers the bug. A failing test is ideal. |
| 25 | + render: go |
| 26 | + placeholder: | |
| 27 | + loader := luart.NewMapLoader() |
| 28 | + loader.Set("s", `function f() return 1 end`, luart.HashVersion("..."), "1.0.0") |
| 29 | + rt := luart.New(loader, luart.Config{MaxStates: 4}) |
| 30 | + defer rt.Close() |
| 31 | + _, err := rt.Run(context.Background(), "s", "f") |
| 32 | + validations: |
| 33 | + required: true |
| 34 | + - type: textarea |
| 35 | + id: expected |
| 36 | + attributes: |
| 37 | + label: Expected behaviour |
| 38 | + description: What you expected luart to do. |
| 39 | + validations: |
| 40 | + required: true |
| 41 | + - type: textarea |
| 42 | + id: actual |
| 43 | + attributes: |
| 44 | + label: Actual behaviour |
| 45 | + description: What happened instead — output, error, panic, stack trace, or `-race` report. Paste it verbatim. |
| 46 | + render: shell |
| 47 | + validations: |
| 48 | + required: true |
| 49 | + - type: input |
| 50 | + id: version |
| 51 | + attributes: |
| 52 | + label: luart version / commit |
| 53 | + description: Release tag (e.g. v0.2.0) or commit SHA. |
| 54 | + placeholder: "v0.2.0 or abc1234" |
| 55 | + validations: |
| 56 | + required: true |
| 57 | + - type: input |
| 58 | + id: goenv |
| 59 | + attributes: |
| 60 | + label: Go version & OS/arch |
| 61 | + description: Output of `go version`. |
| 62 | + placeholder: "go1.24 darwin/arm64" |
| 63 | + validations: |
| 64 | + required: false |
| 65 | + - type: textarea |
| 66 | + id: config |
| 67 | + attributes: |
| 68 | + label: Config & concurrency context |
| 69 | + description: >- |
| 70 | + Relevant `Config` (MaxStates, MemoryBudgetBytes, IdleTTL, ExecTimeout, |
| 71 | + MaxInstructions, SkipOpenLibs, custom Libs), which `SourceLoader` you use, |
| 72 | + and the concurrency shape (how many goroutines call `Run`, whether hot |
| 73 | + reload / eviction was active). Most pooling/registry bugs only reproduce |
| 74 | + under a specific config + load. |
| 75 | + validations: |
| 76 | + required: false |
| 77 | + - type: textarea |
| 78 | + id: extra |
| 79 | + attributes: |
| 80 | + label: Anything else |
| 81 | + description: Logs, metrics, profiles, or other context. |
| 82 | + validations: |
| 83 | + required: false |
0 commit comments