luv

Workshop wiki

pages

Pages

Every page of the wiki with its headings. Each heading is a figure with a stable ID; work marks carry their status.

The luv workshop wikiA workshop, not an authorityString figuresWork marksPaths into the initial materialEngineering the implementationGPU semantics and implementationThe little block worldThe wiki itself
Technical debt that multiplies truthsWhat this audit counts as debtRanked cut list1. The session has several resource ownership truthsDONE Give rendering resources one transactional owner2. McCLIM implements one open command vocabulary four timesDONE Make command phases an open protocol3. The shared shader language is trapped inside the SPIR-V backendDONE Give the shared shader graph its own home4. The HAL boundary is only half-ownedDONE Make the portable HAL boundary tell the whole truth5. Voxel lighting keeps oracle, experiment, and production liveDONE Keep one production light solver6. Serial umbrella systems conceal useful dependency islandsDONE Expose the shader, frontier, and reference islands already earned7. A high-confidence deletion queueDONE Delete the queue without deleting historyA workable order
The little block world and its possible worldsA game-shaped path through the engineThe current proofThe screenshot gazetteer names gameplay viewsWhat the first extension establishesA checkpoint saves the world description, not its materializationDONE Persist and resume the authored little worldChunk production is an ownership boundaryLandmarks from working voxel enginesA world is not necessarily its finest materializationThings with identity and values at sitesBlock kinds, states, and exceptional entitiesThe first animal is an entity, not a fieldRiding is a focus that movesTODO Let the animals be part of the saved worldThe player has a body, and the body holds thingsThe phone is a wall terminal you can carryThe sequence that stays funPaths into the designQuestions to keep open
The luvcraft showcase gazetteerThe showcase is an atlas with three lanesPre-noon light on the little worldThe sky deserves one fixed camera across a whole dayCrystal afterglow shows luminous materialsA terminal is a place, a pane, and a carried thingPlayer instruments should be readable in contextWorld-native panes should keep their depth cuesInhabitants need portraits and motionAgent work has four visible surfacesPhysics is best shown with causalityThe birthday world is the authored ensemble shotA world within a world needs its own folioReference plates make failures legibleEvery still has a motion companion when time mattersDONE Author the pre-noon ridgeDONE Open the phone-first galleryDONE Put action, inhabitants, and authored surfaces in the gallery
A terminal in the little worldA terminal is a world-native interactive surfaceThe McCLIM gadget leaves a useful interaction seamModal focus is a player relationshipGhostty owns terminal semantics, not the surrounding applicationPTY traffic has one serialized ownerRender state is the frame boundaryViewport cells form a finite domainCell presentation is a derived materializationDraw populations are narrow columnar projectionsDONE The derived 2 by 2 block wall exposed the wrong abstractionAdjacent terminal-material blocks define one unified display surfaceThe terminal grid remains authoritative through SlugNEXT Bridge styled Ghostty render-state rows into the block wallDONE Attach a live PTY independently of the render boundary
Field notes on four agent harnessesFour earlier harnesses, read for what luv can borrowFroth: a tool result is a tree of blocks, not a stringFroth: blobs plus a recursive pager teach the model to stop piping into headFroth: context is assembled for the cache, and the prompt is a page you can openFroth: live evaluation as the agent's native interface, with a detachable clockFroth: parallel tools with a prepare/commit split, and control by button rather than allowlistFroth: one span primitive, one firehose, and a patch model over every provider streamSheaf: six characters address anything, resolved through the graphSheaf: an append-only quad log with a working set, and doctrine about how to read itSheaf: typed tool results with two renderings, and reading collapsed by defaultSheaf: retrieval variants, persisted context, and one URL in four representationsNxt: one coroutine runtime under I/O, tools, and the terminalNxt: hope, or the value or the work to get itNxt: a hung agent is a question you can ask the processNxt: traces as Arrow, rendered as cassettes through XSLTNxt: a HUD pinned under scrolling output, drawn from typed diffsNxt: tools as concepts, failures as values, streams parsed as grammarsSwash: a shell command is a session with a host, and the host outlives youSwash: run returns in three seconds or a screenful, and says how to followSwash: TTY sessions with a screen you can read as textSwash: contexts as journal facts, and the log projected as RDFWhat the four agree onDONE A luv agent surface would inherit these seams
Autolith: a primer on an agent that is a Lisp imageAutolith is a terminal agent that lives inside the SBCL image it can editFour processes and one packageThe prompt line is a REPL; prose is sugar for (prompt ...)The system prompt is one format template rebuilt for every requestRequest-local context: contributors, classes, a token budget, and a trailing developer messageTools are a CLOS registry with closed JSON schemas and exactly one bounded result per callOn the wire the conversation is Responses items, and tool calls run one at a timeResources: revision-gated reads with opaque aliases and explicit elisionsShell: classify, sandbox, wait ten seconds, then hand off the same joblisp.*: named, heap-isolated SBCL REPLs with saved images and pinned sourceself.*: evaluate, redefine, and set the running image with a journal and an undoRestarts are a tool argumentself.commit: private image commits, a clean replay probe, forked generations, and recoveryChildren, jobs, and yield.submit; skills and MCP as request-local contextDurable state is readable forms: append-only conversations, memories, agenda, papercuts, vaultWhere Autolith agrees with the other four, and where it does notWhat luv could take from Autolith
An agent in the little worldThe agent surface is a command table, a view, and a handle spaceA tool is a CLIM command whose arguments are presentation typesA tool result is a presentation, and the model reads it under a viewHandles are presentation historyThe cassette is one presentation fileDraw and print: live cards and committed recordsA shell scope is a session object with a screen and an observationThe agent has a bodyThe turn runs beside the canvas, and commands cross by mailboxA proposal is a temporary possible worldA glance is an image and the small truth that frames itIDEA Authored edits form sparse swaths, not another terrain fieldIDEA Terrain summits are born at peaks and merge at saddlesDONE Give embodied agents a truthful third-person glanceDONE Give construction tools a visible possible worldDONE Wire three commands into an agent and draw their cassettesThe gnome is an agent occupying a cell, not a blockDONE Discrete destinations, continuously embodiedNEXT Parameterized M-x prompts through presentation types
McCLIM surfaces in the worldThe first McCLIM surfaces reached the world as rastersA terminal is sharp at any distance because its glyphs are geometryThe PDF sheet made the difference measurableA backing texture is a fallback, not a surfaceDONE Draw McCLIM text as world geometryDONE Replay the complete McCLIM stream at its destination
The shared Lisp application workbenchThe workbench belongs to the Lisp applicationOne quiet line is the default global surfaceM-x and the metabar reveal one application vocabularyApplication panels are retained GPU commands, not pane texturesCaptures reserve the evidence they ownLive replacement and stopping publish whole outcomesThe language-agent harness is not the gnomeDONE Extract the application workbench beneath both games
Field notes on Box3D's architectureScope and methodAn id is an index, a generation, and a worldStable sparse structs point into moving dense arraysMemory is four allocators, none of them generalSolver sets sort the world by simulation temperatureThe Soft Step solver is a small loop with careful phasesGraph coloring is what buys parallelism and SIMD at onceIslands are persistent, merged eagerly, split lazilyContacts are a state machine that begins at AABB overlapDeterminism is a property of the whole design, not a modeEvents are buffered facts, polled after the stepThe math is chosen for determinism and locality, not generalityWhat "extensive SIMD" concretely means hereWhat Box3D gives luv to think with
Domains, bundles, and materialized worldsThe apparent CLOS–SoA contradictionDispatch on descriptions; compute on domainsIdentity does not come from being addressableWhat Moppe's Bundle demonstratesA finite domain is more than dimensionsBundle means a checked materializationLogical fields and physical representationsColumnar layout, materialization, and policy are separateRow meaning binds once; raw lanes runDONE Extract a quantity-aware columnar bufferDONE Bind fixed columnar materializations to finite domainsDONE Percolate domain-bound representations through voxel storageNEXT Give dynamic columnar populations explicit compactionA columnar buffer is not one hot sequenceChunk boundaries need an environmentLevel of detail changes the schema as well as the spacingProducts follow ownership and lifecycleThe first Lisp atelier should stay ordinaryWhat this page does not decide
Field notes on measures: dim-numbers in 1992 Common LispWhat this page studiesThe prime-ratio encoding of dimensionRuntime objects, reader syntax, and the environment argumentWhat the package never had
Field notes on mp-units: abstractions beyond dimensionWhat this page studiesThree abstractions: point, absolute, deltaCharacter: two orthogonal axes, and why the type cannot tell youLogarithmic quantities as affine structureSpecifiers on the spec: one declaration site for meaningIDEA Exposure as a logarithmic level in the sky model
The GPU API and its backend proofsContract, mechanism, and open proof stay distinctThe portable GPU API is a tested seam, not a complete contractWebGPU is a landmark, not luv's specificationGPU work crosses several timelinesInspectable commands are protocol inputs, not a retained command IRRecorded and submitted work must own their dependenciesEach backend has a completion frontier of a different extentDestroy is logically immediate and physically conditionalExplicit destruction is the discipline; collection is only a safety netVulkan frame slots are pacing clients of the frontierUsage names hazards; each backend still owns the synchronization proofHost access is still a deliberately narrow pathThe remaining questions are local and testable
Seeing a frame on the CPUFrame time is several clocksDONE Trace one real frame with nested CPU zonesAmbient telemetry is a bounded semantic skeletonThe first ambient-zone censusDONE Convert the outer runtime boundariesDONE Stream one chunk window under measurementThe game names usage; backends realize hazardsTODO Reuse Metal frame submission resourcesTODO Separate drawable pacing from encoding distributions
Mathematical shaders as live Lisp objectsSource mathematics and machine form are different viewsThe block pipeline is the first real clientMethods are live definition identityExpressions, declarations, and bindings are objectsShader functions are graphs; source abstractions are syntaxOne source language can have target-owned effectsDONE Share function application across arithmetic and shader realizationsSemantic maps are not merely matrix-shaped valuesMcCLIM presents the relationshipWhat this does not decide
Slug: Bézier outlines in the pixel shaderThe 2026 release removes two different restrictionsA pixel asks the outline for its windingRoot eligibility, not a floating-point range test, supplies robustnessCoverage turns intersections into antialiasingBands make exact curves affordableThe 2026 reference is not the 2017 sampleDynamic dilation is a rasterization guaranteeDONE The reference's shape, with its constants as knobsDONE One fixed contour proves luv's pixel-stage mathematicsThe fixed proof delineates the first milestoneFull Slug is a structured fold over indexed outline dataMcCLIM already exposes the TrueType contour boundaryDONE Teach the shared language Slug's structured band foldDONE Pack arbitrary quadratic contours into Slug bandsHarfBuzz places a run; Slug draws indexed outlinesDONE Shape and draw a HarfBuzz text run through SlugDONE Put a shaped run into the moving worldDONE Cache shaping and device glyph outlinesDONE Pack one atlas and issue one instanced text drawDONE Select spatial bands and scale coverage from fragment derivativesDONE One distance function draws the roundrect family analyticallyNEXT Compare Slug coverage at glyph edges
The native Metal 4 backendThe seams now meet in one Metal 4 drawA native Metal backend now stands beside VulkanMetal 4's explicit model matches the Vulkan layerArgument tables realize semantic binding groupsSDL remains the platform shellThe typed shader specification is already the shared IRTarget-specific lowering stays open and inspectableGenerated MSL remains a view of semantic objectsThe Metal 4 compiler belongs to the live backendThe second backend tests apparently portable namesDONE Present a Metal clear through the existing SDL canvasThe first live pipeline is the backend thresholdDONE Lower one mathematical shader directly to MSLDONE Join the proofs in one live Metal pipelineDONE Retire replaced Metal resources without a frontier wait
The Moppe legacy: lighting, post, and atmosphere worth transplantingMoppe is evidence, a tuning library, and a legacyThe post stack reveals what finished-looking meansSun shafts are the highest-glamour transplantcommon.h is a library of judgment callsSky, temporal reconstruction, and mesh shaders bound the proofDONE Transplant the post stack onto the HDR pathIDEA March the shadow map for shafts and compare against the screen sweep
Objective-C as a foreign object systemObjective-C interop is a reusable substrateObjective-C is a foreign object system, not a wrapper listDeclarations generate typed messagesThe hybrid boundary is an explicit escape hatchDONE Send one declared Objective-C messageDONE Turn Objective-C exceptions into Lisp conditionsDONE Make Objective-C exception catching dynamically selectableDONE Resolve the Objective-C dispatch entry once
Physics data and SIMD executionA seam, not a specificationThe first executable seamBodies, contacts, and constraints are domains of their ownThe sparse–dense split is the row/column distinction with a forwarding addressSelect the phase once, then run closed loopsThe smallest solver worth buildingDONE The smallest solver was built: spheres, coloured contacts, four-wide lanesThe step as builtThe voxel grid is the static tree, and the overshoot rule keeps seams smoothColours are the lanes: the constraint buffer is written in colour orderBitwise agreement is the wide kernel's contractSleep is relocation, and boxes and edits wakeWhat a step costsAllocation: what the profile taught, and how not to be misled by itThings with weight, as the player meets themOpen after the first pileThe block world is the static treeSleep is residency, and it prices determinismQuestions to keep open
Quantities, dimensions, and interpretationOne number participates in several kinds of meaningDimension describes lawful physical algebraA specification carries semantic identityA unit is a conversion, not the meaningDimension one still has semantic unitsPoints are not differencesThree affine characters: point, absolute, differenceConstraints are marks the author places, not costs the compiler hidesDONE Generalize affine-p to a three-valued characterDONE Declare luvcraft's amounts absolute and non-negativeTensor order is independent of dimensionRepresentation vectors can carry semantic productsCalculation derives; interpretation namesBundles keep meaning outside the lanesDeclarations keep representation and quantity parallelDONE Declare quantities on Lisp storageDONE Check storage declarations against Lisp arithmeticDONE Audit quantity-bearing Lisp storageDONE Describe the repeated block-mesh vertex productDONE Put contextual light-removal meaning on its queueDONE Check the packed frame product across CPU and shaderDONE Declare the fullscreen and overlay vertex productsDONE Keep quantity contracts at owned function boundariesDONE Review the exercised quantity architectureA possible Lisp vocabularyArithmetic definitions outlive execution backendsDONE Give luvcraft quantities backend-neutral ownershipDONE Move portable operator semantics below shadersDONE Extract a compiled arithmetic frontendDONE Compile checked arithmetic to LispDONE Share one production computation between CPU and GPUIDEA Lower checked domains to native SIMD kernelsDONE Prove semantic arithmetic in the shadow graphDONE Give GPU components first-class quantity meaningDONE Make numerical unit conversion explicitDONE Constrain units to semantic quantity kindsSemantic representation boundaries point both waysMaps carry spaces; rows carry representationWhere luv's semantic arithmetic goes beyond its sourcesDONE Carry semantic units through the vertex and camera ABIDONE Introduce the world-to-light sampling mapDONE Separate homogeneous projection from shadow samplingDONE Give the remaining crosshair colour ABI meaningAn initial block-world quantity mapRendering is radiometry: PBR as the forcing use caseThe frame uniform was an unlabeled quantity ledgerDimensioned types in the shader DSLTypes with structure; judgments in parallelOne arithmetic medium, many clientsDONE Quantity-carrying shader typesDONE Give the sRGB atlas seam explicit transfer meaningTODO Structural shader-type identityQuestions and executable claims
Field notes on sb-simdScope and methodThe library is a database that generates itselfThe generic package promises scalars; availability is a runtime propertyBefore SBCL 2.6.7, arm64 was absent in three instructive waysThe story changed in SBCL 2.6.7Luv now treats SIMD availability as a project invariantWhat a kernel looks likeEvaluation order is fixed because reproducibility is a goalTwo sharp edges met in 2.6.7's NEON portWhat sb-simd teaches now that it can run here
Sky, atmosphere, and voxel light for the little block worldStatus: implementation notes and remaining planWhat the critique changedWhat exists today: verified touch pointsThe rendering modelPhase 0: give the shader language the mathematics this work needsPhase 1: a real sky driven by a small Lisp clockPhase 2: make voxel light an explicit derived fieldLighting semantics and boundariesThe solver: explicit reference truth plus one runtime implementationMeshing carries raw light, not an art-directed bakeMeshing also carries what a fragment cannot seeA round-over is an arc, not a leaning planeThe atlas paints relief as well as colourNo two faces are the same cardA roughness the relief already knewPhase 3: one crystal proves emission and edit propagationPhase 4: HDR scene colour, tone mapping, and restrained bloomWhat the presentation stack becameThe screen centre is the focus planeA sky worth tone mappingThe sky became an atmosphereA cloud deck is a plane both halves of the renderer can findLater: real-time shadows, not baked animated sunlightVerification and observabilityPlayable implementation sequenceLight work marksDONE First CPU voxel-light proofDONE Player-placeable crystalTODO Measure light-to-mesh latencyDONE Shadow-ready shader math substrateDONE Shader source abstractions for reusable shadow expressionsDONE Shadow-map producer pass and light projection resourcesDONE Sample the shadow map in the block materialDONE First isolated visual evidence standard for shadow changesDONE Shadow credibility in representative playDONE Tool and live-definition hardening after the shadow reviewDONE Moving-sun shadow shape and temporal evidenceDONE Temporal derivatives and continuously filtered shadow decisionsDONE Receiver-plane shadow evidence and self-shadow stabilityDONE The shimmer that only noon could showDONE The shadow lattice turned about the world originDONE HDR crystal bloomDONE Materials and sky taken toward physical shadingTODO Verify resized presentation in a live captureDecisions now made; questions left to evidence
Frontiers, memoization, and materialized worldsMaterialized worlds deserve a frontier languageFrontier is an operational pattern, not merely a queueFive roles make the engine legibleReservation precedes adjacency; commitment follows namingMemoization is identity preservation, not just a visited setCheney collection is breadth-first materializationBFS and A* differ mainly at admission and orderBucket updates make duplicate work a policy questionThe repository became clearer by becoming less grandMinecraft contains several families of frontier workDiscover, relax, and invalidate are three different dynamicsTerminal walls supply a second, deliberately simpler clientVoxel efficiency requires translating the algebra, not its objectsA frontier language composes meaning with specialized executionFrontier programs are compiled sparse kernelsThe kernel language names fields, constants, predicates, and lawsFamilies own admission, commit, and priorityBindings close a program over storageTerminal walls are the second compiled clientInvalidation is a family with a companion frontierThe shared questions are now concreteTracy aligns temporal structure with semantic workFast generic functions can specialize a sealed semantic domainDONE Remove the per-admission type constructionDONE Begin frontier light beside the oracleDONE Compile the monotone light kernel to scalar LispDONE Compile the sky seeds as boundary transfersDONE Give frontier light its own invalidation program
Voxel fields and chunk windowsThe seam is shared spatial meaning, not shared ownershipMathematical ideas should improve the questions, not burden the namesAddressing and metric are two sides of voxel spaceVec3 is a representation, not one spatial meaningA chunk domain owns local traversal, not world truthCoordinate values can be stack-temporaryA chunk window continues a local domainThe current program already contains four windowsField identity, value meaning, and representation are independentDomain, materialization, and revision have different identitiesField kernels bridge domains to semantic arithmeticLighting should use a checked local law, not become an arithmetic graphThe fixed-point algebra should wait for a second clientChunk hierarchy and level of detail are related but not identicalThe Lisp shape is semantic objects around dense dataA staged concretizationDONE Make chunk traversal one owned vocabularyDONE Give dense traversal coordinate valuesDONE Bundle continuous spatial triplesDONE Name the chunk-window protocolDONE Keep rejected neighbors at dynamic extentDONE Pack the lighting worklist, then test level schedulingDONE Pay checked adjacency cost once per visited siteDONE Attach existing voxel field definitions
Vocabularies as finite domainsA vocabulary is a finite domainThe tile that two branches both called thirtyAn index is closed by the vocabulary that interprets itValue changes and shape changes cost differentlyVocabulary tables and population tables keep different timeA film is not a materialBaked coordinates freeze the atlasA save is a vocabulary and its columnsDONE Name the atlas tiles and give the domain an ownerDONE Compute atlas coordinates in the shaderDONE The mesher gathers first and then runs one dense loopDONE The world owns one block vocabularyTODO Make films block entities so the material vocabulary closesIDEA A save is a vocabulary table and its columns
LUFT: packed sites, chains, and the atelierA site is a lattice anchor, an extent mask, and a polarityA block world is a 3-chain and its surface is a boundaryThe GPU reads signed sites directlyStorage buffers and bit fields enter the shader languageThe mesh-shader experiment found a budget, then endedVertex shaders are the one terrain pathFillets and bevels belong to edge and vertex sitesSmall planar facets soften convex and concave creasesThe miter family portrait keeps the awkward stars in contextRounding is the half-level set of the smoothed occupancyThe same field read as a drawingA world knows what it is cut fromHow a cell says which stock it isAn hour is a set of the light knobsAn architecture of arches, discs, and corbelsTurf catches where the ground is flatFive pieces and a sheet of stocksThe lattice need not be squareA lattice that wanders, modulated by what the cells are made ofA chamfer belongs to the crease, not to either faceWhat the watertightness test caughtThe distance codomain was tried, and argued against itselfEvery term needed a fence, and the fences were the findingClay: the golf ball, a field that is its own definitionThe studio: a world of stars under the same camerasDONE The atelier itself is a McCLIM applicationDONE Pointing reveals a site's topologyNEXT Grow the workbench and the game as one command vocabularyDONE Cell edits are linear boundary updatesIDEA Compact surviving faces only when measurement earns another pathIDEA Draw the torus, not only its fundamental domain
The bevel junction is an open problemThe sharp bevel is a global map from sites to pointsA miter arc carries the band; it does not decorate a singularityThe minimal-arc transition crossed the architecture halfwayStructural proofs implemented the rejected specification faithfullyThe sharp baseline remains inspectable at the problem scaleThe sharp junction with its construction edgesThe same sharp junction without diagnostic inkA larger local object may preserve the old system's regularityDONE Find a regular site-owned account of mixed bevel junctions
The beveled surface is a sum over sitesEvery vertex is an offset-line intersectionOne tile counts every junction by its turningThe skirt is the atomic bevel operationThree plane families and one width dialTurn, don't die: sharp miters leave a (3,1,1) fingerprintBlender's Arc bevel is an executable oracleThe Arc oracle has a manifold domainFaces, bands, and fans: three instance streamsBands and fans carry material semanticsAuthored support geometry protects mixed bevel transitionsCoplanar merging is exact level of detailNEXT Implement the site-stream LUFT renderer backboneTODO Derive the regular vertex-star table and choose singular topology
Temporal reconstruction in the Luft atelierTAA reconstructs samples; it is not a blurOne frozen view defines one frameThe frame graph has three passes and one ping-pong edgeMotion points from the current sample to its old addressResolve admits old colour through a shaped neighbourhoodHistory is a semantic cacheFrame resources are one extent-sized ownership cohortThe shader language was ready; both HALs needed MRTTwo backend resolves share one semantic boundaryDONE MetalFX resolves Luft's temporal inputsDONE First Vulkan temporal resolveWhat the first resolve deliberately leaves openTODO Make the Vulkan disocclusion test depth-aware
The wiki as a static siteWhat this page isWhy ASDF, and how the wiki slots into itCapture recipes are source; captured media is a cacheDONE Make wiki media executable without committing itDONE Publish generated media out of bandIDEA Give historical captures an annex retention policyThe Org subset the reader understandsSpinneret as the HTML layerDONE Render the wiki as a static site from ASDFThe wiki from a shell: scripts/wikiDONE Serve the site from GitHub PagesA fluid dual system: code contributes to the wikiThe model a McCLIM browser wantsCode views: a dexp renderer for Common LispLayouts are objects chosen by operator and roleDONE Boxes hug their widest rowDONE Clauses as tables: cond, case, typecase, handler-caseDONE The stylesheet as Lisp definitionsTODO Pairs, loop tables, and layouts from arglists aloneReading source without loading it: EclectorDexp on McCLIMBrowsing the whole source from the wikiDONE Browse the source as dexp pagesDONE The site shows code references to figuresDONE Read luv sources with Eclector into a definition indexDONE The dexp HTML rendererTODO A wiki browser frame in mcluvWAIT A WIKI package of figure symbolsIDEA Structural associations through the MOPIDEA Source-anchored file links