Skip to content

Releases

v0.1.6 - Mask Shop

Choose a tag to compare

@jake1104 jake1104 released this 09 Nov 10:03

v0.1.6 — Mask Shop

Nandmorphic gets a full visual identity, a phone layout, and fixes for two long-standing interaction bugs.

Visual system

  • Mask Shop direction: the canvas is a die sheet. Cells have square bond-pad ports and a pin-1 marker, wires are routed metal, and a live title block reads Level, Cells, Clk, X, Y, Zoom, Sheet and Rev.
  • IBM Plex Sans Condensed + IBM Plex Mono: mono is reserved for figures, counters, coordinates and cell/sheet IDs. UI text has an 11px floor and five size steps.
  • Photoresist dark and vellum light themes: oxide mint, copper, phosphor and iridescent violet; CONST moves to neutral grey so the node palette stays at four data hues.
  • Accent discipline: colour lives on data and one control. The active tab is an ink rule; the library count, sheet marks and slider are neutral.

Responsive workbench

  • At ≤720px the Cell Library becomes a horizontal strip and the full tool rack folds behind a Tools sheet.
  • The first phone view fits the whole seed circuit instead of clipping its output.
  • Page margins are 16px, focus outlines are visible, and reduced-motion is respected.

Fixes

  • Theme changes now repaint the canvas immediately (CSS-variable cache refresh).
  • Pressing E to encapsulate no longer types e into the naming field.
  • Fit reserves less padding, so circuits fill the view properly.
  • Neutral outline icons replace the ⚙ / ✕ glyphs in the library.

Docs

  • README rewritten for v0.1.6 with concepts, controls, build/deploy rules, design tokens and a smoke checklist.

Full diff: v0.1.4...v0.1.6

v0.1.5

Choose a tag to compare

@jake1104 jake1104 released this 20 Sep 00:28

Encapsulation gating and rendering performance release.

Added

  • Encapsulate now requires a closed circuit: every selected node's inputs must come from inside the selection, and an output port that feeds an unselected node must also be consumed by at least one selected node.
  • The toolbar Encapsulate button enables and disables live as wires are connected, disconnected, rerouted, or edited in the inspector.

Performance

  • The canvas only redraws when the engine state or interaction state actually changes; hover checks compare by value instead of forcing idle repaints.
  • CSS variable lookups are cached per theme; per-frame node boxes are computed once and shared with wire and node drawing.
  • The tab bar rebuilds only when its title, dirty flags, or active level change; status messages skip identical text.

v0.1.4

Choose a tag to compare

@jake1104 jake1104 released this 16 Sep 10:16

Interaction and performance release.

Fixed

  • Hit-testing matches what is drawn: port hit radius 16px to 7px (drawn circle is 5px), node picking is body-box only, wire snap radius 26px to 12px.
  • Inspector port reorder is now persisted to the shared definition and survives commits and reloads; fixed the shared input-port swap touching output markers.
  • Shared port names stay in sync with internal INPUT/OUTPUT node names in both directions.
  • I/O node port names are locked to the node name (they were the same setting twice).

Performance

  • evaluate() caches results until the next edit; positional and value-only edits keep the topology analysis via bumpLight().
  • Dirty checking is O(1) version comparison instead of per-frame full-workspace stringify.
  • Circuits with more than 12 inputs bypass behavioral dedup instead of hanging on 2^n truth-table simulations; commits mutate the parent snapshot in place.

Added

  • Each library entry has a settings button opening the same editor as double-click.

Known limitation

  • Large (>12 inputs) circuits allocate a fresh definition on every save, so duplicates can accumulate; orphan-definition cleanup is planned.

v0.1.3

Choose a tag to compare

@jake1104 jake1104 released this 14 Sep 10:52

Fixes

  • Sequential/clock circuits now work: latched state used to be wiped on every edit and clock step, so feedback loops never held state. Clocked loops latch correctly now (latches hold, oscillator rings advance).
  • Fixed inCount is not defined crash when hovering wire snap targets (unresolvable import aliases in the single-file bundle).
  • Single-file bundler now preserves import aliases, so this class of bug cannot resurface.

Behavior notes

  • A loop of two NOTs is a bistable latch (holds state); a ring of three NOTs oscillates, advancing one step per clock edge.

v0.1.2

Choose a tag to compare

@jake1104 jake1104 released this 13 Sep 04:26

Shared custom nodes: instances of the same kind now share name and input/output ports — edit one, all update

CONST node (shortcut K): click to toggle in dev mode only, locked in run mode. When encapsulated, it enters the custom node as a fixed internal value instead of an input port

Per-instance memo and color (edited in the inspector, excluded from custom sharing)

Wire UX: output-port hover highlight while dragging from an input port, re-route reconnect fix

v0.1.1: single-file GitHub Pages deploy

Choose a tag to compare

@jake1104 jake1104 released this 11 Sep 08:16

Single-file index.html build (build-single.mjs) with release-triggered GitHub Pages deployment.