04edde5Embed secure-composition library in src/ for Temper compatibility
Temper doesn't support cross-library imports yet, so secure-composition
must be embedded as a subdirectory within src/ (same-library submodule).
Changes:
- Move secure-composition/ to src/secure-composition/
- Update imports to ./secure-composition/sql and ./secure-composition/html
- Remove dependencies config (not needed for embedded modules)
Build output now includes both ormery/ and secure-composition/ directories,
ensuring all target language repos (JS, Python, C#, Rust, Java, Lua) get
the full secure-composition library when the CI pipeline publishes.
All 87 tests passing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
7550780Fix secure-composition imports to target specific files
Temper requires imports to target specific .temper.md files within
subdirectories rather than directory-level imports. Updated:
- ormery.temper.md: Import sql/SqlBuilder from sql/builder.temper.md
and SqlFragment from sql/model.temper.md
- syntax-highlighter.temper.md: Import html/SafeHtml from
html/safe-html.temper.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5087716Replace duplicate implementations with secure-composition library
- Remove local src/sql/, src/html/, src/core/, src/url/ directories
- Update imports in src/ormery.temper.md and src/syntax-highlighter.temper.md
- Point to ../secure-composition/src/sql and ../secure-composition/src/html
- Fixes CI build failures ("No member appendSafe in SqlBuilder")
- All 87 tests passing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
931d04dRemove appendSafe from public API to eliminate SQL injection vector
SECURITY FIX: Removed public appendSafe() method from all builder classes
(SqlBuilder, Collector, ContextualAutoescapingAccumulator) to prevent
SQL injection and XSS attacks.
Changes:
- SqlBuilder.appendSafe() removed - forces use of typed methods
- Refactored safeSql() to create SqlFragments directly
- Updated internal appendList to use buffer.add() directly
- Made collector appendSafe private (appendFixed/appendKnownSafe)
- Updated README and added SECURITY-IMPROVEMENTS.md documentation
Before: External code could bypass escaping via appendSafe(userInput)
After: All external code must use typed, escaped methods (appendString, appendInt32, etc.)
This eliminates the primary SQL injection attack vector identified in
semgrep rules CWE-89. All generated target languages (JS, Python, Java,
C#, Rust, Lua) will be updated when published to child repos.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
d695f7dcontinuous error log: no paper cut, no header for text prints
Text endpoint now prints as one long continuous log — no header/dividers,
no paper cut. Just the content followed by 3 blank lines of spacing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
c4b28efadd text printing endpoint with Elixir error filtering
New POST /print/text?source= endpoint accepts plain text for receipt
printing. Elixir/Phoenix sources are filtered to only print [error]
blocks. Text is wrapped in receipt-style formatting with headers and
dividers.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
0d5f530improve: refactor MarkdownEditorLive with tests, extract pure functions, remove inline CSS
- Extract BlogWeb.MarkdownEditor.Formatter with pure functions for all
markdown formatting operations (split_text, apply_format, to_html)
- Remove ~420 lines of duplicated handle_format/7 from both LiveView
and Component, replaced with shared Formatter module
- Fix bug: LiveView used EarmarkParser (not a dependency) instead of MDEx
- Replace rescue blocks with proper {:ok, _}/{:error, _} pattern matching
- Remove inline CSS styles, add .markdown-editor-window/.markdown-editor-content classes
- Add @moduledoc to both LiveView and Component (Credo strict compliance)
- Extract toolbar/cheatsheet into function components in the Component
- Initialize all assigns in mount/3 to avoid potential KeyError
- Add 35 unit tests for Formatter (split, format with/without selection, composition)
- Add 8 integration tests for MarkdownEditorLive (mount, events, handle_info)
- Zero Credo issues in strict mode across all 3 files
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
71dc1a3Separate commit messages clearly with dividers
Each commit now shows SHA and message on separate indented lines with
blank line spacing between commits. Dashed divider line between push
event entries for clear visual separation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
62be7c1Condensed layout: one line per push, full commit messages below
Push header on single line: SHA +N/-N repo/branch date.
Commit messages rendered with pre-wrap for full multi-line display.
Added debug logging to diagnose missing commit messages.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
0cbdbe1Fix missing commit messages, filter empty diffs
The GitHub Events API returns commits: null, so commit messages were
always empty. Now fetches commits from the Compare API instead, which
has full commit data including messages. Also filters out push events
with +0/-0 diffs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
a869954Make poller and mount crash-resistant
Poller rescues errors during poll to avoid GenServer crash.
LiveView mount catches :exit if poller isn't running yet.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ae794fbStore work log commits in Postgres, add window to terminal desktop
- Migration creates work_log_commits table with unique SHA index
- WorkLogCommit schema + WorkLog context for DB reads/writes
- Poller writes to DB via compare API, reads from DB
- Work Log window on terminal_live desktop (centered, draggable)
- Desktop icon for Work Log, Leica icon moved to bottom
- Standalone /work-log page reads from same DB
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
"Coming on the heels of a noteworthy "YEM" this promising jamming debut brims wit..."
TAP TO SEE AND PLAY JAMS
A Wave of Hope
.486
TAP TO FLIP BACK
17 jams
★
2022-06-04
18:33
Ruoff Music Center · Noblesville, IN
Coming on the heels of a noteworthy "YEM" this promising jamming debut brims with positivity as it unfurls over nigh 18 minutes and reaches a gleaming peak.
★
2022-07-24
23:12
Xfinity Theatre · Hartford, CT
A huge version that opens the second set, the band is locked in from the start of the jam. Fish's steady play ensures the tempo stays upbeat. Later, the jam becomes an effects-fest. Trey, determined as ever, gets the band back into the song before it > into a must-hear "ASIHTOS".
★
2022-07-31
14:37
Merriweather Post Pavilion · Columbia, MD
From out of the pre-show chaos, a show-opening jam appears. The jam begins in a pulsing rock-out
space, with confident Trey out front leading the way. In lieu of multiple sectional shifts, this jam retains
its rhythmic pulse throughout. Fishman once again guides the band masterfully through rhythmic ebb
and flow to maintain momentum. The music builds to a solid peak with some flashy Trey playing, then
returns to the song's chorus to close it out.
★
2022-08-07
19:22
Atlantic City Beach · Atlantic City, NJ
Once again, Trey's newer material serves as springboard for some of the band's most compelling improvisation. Here we get a multi-part jam that moves comfortably between sections and which finds all members of the band communicating and contributing. Listen especially to Fishman and how he drives the musical conversation.
★
2022-12-28
19:17
Madison Square Garden · New York, NY
Page makes good use of his L-R panning effects early on before Trey treats us to an Allman-esque climb up the mountain on the solid footing laid down by Mike and Fish. This version distinguishes itself especially in the post-peak outro section, taking an unexpected sonic turn as it segues into "It's Ice".
★
2023-04-14
20:30
Climate Pledge Arena · Seattle, WA
A cloud of uncertainty hangs over the early stages but Fish keeps things afloat with constant forward motion. Around 12:00 the jam begins to gradually emerge from darkness with Trey wielding his guitar like a blazing beam of light cutting through the gloom as it builds and builds to a series of peaks.
★
2023-07-19
19:56
Live Oak Bank Pavilion at Riverfront Park · Wilmington, NC
Trey and Mike kick off the improv early in the first set with interlocking leads that propel the jam over an atmospheric bed of Page's keys matched by Fish's energetic pocket. Pointed play ensues, building some tension as both leads adjust tone. The mood eventually brightens and Trey picks out melodic lines as the jam accelerates pushed by Mike's pulsing attack. The band locks in behind Trey for a big trilling peak that leads to a full return.
★
2023-07-28
21:54
Madison Square Garden · New York, NY
Setting the tone for the highlight-rich MSG run to come, the band drops a multi-faceted monster in the 2 slot. Pure inertia pushes the band through several sections with impressive cohesion before eventually coalescing around a triumphant chord progression. All four band members then lock in to deliver a powerful climax, before yielding to the closing chorus.
★
2023-08-25
22:11
Broadview Stage at SPAC · Saratoga Springs, NY
The jam begins in earnest, propelled with vigor by the rhythm section while Trey and Page build layers. There is some searching midway as a slow build leads to fine peak directed noodling from Trey that eventually peters into transitional space. The band then pushes through several minutes of percussive grit before Trey takes charge again, steering them to Simple.
★
2023-10-08
13:47
Bridgestone Arena · Nashville, TN
Measure for measure extremely fire, fluid, and deceptively simple (yet exceptional) full-band play. Listen for some familiar "hose" throughout the jam before the band breaks not for "Uncle Penn," (they cool down, first), but a welcome "Cinnamon Girl."
★
2023-10-15
12:10
United Center · Chicago, IL
Compact, direct, Fish-driven version not unlike early powerhouse "CDT's" by way of intensity. Play breaks just before the 5:00 minute mark to feature a bit by way of Trey, but this version is really all about the drums. And then a shift! Around 7:44, Page leans into his keys, ripping a hole in a static wall of sound, and the improv unravels, becoming a kaleidoscopic shoegaze soundscape.
★
2023-12-28
23:39
Madison Square Garden · New York, NY
> from "The Howling", "AWOH" continues its run of huge, improv-heavy versions in 2023. Heavy effects from Trey early give way to a slowed tempo by the 10 minute mark. The band shows patience as they work through the jam. At 17:00, in a place where you might expect a new song to pop out, they instead find a new groove. Sprite play from Trey sends the jam into a feel-good, upbeat place. The jam fizzles to an end and -> into "Rift".
★
2024-02-22
?
Moon Palace · Quintana Roo, Cancun, Mexico
This tidal "Wave of Hope" raises the bar for one of the era's most consistent jam vehicles with a free-flowing marathon of improvisation. The opening 10 minutes are worthy in their own right, but the signature moment comes at 14:25 when the band in unison dives into deep-sea exploration of hard-edged rock. Relentlessly forging ahead with siren synths and wailing guitar over thunderous percussion and bass, the intensity remains at a fever pitch until the soothing exhale begins at 26:00, ushering the jam back to shore after the abyssal proceedings and > "Oblivion".
★
2025-04-20
18:10
Moda Center · Portland, OR
A familiar spot for the song as it opens the second set and familiarly goes deep. Fish's play around the 11:00 mark is outrageous and must be recognized. Around 15:00, the jam turns into space funk on steroids. Things wind their way to an end by > into "Twist".
★
2025-07-09
26:12
Jerome Schottenstein Center · Columbus, OH
This is familiar, feel-good Phish. Mike works to nudge the jam in a different direction, but Trey surges forward, pushing the band not to a false, but a near peak. Pleasantly, the jam assumes a new identity past the 12:00 mark, and from here Trey moves through a number of ideas (which becomes fairly interesting full-band play). Enough by way of 'muted' introspection allows for an impassioned "Bowie"-esque "peak," before Trey abruptly returns to close the song
★
2025-07-16
17:02
TD Pavilion at the Mann · Philadelphia, PA
The jam takes off quickly with fluid and melodic ease before taking a turn. Spending ample time exploring a deep trench of groove allows the band space to play around with new sounds while keeping a foundation of the familiar. Pulsing and aggressive play pushes the conclusion pleasingly over the top before giving way to fragmentation and dissolving slowly -> to "Mercy".
★
2025-12-29
20:31
Madison Square Garden · New York, NY
Stormy play colors the jam early. A tonal push and pull between Trey, Page, and Mike creates an oxymoronically dissonant, yet pleasant atmosphere. Trey then introduces a bludgeoning hard rock riff and the band immediately latches on and drives the music to a massive crescendo with blazing guitar peaks. A seamless major key shift occurs, but the energy remains as the music builds to another huge, arguably even bigger, hose-y peak before the "Wave of Hope" chords come barging back in for the conclusion.
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???