1fe9a5aAdd Neovim plugin source, build output, and CI workflow
- nvim/: plugin source files (ftdetect, plugin, highlighting logic)
- temper.out/lua/: committed build output for CI testing
- .github/workflows/: CI that runs Lua tests and publishes to
nvim_temper_syntax_highlighter on success
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
bc2e9fdfeat: add backend-specific compiler change details to child repo READMEs
Each of the 6 published repos now explains exactly what had to change
in the Temper compiler to make that backend work:
- JS: auto-connected pattern, setTimeout + process.stdin raw mode
- Python: ThreadPoolExecutor futures, tty/termios raw mode
- Lua: cooperative coroutine scheduler, non-blocking IO polling
- Rust: cross-crate FunctionCall paths, dependency detection fix
- C#: native async/await, net8.0 framework, namespace fixes
- Java: CompletableFuture + ForkJoinPool, timeout fix, stty raw mode
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
d27a2fdfix: update CI workflow with correct run commands for all backends
- Python: add std to PYTHONPATH, update prereqs to 3.11+
- Java: add run.sh script (installs local Maven deps then runs)
- Java run_cmd in README now points to run.sh instead of incomplete mvn command
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ca3191ctest: add functional test for `std/io` `sleep()` across backends
Adds `control-flow/io-sleep/io-sleep.temper.md` to the functional test
suite, verifying that `sleep()` from `std/io` works correctly:
- Sleep returns and execution continues after `await`
- Multiple sequential sleeps work
- Zero-ms sleep resolves immediately
- Sleep interleaved with computation produces correct results
Uses short delays (5-10ms) to avoid slowing the test suite.
Passes on: JS, Python, Lua, Java 17, C#.
Skipped on Rust (`@Ignore`) because the Rust functional test
infrastructure only links `temper-core`, not `temper-std`, so
`import("std/io")` produces an unresolved crate at cargo build time.
The Rust `sleep` implementation itself works (verified manually via
the snake game with `cargo run`).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4e085e3fix: make all 6 backends run the snake game correctly
Lua:
- Replace temper.TODO stub with cooperative coroutine scheduler
- async {} now compiles to temper.async_launch() (was "TODO")
- LuaTranslator emits temper.run_scheduler() after top-level code
- Non-blocking IO: sleep uses deadline-based promises, readLine uses
stty min 0 time 0 for polling
- Round-robin scheduler drives multiple async blocks cooperatively
Rust:
- Fix missing temper-std dependency in generated Cargo.toml
- Connected functions (stdSleep, stdReadLine) reference temper_std::
paths but bypassed the import-based dependency scan
- RustTranslator now tracks usedSupportFunctionPaths
- RustBackend scans these after translation to inject temper-std dep
with correct features
- Also fixes missing temper_std::init() in generated lib.rs
- Add raw terminal mode for single-keypress input
Java:
- Fix waitUntilTasksComplete() 10-second hard timeout
- Now loops until ForkJoinPool is truly quiescent
- Add raw terminal mode via stty for single-keypress input
C#:
- Update target framework from net6.0 to net8.0 (current LTS)
- Namespace-qualify OrderedDictionary and AsReadOnly in RegexSupport.cs
to avoid conflicts with System.Collections.Generic.OrderedDictionary
introduced in .NET 9+
- Add single-keypress input via Console.ReadKey
Python:
- Add raw terminal mode for single-keypress input via tty/termios
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
8356001docs: add detailed compiler modification context for Rust backend
Explains what was changed in the Temper compiler (commit 0f31c89) to make
this game possible — RustSupportNetwork.kt, RustBackend.kt, and
std/io/support.rs with thread::sleep + PromiseBuilder pattern.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
644acf8docs: add detailed compiler modification context for C# backend
Explains what was changed in the Temper compiler (commit 0f31c89) to make
this game possible — StandardNames.kt, CSharpSupportNetwork.kt,
CSharpBackend.kt, and std/Io/IoSupport.cs with native async Task.Delay.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
e647da7docs: add detailed compiler modification context for Python backend
Explains what was changed in the Temper compiler (commit 0f31c89) to make
this game possible — PySupportNetwork.kt and temper_core/__init__.py with
ThreadPoolExecutor-based sleep and Future-based readLine.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
212eed0docs: add detailed compiler modification context for Lua backend
Explains what was changed in the Temper compiler (commit 0f31c89) to make
this game possible — temper-core/init.lua with synchronous blocking sleep,
temper.TODO() async stub, and make_resolved() pattern for await translation.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
75a4c9ddocs: add detailed compiler modification context for JavaScript backend
Explains what was changed in the Temper compiler (commit 0f31c89) to make
this game possible — JsSupportNetwork.kt, JsBackend.kt, and temper-core/io.js
with setTimeout-based sleep and raw mode stdin readLine.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
389ab33docs: add detailed compiler modification context for Java backend
Explains what was changed in the Temper compiler (commit 0f31c89) to make
this game possible — StandardNames.kt, JavaSupportNetwork.kt, and Core.java
with ForkJoinPool Thread.sleep + CompletableFuture.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
c8c27abdocs: add KNOWN_ISSUES.md for Rust backend dep resolution bug
Documents the temper-std missing dependency issue when multi-module
projects import from std/io in a secondary module.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
9218db1feat: real-time keyboard input via two async blocks
Split into 3 pure Temper modules:
- src/ (snake library): pure game logic, types, render, PRNG
- game/ (snake-game runner): two async blocks for stdin input + game loop
- test/ (snake-test): 18 tests, separated to avoid readLine blocking
Game uses w/a/s/d + Enter for direction control. Input loop and game
loop cooperate via shared mutable direction variable.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
38e266aFix native test detection: install pytest, use pipefail
Two bugs prevented Python test failures from being caught:
1. pytest was never installed — pip only installed the ORM packages
2. pipe to tee swallowed exit codes — tee always succeeds, masking
the actual test runner exit code
Fixes: add `pip install pytest` before running tests, add
`set -o pipefail` to all native test steps so failures propagate.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
106f24aRun native runtime tests on generated code before publishing
Test matrix now runs both `temper test -b <lang>` AND native tests
(pytest, npm test, cargo test, etc.) against temper.out/<lang>/.
Publish is gated on native test results. Issues auto-opened only
when temper tests pass but native tests fail (codegen bug signal).
Reverts notify-app-template to simple vendor push since all testing
now happens in the top-level alloy repo.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
8e45223Add per-backend test gating with auto-issue on failure
- New test matrix job: runs `temper test -b <lang>` for all 6 backends
in parallel (js, py, rust, java, lua, csharp)
- Publish job gated per-backend: only pushes to lib repo if that
backend's tests passed, preventing broken code from cascading
- Auto-opens GitHub issue with test output on failure, comments on
existing issue if one is already open
- Reverts notify-app-template to simple vendor push (testing moved
upstream to avoid PAT requirement for cross-repo issue creation)
- Build job uploads Temper compiler + ORM source as artifacts for
test matrix consumption
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
92aa09fAdd runtime test gate to child repo CI pipeline
Rewrites notify-app-template.yml so child lib repos (alloy-py, alloy-js,
etc.) run their own native tests before pushing vendor code to app repos.
Flow: alloy temper test → publish to child libs → child runs native
tests (pytest, npm test, cargo test, etc.) → if pass, push to app repo;
if fail, open issue on alloy with stack trace.
Simplifies top-level test job to just gate publishing (no issue creation)
since child repos now handle runtime-specific failure reporting.
Requires ALLOY_ISSUES_TOKEN secret on each child repo for cross-repo
issue creation.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
b779c12Fix CI: surface test failures and auto-open issues
Three bugs fixed:
- Test job showed green despite failures (continue-on-error swallowed exit code)
- Issue creation failed silently when "bug"/"ci" labels didn't exist
- Every push created duplicate issues instead of commenting on existing ones
Added explicit "Fail job if tests failed" step so the test matrix shows
red. Labels are now created before use. Existing open issues get a
comment instead of a duplicate.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
0405645Add expanded security audit: 17 vulnerabilities across 7 classes
Original audit found 2 SQL injection vulns (fixed by Alloy). Expanded
audit covers full OWASP Top 10 and finds 15 additional: 4 NoSQL injection
($where + operator injection), RCE, SSRF, SSTI, XXE, zip slip, hardcoded
keys, MD5 hashing, open redirect, mass assignment, sensitive query params.
The NoSQL vulns are structurally identical to the SQLi we fixed — same
anti-pattern, different database layer — making the case for extending
Temper's type-safe approach to NoSQL query generation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ec60310Add Juice Shop SQL security migration plan and audit trail
- juice-shop-alloy-migration.md: Full technical plan with MITRE CWE
analysis (11 CWEs), all 40 SQL touchpoints mapped, escaping proofs
- PROCESS.md: Live audit trail documenting each change, validation
results from 7 injection payloads, and final assessment showing
Alloy eliminates all SQL injection vectors by construction
cc01b98Track apps/ directory and update temper.keep name selections
Remove apps/ from .gitignore to track demo applications and the
Juice Shop security migration as submodules.
47862b0Point juice-shop submodule to fork with Alloy security migration
Juice Shop fork at notactuallytreyanastasio/juice-shop includes:
- Vendored Temper-compiled Alloy ORM
- Login route migrated from raw SQL to type-safe SqlBuilder
- Search route migrated from raw SQL to type-safe SqlBuilder
- All 6 injection payload types validated as blocked
914c8e9Replace vulnerable raw SQL with Alloy ORM type-safe query builder
Migrate login and search routes from string-interpolated SQL to Alloy's
type-safe SqlBuilder API. All user input now flows through appendString()
which escapes quotes at the type level, making injection unrepresentable.
- Vendor Temper-compiled Alloy ORM (orm, std, temper-core)
- Add lib/alloy.ts bridge (ESM loader + query builders)
- Add lib/orm-src.d.ts TypeScript declarations for Alloy API
- Migrate routes/login.ts: email/password no longer interpolated
- Migrate routes/search.ts: search criteria no longer interpolated
- Validated against 6 injection payloads on running server: all blocked
2024-07-31 · Chaifetz Arena, Saint Louis University
♥ Most Loved: 38 likes
2017-07-26 · Madison Square Garden
📊 93% Set 2 · 8/8 JCs from Set 2
Last: 2024-07-31 (592d ago) · avg every 184d
Best year: 2017 — 2/2 JC
🔥 JC Streak: 4 in a row
"Busted out after a 380 show absence, Phish goes 2 for 2 on delivering the goods ..."
TAP TO SEE AND PLAY JAMS
Mr. Completely
.533
TAP TO FLIP BACK
8 jams
★
2017-07-19
21:18
Petersen Events Center · Pittsburgh, PA
Busted out after a 380 show absence, Phish goes 2 for 2 on delivering the goods with this TAB standby. The jam quickly goes "Type II" and features bliss jamming aplenty as well as some new synth sounds from Page.
★
2017-07-26
13:52
Madison Square Garden · New York, NY
Surprising -> out of a great "Carini". A fiery minor key jam develops out of the verses, and Page takes control on the keys as Trey fires off echo-laden notes. They pivot nicely into a new key, where Mike really impresses and Fish pushes the tempo up a gear as Trey plays around with the "Mr. Completely" theme and leads the band into an anthemic finale. A high-spirited, energetic good time, with a > into an even more surprising "1999".
★
2021-08-04
18:55
Ascend Amphitheater · Nashville, TN
The opening to one of the year's strongest second frames, this "Mr. Completely" indulges in its usual jam before Fish switches up his flow and Trey moves into a new key. Page's electric piano cuts through the mire, and a warm groove emerges as a result. Fish starts throwing in the "Mr. Completely" drum fill almost as a challenge to himself, and Trey moves to stabbing echo-laden chords as the jam picks up speed "Bathtub Gin" style. Something funkier and stranger emerges, and Mike flips on his envelope filter as the jam builds to a ferocious climax, then dies away with some more "Mr. Completely" drum fills by Fish for fun. > into "BOAF".
★
2021-08-29
18:47
Gorge Amphitheatre · George, WA
Quickly maneuvers into major-key bliss, distinguished by some frenetic playing from Fishman, then moves into a brisker and snappier zone thanks to Trey switching to chords. The band briefly dips into contemplative minor key playing, before moving to something more upbeat, with Page's electric piano at the forefront. Trey's effects-smothered guitar playing and Page's synths combine wonderfully, with Mike going to the envelope filter and Fish as steady as ever. Very good -> into "Meat" to close. A fine companion piece to the 8/4/21 version.
★
2022-08-13
14:26
Alpine Valley Music Theatre · East Troy, WI
First locks into a super-cool and menacing, textural jam with a perfectly integrated "Crazy Train" tease from Trey, then slides into major for a heavenly spell before more familiar bliss brings it all home.
★
2023-04-23
18:03
Hollywood Bowl · Hollywood, CA
Another huge version of the once rare song in the catalog. Plucky playing from Trey around 9:30 changes the jam's trajectory. The searching, grimy jam sounds like the background to a noir detective show at times. The tempo gets kicked up towards the end, before eventually > "A Song I Heard the Ocean Sing".
★
2023-04-23
0:56
Hollywood Bowl · Hollywood, CA
-> from "A Song I Heard the Ocean Sing" to close out the "Mr C" > "ASIHTOS" -> "Mr C" sandwich.
★
2024-07-31
22:29
Chaifetz Arena, Saint Louis University · St. Louis, MO
After transitioning away from the song, Pageâs grand piano gives the improvisation shape and direction as Trey responds leading the band through uplifting and thematic play that modulates across both delicate and thornier spaces. Listen for Mike's "Meowdulator" pedal and Trey's "Hanon exercises" to make appearances before returning to the song proper to close.
Disappointed that War does not lead to actual combined-arms conflict.
jeff
04:01 AM
that would be hard to conjure
jeff
04:02 AM
I am so excited that this works and is a successful combination of windows and old apple lol
Uechi Nerd
04:02 AM
Probably for the best, actually. That shit is very very messy.
Uechi Nerd
04:02 AM
I am intrigued and happy it works!
Uechi Nerd
04:03 AM
I respect the wizardry.
Visitor7804
04:05 AM
this is delightful.
jeff
04:06 AM
hell yeah visitor 7804, this is livin' brother
guy4get
04:07 AM
i've never felt so alive
EarlofVincent
04:09 AM
Commencing experiment in 3....2....
jeff
04:14 AM
1
leah
04:16 AM
hi!
leah
04:16 AM
this is lovely
jeff
04:21 AM
hi! lol I was just like what if I combined Mac and windows and added a flower tree of life and called it my homepage and then smoked some weed and made it happen in an empty mall in Connecticut
B. Droptables
10:51 AM
Always cool to play with your toys.
Visitor1128
08:47 AM
yo!
Visitor1128
08:48 AM
i can barely work my phone. what am i doing here?
jeff
09:04 AM
the phone is not optimized yet but it "kind of works" I am sorry lol
jeff
09:04 AM
you have to pick a username, then it goes to the chat, then if you hit the bottom tabs it'll let you go to the app sections.
Bobdawg
04:43 AM
Hi everybody this is my blog I hope you enjoy it I did some more changes and anyone can write a post here now for me.
dinkleberg
01:45 AM
ALL HAIL TREE OF LIFE
jeff
08:55 PM
hi Hacker News
jeff
04:28 PM
hey there I am not really Jeff
Mal Function
05:34 PM
Hey! Please reveal... how exactly do I actually use losselot on my Mac? I've run the git clone commend in Terminal.app and seem successfully to have installed into a new <losselot> sub-folder in my home folder but now???