Skip to content

Instantly share code, notes, and snippets.

View mxstrand's full-sized avatar
😺
I like turtles.

Mike Strand mxstrand

😺
I like turtles.
View GitHub Profile
@mxstrand
mxstrand / topic-nav-metadata.jpg
Last active April 15, 2026 22:37
Screenshot for linkorb/nebula#1330 — topic nav metadata
topic-nav-metadata.jpg
@mxstrand
mxstrand / screenshot.jpg
Last active April 15, 2026 19:41
topic-search-by-member screenshot
screenshot.jpg
@mxstrand
mxstrand / revocation-flow.svg
Created April 1, 2026 21:26
Authorization Revocation Flow — Step 1 diagram
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@mxstrand
mxstrand / reference.svg
Created March 6, 2026 01:42
SVG reference glossary — visual vocabulary for hand-crafted SVG diagrams
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@mxstrand
mxstrand / echo.svg
Created March 6, 2026 01:42
Echo SVG architecture diagram with SMIL lifecycle animation
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@mxstrand
mxstrand / fix-topic-creator-dropped.md
Created February 25, 2026 22:49
Fix: topic creator dropped from member list for pre-July-2024 topics (cyans-web ExportToNebulaCommand)

Bug: Topic creator dropped from participant list during export/import

Problem

Topics created before July 2024 don't have createdBy or createdAt stored in the Evolver state. In ExportToNebulaCommand::extractMembersFromEvents(), the creator is only added to the members list when $createdBy is truthy:

$createdBy = $topicState['createdBy'] ?? null;  // null for pre-July-2024 topics

