Monorepo for Aesthetic.Computer aesthetic.computer
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix(pack): hide corner HUD label in packed KidLisp bundles

Pack mode sets acPACK_MODE but disk.mjs only checked URL ?nolabel param,
which standalone bundles don't have. Now hideLabel defaults true in pack mode.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

+38 -35
+2
system/public/aesthetic.computer/disks/_test-hook.mjs
··· 1 + // _test-hook, 2026.3.02 2 + // A temporary test piece for hook validation.
+36 -35
system/public/aesthetic.computer/lib/disk.mjs
··· 6238 6238 mask: graph.mask, 6239 6239 unmask: graph.unmask, 6240 6240 steal: graph.steal, 6241 - putback: graph.putback, skip: graph.skip, 6242 - scroll: graph.scroll, 6243 - flip: graph.flip, 6244 - spin: graph.spin, 6245 - sort: graph.sort, 6246 - zoom: graph.zoom, 6241 + putback: graph.putback, skip: graph.skip, 6242 + scroll: graph.scroll, 6243 + flip: graph.flip, 6244 + spin: graph.spin, 6245 + sort: graph.sort, 6246 + zoom: graph.zoom, 6247 6247 suck: graph.suck, 6248 6248 blur: function(radius = 1) { 6249 6249 // 🔧 FIX: Ensure blur operates on current buffer context ··· 6432 6432 const shouldReset = resolvedSource.includes('wipe') && !accumulate; // Don't reset in accumulation mode 6433 6433 6434 6434 // Check if source contains animation-related commands that need fresh execution 6435 - const animationCommands = ['rainbow', 'zebra', 'time', 'random', 'noise', 'clock', 'scroll', 'zoom', 'flip', 'contrast', 'fade']; 6435 + const animationCommands = ['rainbow', 'zebra', 'time', 'random', 'noise', 'clock', 'scroll', 'zoom', 'flip', 'contrast', 'fade']; 6436 6436 const hasTimingCommands = /\d+\.?\d*s\b/.test(resolvedSource); // Detect timing like "0.15s", "1s", etc. 6437 6437 const hasAnimationCommands = animationCommands.some(cmd => resolvedSource.includes(cmd)); 6438 6438 const isDollarCode = source && source.startsWith && source.startsWith('$'); // Dollar codes should always refresh ··· 6546 6546 6547 6547 // Check if source contains timing expressions that need proper scheduling 6548 6548 const hasTimingExpressions = /\d+\.?\d*s(\.\.\.|!)?/.test(resolvedSource); 6549 - // Check if source contains scroll/zoom/flip that needs deferred execution 6550 - const hasScrollZoom = /\(\s*(scroll|zoom|flip)\s/.test(resolvedSource); 6549 + // Check if source contains scroll/zoom/flip that needs deferred execution 6550 + const hasScrollZoom = /\(\s*(scroll|zoom|flip)\s/.test(resolvedSource); 6551 6551 6552 6552 6553 6553 ··· 6556 6556 // Don't force immediate execution for timing expressions 6557 6557 globalKidLispInstance.embeddedLayers = null; // Still clear embedded layers 6558 6558 } else if (hasScrollZoom) { 6559 - // console.log(`🎯 Detected scroll/zoom/flip, allowing deferred execution`); 6560 - // Allow scroll/zoom/flip to use deferred execution but clear embedded layers 6561 - globalKidLispInstance.inEmbedPhase = false; // Allow deferring for scroll/zoom/flip 6562 - globalKidLispInstance.isNestedInstance = false; // Allow deferring for scroll/zoom/flip 6563 - globalKidLispInstance.embeddedLayers = null; // Clear any leftover embedded layers 6564 - } else { 6565 - // console.log(`🎯 No timing/scroll/zoom/flip detected, forcing immediate execution`); 6566 - // Force immediate execution mode for simplified kidlisp() calls without timing or scroll/zoom/flip 6567 - globalKidLispInstance.inEmbedPhase = true; // Prevent deferring 6568 - globalKidLispInstance.isNestedInstance = true; // Enable immediate execution 6569 - globalKidLispInstance.embeddedLayers = null; // Clear any leftover embedded layers 6559 + // console.log(`🎯 Detected scroll/zoom/flip, allowing deferred execution`); 6560 + // Allow scroll/zoom/flip to use deferred execution but clear embedded layers 6561 + globalKidLispInstance.inEmbedPhase = false; // Allow deferring for scroll/zoom/flip 6562 + globalKidLispInstance.isNestedInstance = false; // Allow deferring for scroll/zoom/flip 6563 + globalKidLispInstance.embeddedLayers = null; // Clear any leftover embedded layers 6564 + } else { 6565 + // console.log(`🎯 No timing/scroll/zoom/flip detected, forcing immediate execution`); 6566 + // Force immediate execution mode for simplified kidlisp() calls without timing or scroll/zoom/flip 6567 + globalKidLispInstance.inEmbedPhase = true; // Prevent deferring 6568 + globalKidLispInstance.isNestedInstance = true; // Enable immediate execution 6569 + globalKidLispInstance.embeddedLayers = null; // Clear any leftover embedded layers 6570 6570 } 6571 6571 6572 6572 executeLispCode(resolvedSource, api, false); // false = not accumulating, fresh painting ··· 6669 6669 6670 6670 // Check if source contains timing expressions that need proper scheduling 6671 6671 const hasTimingExpressions = /\d+\.?\d*s(\.\.\.|!)?/.test(resolvedSource); 6672 - // Check if source contains scroll/zoom/flip that needs deferred execution 6673 - const hasScrollZoom = /\(\s*(scroll|zoom|flip)\s/.test(resolvedSource); 6672 + // Check if source contains scroll/zoom/flip that needs deferred execution 6673 + const hasScrollZoom = /\(\s*(scroll|zoom|flip)\s/.test(resolvedSource); 6674 6674 6675 6675 // Only log occasionally to reduce console spam 6676 6676 ··· 6680 6680 // Don't force immediate execution for timing expressions 6681 6681 globalKidLispInstance.embeddedLayers = null; // Still clear embedded layers 6682 6682 } else if (hasScrollZoom) { 6683 - // console.log(`🎯 Detected scroll/zoom/flip in accumulation, allowing deferred execution`); 6684 - // Allow scroll/zoom/flip to use deferred execution but clear embedded layers 6685 - globalKidLispInstance.inEmbedPhase = false; // Allow deferring for scroll/zoom/flip 6686 - globalKidLispInstance.isNestedInstance = false; // Allow deferring for scroll/zoom/flip 6687 - globalKidLispInstance.embeddedLayers = null; // Clear any leftover embedded layers 6688 - } else { 6689 - // console.log(`🎯 No timing/scroll/zoom/flip in accumulation, forcing immediate execution`); 6690 - // Force immediate execution mode for simplified kidlisp() calls without timing or scroll/zoom/flip 6691 - globalKidLispInstance.inEmbedPhase = true; // Prevent deferring 6692 - globalKidLispInstance.isNestedInstance = true; // Enable immediate execution 6693 - globalKidLispInstance.embeddedLayers = null; // Clear any leftover embedded layers 6683 + // console.log(`🎯 Detected scroll/zoom/flip in accumulation, allowing deferred execution`); 6684 + // Allow scroll/zoom/flip to use deferred execution but clear embedded layers 6685 + globalKidLispInstance.inEmbedPhase = false; // Allow deferring for scroll/zoom/flip 6686 + globalKidLispInstance.isNestedInstance = false; // Allow deferring for scroll/zoom/flip 6687 + globalKidLispInstance.embeddedLayers = null; // Clear any leftover embedded layers 6688 + } else { 6689 + // console.log(`🎯 No timing/scroll/zoom/flip in accumulation, forcing immediate execution`); 6690 + // Force immediate execution mode for simplified kidlisp() calls without timing or scroll/zoom/flip 6691 + globalKidLispInstance.inEmbedPhase = true; // Prevent deferring 6692 + globalKidLispInstance.isNestedInstance = true; // Enable immediate execution 6693 + globalKidLispInstance.embeddedLayers = null; // Clear any leftover embedded layers 6694 6694 } 6695 6695 6696 6696 executeLispCode(resolvedSource, api, true); // true = accumulating on existing painting ··· 9382 9382 cachedClockCode = null; 9383 9383 9384 9384 // Parse search parameters properly to check for nolabel 9385 - hideLabel = false; 9385 + // Also hide label in pack mode (standalone bundles have no URL params) 9386 + hideLabel = (typeof window !== "undefined" && window.acPACK_MODE) || false; 9386 9387 if (parsed.search) { 9387 9388 const searchParams = new URLSearchParams(parsed.search); 9388 - hideLabel = searchParams.has("nolabel"); 9389 + if (searchParams.has("nolabel")) hideLabel = true; 9389 9390 } 9390 9391 9391 9392 currentColon = colon;