-
Notifications
You must be signed in to change notification settings - Fork 1
r1 #4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
skmp
wants to merge
163
commits into
stable
Choose a base branch
from
develop
base: stable
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
r1 #4
Changes from all commits
Commits
Show all changes
163 commits
Select commit
Hold shift + click to select a range
dd3d01b
Fix retina dpi scaling
skmp baa41a5
Enhance type inference for built-in functions and improve backpropaga…
skmp 3b1f9df
refactor: phase 1
skmp 37d881c
refactor: phase 2
skmp bf0424b
refactor: phase3
skmp 1656fac
refactor: phase 3b
skmp 0b30130
refactor: make pin ptrs stable
skmp 6bcdad6
refactor: phase 4a
skmp b3bfee2
refactor: phase 4b
skmp 0f5ab4e
refactor: Phase 5
skmp 3686295
dpi: Better fix?
skmp b6f9459
refactor: bottom panel with tabbed error and build log display
skmp d194ea0
SelectBang: support three bang outputs
skmp 8dd992d
more shadow node work
skmp 5cbc049
expr parsing
skmp 15c3ac8
expr rework
skmp 70e7621
fixes in shadow
skmp bb3f254
fix expressions decaying references
skmp 79189bd
correctly name inline exprs input pins
skmp 290998c
name hints
skmp aec4917
fix for copy paste
skmp 008975b
More flexible pin connections
skmp 79b3a1f
rename BangInput -> BangTrigger, BangOutput -> BangNext
skmp 3114712
CONNECTIONS TO BANGS AS INPUTS WORK NOW
skmp fce7e60
relax multi caller rules
skmp ed06b67
towards reusable lambas
skmp 0552929
search bar, some fixes
skmp 817a1bd
towards lambdas
skmp 6325002
questionable progress
skmp 4bd9269
tests
skmp 3b7e936
this feels dodgy
skmp aa9d158
More complex, non compiling multifader
skmp ec4f533
towards canonical shadow nodes
skmp 4438ba8
type system refactor
skmp 4423514
fixes
skmp 8f15cef
literal work
skmp 095d426
progress in literals?
skmp 974a5fa
more progress on literals
skmp ac639d5
more literal work
skmp ea4d696
literal unification, remove legacy stuff
skmp 079fc8b
more literals
skmp da506db
more progress on literals?
skmp 6c9c0cc
more literal work
skmp 5f2f0be
more unvalued literals
skmp f310cf9
refactor: cjamge declaration handling and add utility for extracting …
skmp 30f606b
refactor: enhance declaration name and type extraction with shadow no…
skmp 57e6805
towards evaluated decls
skmp 0eaf6fb
type parsing fixes
skmp e68219a
buildins are symbols
skmp b694f23
TypeApply
skmp 483ccd7
enhance type parameter validation for arrays, maps, and tensors
skmp 489adb7
klavier is now a clusterfuck
skmp f65b7c0
Organic Assembler / attolang
skmp 0abee26
Update readme
skmp d637140
Update README with image
skmp 3498b4c
# version instrument@atto:0
skmp 1574c94
viewport in metafiles
skmp 7ae0a55
wire management: add link name editing and auto-wire functionality
skmp 6a2d5ab
named style
skmp 76852d2
Migrate v1 arguments: strip $ from variable references and convert @N…
skmp a937964
first steps for graphbuilder
skmp b1dea6f
argument parsing changes: add split_args and parse_args_v2 functions,…
skmp 9ff34c6
Initials steps for graphbuilder
skmp 4772975
more graphbuilder work
skmp 12d455c
Cleanups
skmp 022c4a4
more graphbuilder work
skmp d0c9eb1
work on nets and nodes
skmp 2e7b6c5
args2 to graphbuilder
skmp 28bcd4c
more net work
skmp a7a7e00
Editor2Pane!
skmp 925b808
Folding
skmp 099e443
attolang.md update
skmp bf4d01f
towards editor2
skmp fb3d96d
not perfect, but progress is progress
skmp 4120050
towards lambda link rendering
skmp 3d66499
lambda grab rendering
skmp 25cd373
Cleanup node_types2.h
skmp 1855ab5
node drawing: add side-bang and lambda grab only for flow nodes
skmp db492f7
better output mappings
skmp 21a2eab
better imports
skmp d2482e2
Add special handling for label and error nodes in editor rendering
skmp fe361ca
Add initial value support to decl_var input ports
skmp a2a0654
editor2: pin hovers
skmp 7a73090
editor2: move styles out
skmp 3d7904a
editor2: PinMapping
skmp 0522f0f
optionals are indeed optionals now
skmp 1768a5c
Split input_ports_optional
skmp 789589e
hover on + pin.
skmp f4fb025
optionally scaled tooltips
skmp 596bbcf
Increase default font size a bit
skmp 44d53aa
Renumber auto strings
skmp f2b387e
next_id
skmp 56f211b
Polymorphy for Nodes
skmp 9a7b2bd
more editor2 cleanups
skmp 85bc2fc
editor2: non overlap
skmp 733c6fa
Add Liberation Mono font support and license files
skmp d480da9
graphbuilder -> graph_builder
skmp 09d3d1f
ditry tracking
skmp ab32c54
Refactor dirty tracking methods in GraphBuilder
skmp 43c99c2
editor2: ditry state visualization
skmp bf8c9cd
graph rename
skmp 9104082
wire hovers
skmp 87e083e
node selection.
skmp 297bf7b
hover_item_ initial work
skmp 31178ae
ArgNet2 w/ builders
skmp 1812167
towards first class pins
skmp 231d04c
graph_builder rework
skmp 55ea34c
$empty, $unconnected
skmp fff59f8
$empty/$unconnected always
skmp 5d98972
refactor: consolidate FlowNodeBuilder and NetBuilder pointer type def…
skmp 3e9d3b1
alias fix from last commit
skmp 1c68687
feat: add find_or_null_node method to GraphBuilder and update usages
skmp d6ce2bd
add remap and pin index methods to FlowArg2 and update GraphBuilder a…
skmp a0d3c33
FlowArg2::name
skmp d55cf36
wire -> net in grahp_builder
skmp 5444e94
Wire has entry now
skmp cd8b1d6
cosmetics
skmp 9771f1e
wire hover functionality to highlight all wires sharing the same entr…
skmp 06177b0
mostly unified highlights
skmp c86850c
refine hover detection logic for pins, nodes, and wires; adjust thres…
skmp ed25319
multi select
skmp 0915017
output_va_args groundwork
skmp b484ada
output handling for flow and banged expressions; separate fixed outpu…
skmp 62c1a1d
fix non-bang nodes to have next post bangs
skmp 3389cc3
add output ports and num_outputs to node types; adjust flow node hand…
skmp a4c6917
update FlowArg2 name handling and add fq_name method; update editor t…
skmp 6c97640
enhance hover functionality to include +diamond pins in editor intera…
skmp 626cf8b
refactor node ID and net name handling; introduce sentinel entries an…
skmp 4a7d6c6
update node types to increase num_outputs from 1 to 2 for multiple nodes
skmp 753c051
as_Node/Net -> as_node/net, dead code deletion
skmp 1ae4778
Observer Pattern
skmp 243dc4f
Refactor node rendering and editor structure
skmp 0f5ca5c
Extract tooltip rendering functionality and style management for edit…
skmp 21e950d
Refactor editor structure to introduce IEditorPane interface
skmp f296f08
editor->window.cpp/h
skmp 9de4f08
Remove / #if LEGACY_EDITOR editor1
skmp a53d8a5
shift/alt + scroll = x/y pan
skmp 7dd3656
further decoulping refactors
skmp 722a591
move editor1 to legacy folder
skmp 5838b34
nets_editor concept
skmp 84dc2da
Add scroll pan speed to Editor2Style and update canvas panning logic
skmp 2aaa7f4
fix: shorten node ids
skmp 27617c5
in atto:0 import remove unconnected nets and replace with $unconnected
skmp 5702ccf
implement wire connection functionality in Editor2Pane and VisualEditor
skmp f7bb2b7
Add functionality to delete hovered items in VisualEditor and Editor2…
skmp 80bbd17
Merge branch 'rewrite'
skmp 12b9747
1Merge branch 'skmp/rewrite'
skmp ec9f709
Merge branch 'skmp/wirring-and-networking'
skmp f33a0be
Add documentation
skmp 073fe5b
Merge branch 'skmp/docs' into develop
skmp 6bb8d6c
Add comprehensive instructions and naming guidelines for the Organic …
skmp 3d9b6ad
Add comprehensive instructions and naming doc.
skmp 26f9eef
Add introductory documentation for the Organic Assembler
skmp 04bd88e
Add introductory podcast and notes for the Organic Assembler
skmp b7d0d56
Merge pull request #3 from nilware-io/podcast
skmp 7f97ed6
Add podcast file for "Growing Instruments with the Organic Assembler"
skmp 67f6b15
Merge pull request #2 from nilware-io/develop
skmp e5f63ce
Add YouTube link for the introductory podcast in README
skmp 652b313
update README.md
skmp d3af94d
Update README.md
skmp a90f9f4
linux fix imgui
skmp 0dea867
ci: Update CI workflow to trigger on stable and develop branches inst…
skmp 447c115
Add session context documentation for Organic Assembler project
skmp File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -5,4 +5,5 @@ | |
| /.vs | ||
| .generated/ | ||
| output/ | ||
| imgui.ini | ||
| imgui.ini | ||
| .atto/ | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -1,28 +1,36 @@ | ||||||
| # nanolang | ||||||
| # Organic Assembler | ||||||
|
|
||||||
| A visual dataflow programming language with a node-based editor, standalone compiler, and runtime. Programs are authored as flow graphs in `.nano` files and compiled to C++. See an [example program](scenes/klavier/main.nano) and the full [language specification](nanolang.md). | ||||||
| An Operating System for Instruments (Όργανα), written in attolang. Instruments are multimodal dataflow programs — authored as node graphs possibly using the **attoflow** editor, compiled, and run in real time. | ||||||
|
|
||||||
|  | ||||||
| Each instrument is a self-contained `.atto` program that defines its Functionality. The System compiles these programs runs them with hot-reload support. | ||||||
|
||||||
| Each instrument is a self-contained `.atto` program that defines its Functionality. The System compiles these programs runs them with hot-reload support. | |
| Each instrument is a self-contained `.atto` program that defines its functionality. The system compiles these programs and runs them with hot-reload support. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,135 @@ | ||
| # Continuation — Organic Assembler Session Context | ||
|
|
||
| *Date: 2026-04-06* | ||
|
|
||
| This file captures the active context, open threads, and memory state for the Organic Assembler project, for use as a handoff document or NotebookLM/LLM context seed. | ||
|
|
||
| --- | ||
|
|
||
| ## Project Identity | ||
|
|
||
| **Organic Assembler (orgasm)** is an **Operating System for Instruments** — a platform where instruments are multimodal dataflow programs authored as `.atto` node graphs, compiled by `attoc`, and run in real time by `attoruntime`. The visual editor is `attoflow`. The language is `attolang`. | ||
|
|
||
| - "Instrument" = a `.atto` program (not just audio — multimodal) | ||
| - "OS" = the runtime + editor + compiler ecosystem managing instrument lifecycle | ||
| - Repo: `nilware-io/orgasm` (GitHub) | ||
|
|
||
| --- | ||
|
|
||
| ## Session Work (this conversation) | ||
|
|
||
| ### Podcast documentation | ||
| - Created [docs/podcasts/introducing-orgasm.md](docs/podcasts/introducing-orgasm.md) — the podcast landing page | ||
| - Links: [SoundCloud](https://soundcloud.com/poiitidis/growing-instruments-with-the), [YouTube](https://youtu.be/ymzuD-oekFM), and the local [m4a file](docs/podcasts/Growing_instruments_with_the_Organic_Assembler.m4a) | ||
| - References [notes/introducing-orgasm.md](docs/podcasts/notes/introducing-orgasm.md) as the NotebookLM source | ||
| - Updated [README.md](README.md) to surface the podcast with both SoundCloud and YouTube links, right after the screenshot | ||
|
|
||
| --- | ||
|
|
||
| ## Active Project Threads (from memory) | ||
|
|
||
| ### 1. Type System Redesign (partially complete as of 2026-03-25) | ||
|
|
||
| **Completed:** | ||
| - `literal<T,V>` type representation; expression parser produces `ExprKind::Literal` for all literals | ||
| - Removed all legacy ExprKind values (IntLiteral, F32Literal, etc.) | ||
| - `symbol<name,type>` and `undefined_symbol<name>` types | ||
| - `TypeApply`: `$0<$1,$2>` parsed as speculative `<>` on identifiers resolving to types | ||
| - All nodes except `label` get shadow nodes; `decl_var` descriptor redesigned | ||
| - `build_context` and `build_registry` removed — replaced by future `decl` bang chain | ||
|
|
||
| **TODO:** | ||
| - Implement `decl` bang chain evaluation (compile-time interpreter) | ||
| - `decl_type` outputs `type<T>` | ||
| - Event names without `~` prefix | ||
| - Namespace `::` operator in expressions | ||
| - Type construction via calling (e.g. `f32(42)` as cast) | ||
| - Rewrite tests for new declaration/inference flow | ||
|
|
||
| --- | ||
|
|
||
| ### 2. Editor2 & GraphBuilder Refactor | ||
|
|
||
| **Completed:** | ||
| - `BuilderEntry` inheritance base with `IdCategory` (Node/Net) | ||
| - `FlowArg2` inheritance hierarchy: `ArgNet2`, `ArgNumber2`, `ArgString2`, `ArgExpr2` | ||
| - Dirty tracking: `GraphBuilder::mark_dirty()` / `is_dirty()` | ||
| - Sentinels: `$empty` (FlowNodeBuilder), `$unconnected` (NetBuilder) | ||
| - `NodeKind2`: Flow, Banged, Event, Declaration, Special | ||
| - v0→v1 migration: name-based port mapping, shadow folding, lambda `-as_lambda` stripping | ||
| - Hover system: `hover_item_` variant, `detect_hover()`, `draw_hover_effects()` | ||
| - Pin shapes: Circle (data), Square (bang), Triangle (lambda), Diamond (va_args/optional) | ||
| - Liberation Mono font embedded via CMake `file(READ HEX)` | ||
|
|
||
| --- | ||
|
|
||
| ### 3. DLL Host & Wire Architecture (design phase) | ||
|
|
||
| **attohost.exe:** | ||
| - Separate host process — editor spawns it, it owns SDL window/audio/ImGui | ||
| - attoc generates `.dll` (SHARED); attohost does `LoadLibrary` → `on_start` | ||
| - Crash isolation; hot-reload without restarting editor | ||
|
|
||
| **wire\<T\>:** | ||
| - Release: typedef to `T` (zero overhead) | ||
| - Inspect: wraps value with metadata, notifies IPC channel | ||
| - Enables live inspection, value injection, oscilloscope view per wire | ||
|
|
||
| **First-class wires in .atto format:** | ||
| - `[[wire]]` top-level entities with `guid`, `from`, `to` | ||
| - Replace current `connections` array on nodes | ||
| - guid stable across node renames — used for inspector subscriptions | ||
|
|
||
| **IPC:** | ||
| - attoflow owns named pipe; attohost connects on startup | ||
| - attohost publishes wire table on connect; sends dirty updates per frame | ||
| - attoflow sends back: value overrides, reload signal, shutdown | ||
|
|
||
| --- | ||
|
|
||
| ### 4. Nested Lambda Scope Bug (open) | ||
|
|
||
| **Problem:** `collect_lambda_params` doesn't respect lambda boundaries — outer stored lambda params leak into inner `lock`/`iterate` lambdas. A `param` node reachable through an inner lambda's subgraph is incorrectly treated as belonging to the inner lambda. | ||
|
|
||
| **Proper fix:** Pre-inference pass that: | ||
| 1. Identifies all lambda boundaries (every `as_lambda` → Lambda pin connection) | ||
| 2. Assigns each node to its innermost lambda scope | ||
| 3. `collect_lambda_params` only collects from nodes owned by the current scope | ||
|
|
||
| --- | ||
|
|
||
| ### 5. node.args Elimination (future work) | ||
|
|
||
| `node.args` is still a string tokenized at runtime ~40+ times across codegen, inference, type_utils, editor, serial. Goal: pre-extract all metadata into structured fields at load time; `node.args` becomes display/serialization only. | ||
|
|
||
| Migration order: codegen first (highest call count), then inference, then editor. | ||
|
|
||
| --- | ||
|
|
||
| ### 6. Web Target (deferred design) | ||
|
|
||
| - Editor compiled to Emscripten, runs in browser | ||
| - "Run" posts `.atto` to compile server on hardened Pi | ||
| - Server: attoc → C++ → emcc → returns `.wasm` | ||
| - Container: no network inside, 60s timeout, 512MB RAM, read-only rootfs | ||
| - Attack surface bounded to `.atto` input (no arbitrary C++ injection) | ||
|
|
||
| --- | ||
|
|
||
| ## Key Files | ||
|
|
||
| | Path | Purpose | | ||
| |------|---------| | ||
| | [README.md](README.md) | Project overview, components, build instructions | | ||
| | [docs/attolang.md](docs/attolang.md) | Full language specification | | ||
| | [docs/architecture.md](docs/architecture.md) | Architectural layers | | ||
| | [docs/instructions.md](docs/instructions.md) | Guide for operating on the codebase | | ||
| | [docs/patterns.md](docs/patterns.md) | Instrument patterns | | ||
| | [docs/thinking.md](docs/thinking.md) | Design philosophy | | ||
| | [docs/style.md](docs/style.md) | Code style | | ||
| | [docs/coding.md](docs/coding.md) | Coding conventions | | ||
| | [docs/changelog.md](docs/changelog.md) | Change history | | ||
| | [docs/names.md](docs/names.md) | Naming philosophy | | ||
| | [docs/podcasts/introducing-orgasm.md](docs/podcasts/introducing-orgasm.md) | Podcast landing page | | ||
| | [docs/podcasts/notes/introducing-orgasm.md](docs/podcasts/notes/introducing-orgasm.md) | NotebookLM source notes | | ||
| | [scenes/klavier/main.atto](scenes/klavier/main.atto) | Example instrument | |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CI no longer runs for pushes/PRs targeting 'main'. If the default branch is still main (the workflow previously targeted it), this effectively disables CI for the primary branch. Consider including main as well (or confirm the repo default branch has been migrated to stable/develop).