// Add creator as owner (always active)
@mxstrand
mxstrand / test-fix.html
Created January 30, 2026 01:00
Test fixed base64
<!DOCTYPE html>
<html><head><title>Test</title></head><body>
<h1>Test Results: Topic Search - PASS</h1>
<p>Scenario 1:</p>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAAMgCAIAAADz+lisAAAQAElEQVR4nOzdBYAU9d/H8bk7urs7RBpBUkCQRpAQBAUbUQzsbsEEFBUBRVEUlFBCGgxCSaWkW7rz6OPu+bA/nGf+u7d7Sxwc/N6vx4f/3uzu7PT8Pr/v7GyyuLg4BwAAAACAq10yBwAAAAAACxCAAQAAAABWIAADAAAAAKxAAAYAAAAAWIEADAAAAACwAgEYAAAAAGAFAjAAAAAAwAoEYAAAAACAFQjAAAAAAAArEIABAAAAAFYgAAMAAAAArEAABgAAAABYgQAMAAAAALACARgAAAAAYAUCMAAAAADACkED8JCfJ0RERERFRUbp/yMjIxwnUg+TRWlgpP7TED3r+1eP9SrfA/0TERsbp3fExsUlj0qmQXH624nVCCMjzrwmzonT4wgnIi7O9yDC90+E+2dExZLFHQAAAAAALrbQFeAIw/Gl3wg3rfqYGOz790xCVqjds3//lh179h0+UqvydXMWLEmbJk3+PDnzZMsSFZHM98Yz2TciLsIdtd8nKRv/7zAAAAAAAC6aEAHYl3FN+nUj7//kXh/zvxERfy1ZunHLNicq+cnTcf+s3rBl977kyQ+t37otR5ZMta+vkCZlCo1HAfhMpfdMrdeJc84+cHO1eQEAAAAAAIkhMugzEU6E+Z+4uP/Pv2dKwWeduTI64sy/+t8pv0//Z8XqzJky7d63P1PG9FGRcdkzZ9h7KDpjxkwnTpwcO23WqdOxJkybLG1G7paXzRBfPnYAAAAAAEgMkSGe830v979IGuFE/PfVX5NdI898BfjMgPWbNq1Yt6F2japLli2/vXnDetUq5syeo/p15bu0b
@mxstrand
mxstrand / test-medium.html
Created January 30, 2026 00:59
Test medium 4 images
<!DOCTYPE html>
<html><head><title>Test Results</title></head><body>
<h1>Test Results: Topic Search - PASS (8/8)</h1>
<h3>Scenario 1</h3>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAAMgCAIAAADz+lisAAAQAElEQVR4nOzdBYAU9d/H8bk7urs7
RBpBUkCQRpAQBAUbUQzsbsEEFBUBRVEUlFBCGgxCSaWkW7rz6OPu+bA/nGf+u7d7Sxwc/N6vx4f/
3uzu7PT8Pr/v7GyyuLg4BwAAAACAq10yBwAAAAAACxCAAQAAAABWIAADAAAAAKxAAAYAAAAAWIEA
DAAAAACwAgEYAAAAAGAFAjAAAAAAwAoEYAAAAACAFQjAAAAAAAArEIABAAAAAFYgAAMAAAAArEAA
BgAAAABYgQAMAAAAALACARgAAAAAYAUCMAAAAADACkED8JCfJ0RERERFRUbp/yMjIxwnUg+TRWlg
pP7TED3r+1eP9SrfA/0TERsbp3fExsUlj0qmQXH624nVCCMjzrwmzonT4wgnIi7O9yDC90+E+2dE
@mxstrand
mxstrand / test-minimal.html
Created January 30, 2026 00:58
Test minimal
<!DOCTYPE html>
<html><head><title>Test</title></head><body>
<h1>Test Results: Topic Search - PASS</h1>
<p>Scenario 1:</p>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAAMgCAIAAADz+lisAAAQAElEQVR4nOzdBYAU9d/H8bk7urs7
RBpBUkCQRpAQBAUbUQzsbsEEFBUBRVEUlFBCGgxCSaWkW7rz6OPu+bA/nGf+u7d7Sxwc/N6vx4f/
3uzu7PT8Pr/v7GyyuLg4BwAAAACAq10yBwAAAAAACxCAAQAAAABWIAADAAAAAKxAAAYAAAAAWIEA
DAAAAACwAgEYAAAAAGAFAjAAAAAAwAoEYAAAAACAFQjAAAAAAAArEIABAAAAAFYgAAMAAAAArEAA
BgAAAABYgQAMAAAAALACARgAAAAAYAUCMAAAAADACkED8JCfJ0RERERFRUbp/yMjIxwnUg+TRWlg
pP7TED3r+1eP9SrfA/0TERsbp3fExsUlj0qmQXH624nVCCMjzrwmzonT4wgnIi7O9yDC90+E+2dE
@mxstrand
mxstrand / gist:8742165
Created January 31, 2014 20:16
iron_worker upload ERROR
can't find src with path='./node_modules'
/Users/mxstrand/.rvm/gems/ruby-2.0.0-p247/gems/iron_core-1.0.3/lib/iron_core/iron_logger.rb:50:in `raise_exception': Can't find src with path='./node_modules' (IronCore::Error)
from /Users/mxstrand/.rvm/gems/ruby-2.0.0-p247/gems/iron_core-1.0.3/lib/iron_core/iron_logger.rb:27:in `error'
from /Users/mxstrand/.rvm/gems/ruby-2.0.0-p247/gems/iron_worker_ng-1.0.4/lib/iron_worker_ng/feature/base.rb:19:in `block in container_add'
from /Users/mxstrand/.rvm/gems/ruby-2.0.0-p247/gems/iron_worker_ng-1.0.4/lib/iron_worker_ng/fetcher.rb:76:in `call'
from /Users/mxstrand/.rvm/gems/ruby-2.0.0-p247/gems/iron_worker_ng-1.0.4/lib/iron_worker_ng/fetcher.rb:76:in `fetch_to_file'
from /Users/mxstrand/.rvm/gems/ruby-2.0.0-p247/gems/iron_worker_ng-1.0.4/lib/iron_worker_ng/feature/base.rb:17:in `container_add'
from /Users/mxstrand/.rvm/gems/ruby-2.0.0-p247/gems/iron_worker_ng-1.0.4/lib/iron_worker_ng/feature/common/merge_dir.rb:20:in `bundle'
from /Users/mxstrand/.rvm/gems/ruby-2.0.0-