plum
git clone https://git.pyrossh.dev/plum
A statically typed, imperative programming language inspired by rust, python
.recall/context.md
| 141de54 | 1 | # Project Context — plum (updated 2026-07-20T21:06:26) |
| 141de54 | 2 | |
| 141de54 | 3 | _Generated locally by Recall — TextRank (vendored, numpy-accelerated)._ |
| 141de54 | 4 | |
| 141de54 | 5 | ## 🎯 Goal |
| 141de54 | 6 | Do you want to completely implement the standard library like List, Map, Enum completely and type check and compile them to see if they work? Honestly, this would be a much bigger undertaking than what we've done so far — List/Map need real generics monomorphization (there's currently none; user-defined generics type-check but don't compile, per the README's Known gaps) plus a growable-memory runtime (the current bump allocator never resizes or frees), and general Enum support needs a runtime ta… |
| 141de54 | 7 | |
| 141de54 | 8 | ## 🧭 Summary |
| 141de54 | 9 | - <task-id>a3a9df0eb061889e5</task-id> |
| 141de54 | 10 | - <task-id>aa93a0b92186e335d</task-id> |
| 141de54 | 11 | - <task-id>a7c05a66e453e9fc7</task-id> |
| 141de54 | 12 | - <task-id>a50ac39524b3a83d6</task-id> |
| 141de54 | 13 | - <task-id>a527ef038e07d98b5</task-id> |
| 141de54 | 14 | - <task-id>a61ac371a07e0a4ac</task-id> |
| 141de54 | 15 | - <task-id>a3121982d2d930f6c</task-id> |
| 141de54 | 16 | - <task-id>a9ab25fe3cb73fe68</task-id> |
| 141de54 | 17 | |
| 141de54 | 18 | ## ⏭️ Next steps / open threads |
| 141de54 | 19 | - Implementer: "Before I begin - should the hook be installed at user or system level?" |
| 141de54 | 20 | - What would you like to do? |
| 141de54 | 21 | - If you haven't completed Phase 1, you cannot propose fixes. |
| 141de54 | 22 | - My actual edits (grammar.js, match.txt, corpus renames) are safely preserved in `stash@{0}` — I just need to reset the incidentally-regenerated files to HEAD and re-apply the stash. |
| 141de54 | 23 | - Now let's check the two remaining direct `.index` usages seen earlier that weren't behind `ok_or_else`. |
| 141de54 | 24 | - Uncommitted changes to wrap up: .recall/, tooling/tree-sitter-plum/.recall/ |
| 141de54 | 25 | |
| 141de54 | 26 | ## 📂 Files touched |
| 141de54 | 27 | - /Users/pyrossh/Code/plum/docs/superpowers/specs/2026-07-19-general-enum-support-design.md |
| 141de54 | 28 | - /Users/pyrossh/Code/plum/plum-checker/src/lib.rs |
| 141de54 | 29 | - /Users/pyrossh/Code/plum/plum-core/src/ast.rs |
| 141de54 | 30 | - /Users/pyrossh/Code/plum/plum-core/src/parser.rs |
| 141de54 | 31 | - /Users/pyrossh/Code/plum/tooling/tree-sitter-plum/grammar.js |
| 141de54 | 32 | - /Users/pyrossh/Code/plum/plum-wasm-codegen/src/lib.rs |
| 141de54 | 33 | - /Users/pyrossh/Code/plum/plum-checker/tests/checker_tests.rs |
| 141de54 | 34 | - /Users/pyrossh/Code/plum/plum-wasm-codegen/tests/codegen_tests.rs |
| 141de54 | 35 | - /Users/pyrossh/Code/plum/plum-checker/tests/examples_test.rs |
| 141de54 | 36 | - /Users/pyrossh/Code/plum/plum-wasm-codegen/tests/examples_test.rs |
| 141de54 | 37 | - /Users/pyrossh/Code/plum/examples/match.plum |
| 141de54 | 38 | - /Users/pyrossh/Code/plum/docs/superpowers/plans/2026-07-19-general-enum-support.md |
| 141de54 | 39 | - /Users/pyrossh/Code/plum/.superpowers/sdd/progress.md |
| 141de54 | 40 | - /Users/pyrossh/Code/plum/plum-cli/src/main.rs |
| 141de54 | 41 | - /Users/pyrossh/Code/plum/.superpowers/sdd/task-5-report.md |
| 141de54 | 42 | - /Users/pyrossh/Code/plum/docs/superpowers/specs/2026-07-20-tail-position-and-grammar-gaps-design.md |
| 141de54 | 43 | - /Users/pyrossh/Code/plum/README.md |
| 141de54 | 44 | - /Users/pyrossh/Code/plum/docs/superpowers/plans/2026-07-20-tail-position-and-grammar-gaps.md |
| 141de54 | 45 | - /Users/pyrossh/Code/plum/docs/superpowers/specs/2026-07-20-generics-monomorphization-design.md |
| 141de54 | 46 | - /Users/pyrossh/Code/plum/plum-checker/src/types.rs |
| 141de54 | 47 | - /Users/pyrossh/Code/plum/docs/superpowers/plans/2026-07-20-generics-monomorphization.md |
| 141de54 | 48 | - /Users/pyrossh/Code/plum/.superpowers/sdd/task-2-report.md |
| 141de54 | 49 | - /Users/pyrossh/Code/plum/docs/superpowers/specs/2026-07-20-generic-enum-multi-instantiation-design.md |
| 141de54 | 50 | - /Users/pyrossh/Code/plum/plum-checker/src/monomorphize.rs |
| 141de54 | 51 | - /Users/pyrossh/Code/plum/docs/superpowers/plans/2026-07-20-generic-enum-multi-instantiation.md |
| 141de54 | 52 | - /Users/pyrossh/Code/plum/.superpowers/sdd/task-1-report.md |
| 141de54 | 53 | - /Users/pyrossh/Code/plum/docs/superpowers/specs/2026-07-20-closures-design.md |
| 141de54 | 54 | |
| 141de54 | 55 | ## 🔧 Commands run |
| 141de54 | 56 | - sed -n '1,400p' README.md | grep -n -i "known gap\|enum\|generic" -A3 -B1 |
| 141de54 | 57 | - find . -iname "*.plum" -path "*enum*" -o -iname "*.plum" | xargs grep -l "enum" -i 2>/dev/null |
| 141de54 | 58 | - ls libs/std/; echo ---; cat libs/std/option.plum; echo ---; cat libs/std/result.plum |
| 141de54 | 59 | - grep -n "enum\|variant\|Bool\|True\|False" plum-checker/src/types.rs | head -60 |
| 141de54 | 60 | - grep -n "enum\|variant\|Bool\|True\|False" plum-wasm-codegen/src/lib.rs | head -80 |
| 141de54 | 61 | - grep -n "bump_global\|fn compile_new\|struct_offset\|field_offset\|ast::Expr::New\|memory\|MemoryType\|alloc" plum-wasm-codegen/src/lib.rs | head -60 |
| 141de54 | 62 | - grep -n "enum_variant\|variant" tooling/tree-sitter-plum/grammar.js |
| 141de54 | 63 | - grep -n "Enum\|Variant" plum-core/src/ast.rs |
| 141de54 | 64 | - sed -n '55,90p' plum-core/src/ast.rs; echo ---GRAMMAR---; grep -n "variant\|enum" tooling/tree-sitter-plum/grammar.js -i |
| 141de54 | 65 | - sed -n '125,160p' tooling/tree-sitter-plum/grammar.js |
| 141de54 | 66 | - grep -n "EnumVariant\|enum_variants\|construct\|Call(" plum-checker/src/lib.rs | head -50 |
| 141de54 | 67 | - ls docs/superpowers/specs/ 2>/dev/null |
| 141de54 | 68 | - git add docs/superpowers/specs/2026-07-19-general-enum-support-design.md && git commit -m "$(cat <<'EOF' docs: add design spec for general enum support in check |
| 141de54 | 69 | - grep -n "ClassCall\|FieldArg\|CasePattern::Class\|fn parse_call\|positional" plum-core/src/parser.rs | head -60 |
| 141de54 | 70 | - grep -n "class_call\|class_argument_list\|fn_call\|fn_argument_list" tooling/tree-sitter-plum/grammar.js |
| 141de54 | 71 | - …and 102 more |
| 141de54 | 72 | |
| 141de54 | 73 | ## ⏱ Where we left off |
| 141de54 | 74 | Spec written and committed to [2026-07-20-closures-design.md](docs/superpowers/specs/2026-07-20-closures-design.md). Please review it before I write the implementation plan. |
| 141de54 | 75 | |
| 141de54 | 76 | ## 🌿 Git ground-truth |
| 141de54 | 77 | ``` |
| 141de54 | 78 | Recent commits: |
| 141de54 | 79 | 4f1f2b6 docs: add design spec for closures |
| 141de54 | 80 | b6a9042 test(plum-wasm-codegen): cover same bare-generic-enum-param function at multiple instantiations |
| 141de54 | 81 | 2216237 feat(plum-checker): support multiple concrete instantiations of the same generic enum |
| 141de54 | 82 | e698d53 docs: revise generic-enum plan with bare-generic-typed-param fix as Task 1 |
| 141de54 | 83 | 84e946f docs: amend generic-enum spec with bare-generic-typed-param fix |
| 141de54 | 84 | aedebc1 docs: add implementation plan for generic-enum multi-instantiation |
| 141de54 | 85 | 32da118 docs: add design spec for generic-enum multi-instantiation support |
| 141de54 | 86 | 6613e6d test(plum-checker): mark slow recursion-guard test as ignored by default |
| 141de54 | 87 | ``` |