diff --git a/marketing/campaigns/laer-klokken-cards/bell.txt b/marketing/campaigns/laer-klokken-cards/bell.txt new file mode 100644 --- /dev/null +++ b/marketing/campaigns/laer-klokken-cards/bell.txt @@ -0,0 +1,3 @@ +A photograph of a colored-pencil and gouache drawing on pure white paper, square. Confident hatching and striping build tone. Tapered pencil edges. Optical mixing in patterned surfaces. Visible paper grain. Print-work sensibility. Diegetic light only — never overlay glow. The drawing dissolves softly to pure white paper at the edges with no hard frame, no border, no caption, no wordmark, no lettering anywhere on the page. ONE singular object only, drawn like a record-label seal or a band-tee print — an emblem, not a scene. No people, no hands, no second object, no tangle of things. The object floats centered on the white page with generous white margin on all four sides, its full silhouette inside the frame, nothing cropped. Soft hatched contact shadow beneath it. + +the object: a brass hand bell with a turned dark-wood handle, the bell hanging mouth-down, the clapper just visible inside its rim. warm brass with a few crisp highlights, the wood grain hatched. one bell, drawn like a seal. diff --git a/marketing/campaigns/laer-klokken-cards/codes.txt b/marketing/campaigns/laer-klokken-cards/codes.txt new file mode 100644 --- /dev/null +++ b/marketing/campaigns/laer-klokken-cards/codes.txt @@ -0,0 +1,3 @@ +A photograph of a colored-pencil and gouache drawing on pure white paper, square. Confident hatching and striping build tone. Tapered pencil edges. Optical mixing in patterned surfaces. Visible paper grain. Print-work sensibility. Diegetic light only — never overlay glow. The drawing dissolves softly to pure white paper at the edges with no hard frame, no border, no caption, no wordmark, no lettering anywhere on the page. ONE singular object only, drawn like a record-label seal or a band-tee print — an emblem, not a scene. No people, no hands, no second object, no tangle of things. The object floats centered on the white page with generous white margin on all four sides, its full silhouette inside the frame, nothing cropped. Soft hatched contact shadow beneath it. + +the object: a brass morse telegraph key mounted on a small dark wooden base, the lever arm and the round black knob clearly articulated, one cloth-wrapped wire leaving the base and trailing off to the paper's edge. old brass, warm highlights, no lettering. diff --git a/marketing/campaigns/laer-klokken-cards/cover.txt b/marketing/campaigns/laer-klokken-cards/cover.txt new file mode 100644 --- /dev/null +++ b/marketing/campaigns/laer-klokken-cards/cover.txt @@ -0,0 +1,3 @@ +A photograph of a colored-pencil and gouache drawing on pure white paper, square. Confident hatching and striping build tone. Tapered pencil edges. Optical mixing in patterned surfaces. Visible paper grain. Print-work sensibility. Diegetic light only — never overlay glow. The drawing dissolves softly to pure white paper at the edges with no hard frame, no border, no caption, no wordmark, no lettering anywhere on the page. ONE singular object only, drawn like a record-label seal or a band-tee print — an emblem, not a scene. No people, no hands, no second object, no tangle of things. The object floats centered on the white page with generous white margin on all four sides, its full silhouette inside the frame, nothing cropped. Soft hatched contact shadow beneath it. + +the object: a small red-brick danish town-hall clock tower seen straight on — a square brick tower with a white-faced clock near the top, black roman-less hands set to half past one, a little copper-green pyramid roof with a weathervane. the whole tower from base to vane, drawn as one solid emblem. warm brick reds, chalk-white clock face, verdigris roof. diff --git a/marketing/campaigns/laer-klokken-cards/gen25.mjs b/marketing/campaigns/laer-klokken-cards/gen25.mjs new file mode 100644 --- /dev/null +++ b/marketing/campaigns/laer-klokken-cards/gen25.mjs @@ -0,0 +1,17 @@ +// gen25.mjs — one-off driver for gpt-image-2.5 while the illy MCP registry is stale. +// usage: node gen25.mjs [quality] +import { readFileSync, writeFileSync } from "node:fs"; +const [model, promptFile, out, quality = "medium"] = process.argv.slice(2); +const env = readFileSync("/Users/jas/aesthetic-computer/aesthetic-computer-vault/.devcontainer/envs/devcontainer.env", "utf8"); +const key = env.split("\n").find((l) => l.startsWith("OPENAI_API_KEY="))?.slice(15).replace(/^["']|["']$/g, ""); +const contracts = JSON.parse(readFileSync("/Users/jas/aesthetic-computer/plugins/illy/config/contracts.json", "utf8")).contracts; +const prompt = readFileSync(promptFile, "utf8").trim() + "\n\n" + contracts["physical-accuracy"].prompt.join("\n"); +const t0 = Date.now(); +const res = await fetch("https://api.openai.com/v1/images/generations", { + method: "POST", headers: { Authorization: `Bearer ${key}`, "Content-Type": "application/json" }, + body: JSON.stringify({ model, prompt, size: "1024x1024", quality, n: 1 }), +}); +const j = await res.json(); +if (!res.ok || !j.data?.[0]?.b64_json) { console.error(out, "FAILED", res.status, JSON.stringify(j).slice(0, 300)); process.exit(1); } +writeFileSync(out, Buffer.from(j.data[0].b64_json, "base64")); +console.log(out, model, `${((Date.now() - t0) / 1000).toFixed(1)}s`, j.usage ? JSON.stringify(j.usage.output_tokens) : ""); diff --git a/marketing/campaigns/laer-klokken-cards/mail.txt b/marketing/campaigns/laer-klokken-cards/mail.txt new file mode 100644 --- /dev/null +++ b/marketing/campaigns/laer-klokken-cards/mail.txt @@ -0,0 +1,3 @@ +A photograph of a colored-pencil and gouache drawing on pure white paper, square. Confident hatching and striping build tone. Tapered pencil edges. Optical mixing in patterned surfaces. Visible paper grain. Print-work sensibility. Diegetic light only — never overlay glow. The drawing dissolves softly to pure white paper at the edges with no hard frame, no border, no caption, no wordmark, no lettering anywhere on the page. ONE singular object only, drawn like a record-label seal or a band-tee print — an emblem, not a scene. No people, no hands, no second object, no tangle of things. The object floats centered on the white page with generous white margin on all four sides, its full silhouette inside the frame, nothing cropped. Soft hatched contact shadow beneath it. + +the object: a single cream envelope, sealed on the back with a round pink wax seal, the seal's impression a plain circle — no letters, no crest. the envelope slightly tilted as if just set down, its flap edges crisp. one envelope, drawn like a postal emblem. diff --git a/marketing/campaigns/laer-klokken-cards/phone.txt b/marketing/campaigns/laer-klokken-cards/phone.txt new file mode 100644 --- /dev/null +++ b/marketing/campaigns/laer-klokken-cards/phone.txt @@ -0,0 +1,3 @@ +A photograph of a colored-pencil and gouache drawing on pure white paper, square. Confident hatching and striping build tone. Tapered pencil edges. Optical mixing in patterned surfaces. Visible paper grain. Print-work sensibility. Diegetic light only — never overlay glow. The drawing dissolves softly to pure white paper at the edges with no hard frame, no border, no caption, no wordmark, no lettering anywhere on the page. ONE singular object only, drawn like a record-label seal or a band-tee print — an emblem, not a scene. No people, no hands, no second object, no tangle of things. The object floats centered on the white page with generous white margin on all four sides, its full silhouette inside the frame, nothing cropped. Soft hatched contact shadow beneath it. + +the object: a cream-colored 1970s desk telephone with a rotary dial, its handset lifted off the cradle and resting beside it, the coiled cord looping once between them. the dial numbers are unreadable pencil ticks, no lettering. the telephone and its handset as one object, the cord connecting them clearly. diff --git a/marketing/campaigns/laer-klokken-cards/plan.txt b/marketing/campaigns/laer-klokken-cards/plan.txt new file mode 100644 --- /dev/null +++ b/marketing/campaigns/laer-klokken-cards/plan.txt @@ -0,0 +1,3 @@ +A photograph of a colored-pencil and gouache drawing on pure white paper, square. Confident hatching and striping build tone. Tapered pencil edges. Optical mixing in patterned surfaces. Visible paper grain. Print-work sensibility. Diegetic light only — never overlay glow. The drawing dissolves softly to pure white paper at the edges with no hard frame, no border, no caption, no wordmark, no lettering anywhere on the page. ONE singular object only, drawn like a record-label seal or a band-tee print — an emblem, not a scene. No people, no hands, no second object, no tangle of things. The object floats centered on the white page with generous white margin on all four sides, its full silhouette inside the frame, nothing cropped. Soft hatched contact shadow beneath it. + +the object: a black 12-inch vinyl record sliding halfway out of a plain kraft-brown cardboard sleeve, the sleeve blank, the label on the record a solid pale-pink disc with no lettering. the grooves rendered as fine concentric pencil circles catching a little light. one record, one sleeve, drawn as a single emblem. diff --git a/marketing/campaigns/laer-klokken-cards/road.txt b/marketing/campaigns/laer-klokken-cards/road.txt new file mode 100644 --- /dev/null +++ b/marketing/campaigns/laer-klokken-cards/road.txt @@ -0,0 +1,3 @@ +A photograph of a colored-pencil and gouache drawing on pure white paper, square. Confident hatching and striping build tone. Tapered pencil edges. Optical mixing in patterned surfaces. Visible paper grain. Print-work sensibility. Diegetic light only — never overlay glow. The drawing dissolves softly to pure white paper at the edges with no hard frame, no border, no caption, no wordmark, no lettering anywhere on the page. ONE singular object only, drawn like a record-label seal or a band-tee print — an emblem, not a scene. No people, no hands, no second object, no tangle of things. The object floats centered on the white page with generous white margin on all four sides, its full silhouette inside the frame, nothing cropped. Soft hatched contact shadow beneath it. + +the object: a white danish roadside kilometre stone — a short rounded stone post, whitewashed, with a red band around its top and a blank oval where a number would be, standing in a tuft of pencil grass. one stone, drawn as a single emblem. diff --git a/marketing/campaigns/laer-klokken-cards/solder.txt b/marketing/campaigns/laer-klokken-cards/solder.txt new file mode 100644 --- /dev/null +++ b/marketing/campaigns/laer-klokken-cards/solder.txt @@ -0,0 +1,3 @@ +A photograph of a colored-pencil and gouache drawing on pure white paper, square. Confident hatching and striping build tone. Tapered pencil edges. Optical mixing in patterned surfaces. Visible paper grain. Print-work sensibility. Diegetic light only — never overlay glow. The drawing dissolves softly to pure white paper at the edges with no hard frame, no border, no caption, no wordmark, no lettering anywhere on the page. ONE singular object only, drawn like a record-label seal or a band-tee print — an emblem, not a scene. No people, no hands, no second object, no tangle of things. The object floats centered on the white page with generous white margin on all four sides, its full silhouette inside the frame, nothing cropped. Soft hatched contact shadow beneath it. + +the object: a soldering iron resting in its coiled-spring stand with a small damp sponge in the tray, a loose spool of tin solder beside it — the iron, its stand and the spool drawn as one compact emblem. dark handle, silver barrel, a faint warm glow only at the very tip. diff --git a/marketing/campaigns/laer-klokken-cards/trip.txt b/marketing/campaigns/laer-klokken-cards/trip.txt new file mode 100644 --- /dev/null +++ b/marketing/campaigns/laer-klokken-cards/trip.txt @@ -0,0 +1,3 @@ +A photograph of a colored-pencil and gouache drawing on pure white paper, square. Confident hatching and striping build tone. Tapered pencil edges. Optical mixing in patterned surfaces. Visible paper grain. Print-work sensibility. Diegetic light only — never overlay glow. The drawing dissolves softly to pure white paper at the edges with no hard frame, no border, no caption, no wordmark, no lettering anywhere on the page. ONE singular object only, drawn like a record-label seal or a band-tee print — an emblem, not a scene. No people, no hands, no second object, no tangle of things. The object floats centered on the white page with generous white margin on all four sides, its full silhouette inside the frame, nothing cropped. Soft hatched contact shadow beneath it. + +the object: one intercity coach bus, side view, parked — long white body with a single blue stripe, big tinted windows, black tires meeting the ground, folded door at the front, a roof rack of nothing. no destination text on its sign, the sign is a plain blank amber panel. the whole bus inside the frame, drawn like a toy on white paper. diff --git a/marketing/campaigns/laer-klokken-cards/video.txt b/marketing/campaigns/laer-klokken-cards/video.txt new file mode 100644 --- /dev/null +++ b/marketing/campaigns/laer-klokken-cards/video.txt @@ -0,0 +1,3 @@ +A photograph of a colored-pencil and gouache drawing on pure white paper, square. Confident hatching and striping build tone. Tapered pencil edges. Optical mixing in patterned surfaces. Visible paper grain. Print-work sensibility. Diegetic light only — never overlay glow. The drawing dissolves softly to pure white paper at the edges with no hard frame, no border, no caption, no wordmark, no lettering anywhere on the page. ONE singular object only, drawn like a record-label seal or a band-tee print — an emblem, not a scene. No people, no hands, no second object, no tangle of things. The object floats centered on the white page with generous white margin on all four sides, its full silhouette inside the frame, nothing cropped. Soft hatched contact shadow beneath it. + +the object: a small 1980s portable CRT television with a wooden-veneer shell and a rounded glass screen, sitting on a plain wooden stool. the screen shows only soft grey-green static — no picture, no text. a telescopic antenna raised. one television on one stool, drawn as a single emblem. diff --git a/papers/laer-klokken-deck-sept-2026/aesthetic-eye.json b/papers/laer-klokken-deck-sept-2026/aesthetic-eye.json new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/aesthetic-eye.json @@ -0,0 +1,26 @@ +{ + "schema": 1, + "paper": "Laer Klokken Escapades, on cards", + "pdf": "laer-klokken-deck-sept-2026.pdf", + "expectedFigures": 0, + "expectedDiagrams": 0, + "visualInference": true, + "pdfSha256": "67d29f056057aaaaddaaae7601d26447b40fdcfe082016924f3677cce14c28eb", + "reviewedAt": "2026-09-15T18:11:12Z", + "reviewer": { + "kind": "visual-inference", + "agent": "Claude" + }, + "brand": { + "canonicalName": "Aesthetic.Computer", + "dotColor": "#B44887", + "design": "pass", + "checks": { + "period": "pass", + "dotColor": "pass" + }, + "notes": "15-card 4x6 in deck. Wordmark on the title card byline and the letter card through the \\ac macro (renewed over the cards style's small-caps default so the period is pink). Ten emblem illustrations are decorative colored-pencil objects from gpt-image-2.5-sunburst (marketing/campaigns/laer-klokken-cards); the klokkers card and the codes card show the users' own paintings pulled from their public profiles and the #code painting endpoint. None sits in a figure environment." + }, + "figures": [], + "diagrams": [] +} \ No newline at end of file diff --git a/papers/laer-klokken-deck-sept-2026/figures/illys/bell.png b/papers/laer-klokken-deck-sept-2026/figures/illys/bell.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/illys/bell.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/illys/codes.png b/papers/laer-klokken-deck-sept-2026/figures/illys/codes.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/illys/codes.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/illys/cover.png b/papers/laer-klokken-deck-sept-2026/figures/illys/cover.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/illys/cover.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/illys/mail.png b/papers/laer-klokken-deck-sept-2026/figures/illys/mail.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/illys/mail.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/illys/phone.png b/papers/laer-klokken-deck-sept-2026/figures/illys/phone.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/illys/phone.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/illys/plan.png b/papers/laer-klokken-deck-sept-2026/figures/illys/plan.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/illys/plan.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/illys/road.png b/papers/laer-klokken-deck-sept-2026/figures/illys/road.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/illys/road.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/illys/solder.png b/papers/laer-klokken-deck-sept-2026/figures/illys/solder.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/illys/solder.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/illys/trip.png b/papers/laer-klokken-deck-sept-2026/figures/illys/trip.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/illys/trip.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/illys/video.png b/papers/laer-klokken-deck-sept-2026/figures/illys/video.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/illys/video.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/klokkers/FM_Vigil.png b/papers/laer-klokken-deck-sept-2026/figures/klokkers/FM_Vigil.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/klokkers/FM_Vigil.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/klokkers/HendeFraHoeve.png b/papers/laer-klokken-deck-sept-2026/figures/klokkers/HendeFraHoeve.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/klokkers/HendeFraHoeve.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/klokkers/YouthOrgan.png b/papers/laer-klokken-deck-sept-2026/figures/klokkers/YouthOrgan.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/klokkers/YouthOrgan.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/klokkers/alki.png b/papers/laer-klokken-deck-sept-2026/figures/klokkers/alki.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/klokkers/alki.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/klokkers/chigichigi.png b/papers/laer-klokken-deck-sept-2026/figures/klokkers/chigichigi.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/klokkers/chigichigi.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/klokkers/osamakimlarsen.png b/papers/laer-klokken-deck-sept-2026/figures/klokkers/osamakimlarsen.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/klokkers/osamakimlarsen.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/klokkers/prutti.png b/papers/laer-klokken-deck-sept-2026/figures/klokkers/prutti.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/klokkers/prutti.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/klokkers/q13R608tx.png b/papers/laer-klokken-deck-sept-2026/figures/klokkers/q13R608tx.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/klokkers/q13R608tx.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/klokkers/snakes.png b/papers/laer-klokken-deck-sept-2026/figures/klokkers/snakes.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/klokkers/snakes.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/klokkers/tyttebaer.png b/papers/laer-klokken-deck-sept-2026/figures/klokkers/tyttebaer.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/klokkers/tyttebaer.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/paintings/4ne.png b/papers/laer-klokken-deck-sept-2026/figures/paintings/4ne.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/paintings/4ne.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/paintings/6x3.png b/papers/laer-klokken-deck-sept-2026/figures/paintings/6x3.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/paintings/6x3.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/paintings/aue.png b/papers/laer-klokken-deck-sept-2026/figures/paintings/aue.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/paintings/aue.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/paintings/ie6.png b/papers/laer-klokken-deck-sept-2026/figures/paintings/ie6.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/paintings/ie6.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/paintings/jzg.png b/papers/laer-klokken-deck-sept-2026/figures/paintings/jzg.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/paintings/jzg.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/paintings/n5j.png b/papers/laer-klokken-deck-sept-2026/figures/paintings/n5j.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/paintings/n5j.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/paintings/swk.png b/papers/laer-klokken-deck-sept-2026/figures/paintings/swk.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/paintings/swk.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/paintings/v5x.png b/papers/laer-klokken-deck-sept-2026/figures/paintings/v5x.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/paintings/v5x.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/paintings/w5o.png b/papers/laer-klokken-deck-sept-2026/figures/paintings/w5o.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/paintings/w5o.png diff --git a/papers/laer-klokken-deck-sept-2026/figures/pals.pdf b/papers/laer-klokken-deck-sept-2026/figures/pals.pdf new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/figures/pals.pdf diff --git a/papers/laer-klokken-deck-sept-2026/laer-klokken-deck-sept-2026-source-README.txt b/papers/laer-klokken-deck-sept-2026/laer-klokken-deck-sept-2026-source-README.txt new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/laer-klokken-deck-sept-2026-source-README.txt @@ -0,0 +1,7 @@ +laer-klokken-deck-sept-2026 — embedded source bundle + +Included files +- laer-klokken-deck-sept-2026.tex (TEX source) + +Purpose +This machine-readable bundle accompanies the rendered PDF for accessibility, audit, quotation, and reproducible editing. The PDF remains the canonical reading edition. The bundle is deliberately limited to text source files; private evidence, credentials, raw datasets, generated PDFs, and unlisted assets are excluded. diff --git a/papers/laer-klokken-deck-sept-2026/laer-klokken-deck-sept-2026-source.zip b/papers/laer-klokken-deck-sept-2026/laer-klokken-deck-sept-2026-source.zip new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/laer-klokken-deck-sept-2026-source.zip diff --git a/papers/laer-klokken-deck-sept-2026/laer-klokken-deck-sept-2026.atfi b/papers/laer-klokken-deck-sept-2026/laer-klokken-deck-sept-2026.atfi new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/laer-klokken-deck-sept-2026.atfi @@ -0,0 +1,2 @@ +\attachfile@timezone{} +\attachfile@file[]{6C6165722D6B6C6F6B6B656E2D6465636B2D736570742D323032362D736F757263652E7A6970} diff --git a/papers/laer-klokken-deck-sept-2026/laer-klokken-deck-sept-2026.tex b/papers/laer-klokken-deck-sept-2026/laer-klokken-deck-sept-2026.tex new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-deck-sept-2026/laer-klokken-deck-sept-2026.tex @@ -0,0 +1,215 @@ +% !TEX program = xelatex +% Deck (cards format) — hand-authored storybook deck of the laer-klokken week of +% 14 September 2026. Sibling of ../laer-klokken-sept-2026/ (the broadside); +% same facts, addressed to the klokkers, one scene per card. +\documentclass[11pt]{article} + +\usepackage{fontspec} +\usepackage{unicode-math} +% Latin Modern by OTF filename (not font name): xelatex on macOS cannot +% resolve the family by name and silently produces a broken card PDF. +\setmainfont{lmroman10-regular.otf}[ + BoldFont=lmroman10-bold.otf, + ItalicFont=lmroman10-italic.otf, + BoldItalicFont=lmroman10-bolditalic.otf, +] +\setsansfont{lmsans10-regular.otf}[ + BoldFont=lmsans10-bold.otf, + ItalicFont=lmsans10-oblique.otf, + BoldItalicFont=lmsans10-boldoblique.otf, +] +\setmonofont{lmmono10-regular.otf}[Scale=0.88, + BoldFont=lmmonolt10-bold.otf, + ItalicFont=lmmono10-italic.otf, +] + +\usepackage{graphicx} +\graphicspath{{figures/}{figures/illys/}{figures/paintings/}{figures/klokkers/}} +\usepackage{booktabs} +\usepackage{tabularx} +\usepackage{adjustbox} +\usepackage{ragged2e} +\usepackage{microtype} + +\makeatletter +\def\input@path{{../}} +\makeatother +\usepackage{ac-paper-cards} +% the cards style sets \ac in small caps with a plain period; the brand wants the pink dot. +\renewcommand{\ac}{Aesthetic{\acdot}Computer} +\newcommand{\dk}[1]{{\itshape #1}} +\newcommand{\illy}[1]{\begin{center}\includegraphics[width=0.5\textwidth]{#1}\end{center}\vspace{-0.4em}} +% chat syntax, carried into print: @handle is a tappable profile link, #code opens the painting. +% chat paints handles pink ([255,150,200] on its dark ground); this is that pink at paper contrast. +\definecolor{achandle}{RGB}{206,72,132} +\newcommand{\h}[1]{\href{https://prompt.ac/@#1}{\color{achandle}\textbf{@#1}}} +\newcommand{\hh}[2]{\href{https://prompt.ac/@#1}{\color{achandle}\textbf{@#2}}} +\newcommand{\pc}[1]{\href{https://aesthetic.computer/media/paintings/#1.png}{\color{acpurple}\texttt{\##1}}} +% a painting tile: image, then its code and painter in tiny type +\newcommand{\tile}[3]{\begin{minipage}[t]{0.29\textwidth}\centering\includegraphics[width=\linewidth]{#1}\\[-0.1em]{\tiny\pc{#2}\ \h{#3}}\end{minipage}} +\newcommand{\hhtile}{\begin{minipage}[t]{0.184\textwidth}\centering\includegraphics[width=\linewidth]{FM_Vigil}\\[-0.15em]{\fontsize{5pt}{6pt}\selectfont\hh{FM_Vigil}{FM\_Vigil}}\end{minipage}} +\newcommand{\ktile}[2]{\begin{minipage}[t]{0.184\textwidth}\centering\includegraphics[width=\linewidth]{#1}\\[-0.15em]{\fontsize{5pt}{6pt}\selectfont\h{#2}}\end{minipage}} + +\hypersetup{ + pdftitle={Laer Klokken Escapades --- the week of 14 September 2026, on cards}, +} + +\renewcommand{\acpdfbase}{laer-klokken-escapades-26} +\acdraftfalse +\begin{document} + +% ============================================================ +% TITLE CARD +% ============================================================ +\thispagestyle{empty} +\vspace*{0.05em} +\begin{center} +\href{https://laklok.com}{\includegraphics[width=0.66\textwidth]{cover}}\par\vspace{0.25em} +{\acbold\fontsize{18pt}{22pt}\selectfont\color{acdark} Laer Klokken Escapades}\par +\vspace{0.1em} +{\fontsize{9pt}{11pt}\selectfont\color{acpink} the week of 14 september 2026, on cards --- for the klokkers, before stubbekøbing}\par +\vspace{0.2em} +{\scriptsize\color{acgray}\h{jeffrey}\,\textperiodcentered\,\ac{}\,\textperiodcentered\,laklok.com}\par +\vspace{0.2em} +\rule{0.5\textwidth}{0.5pt}\par +\vspace{0.12em} +{\scriptsize\color{acgray} tuesday 15 september 2026 \,\textperiodcentered\, read off chat-clock and the git log}\par +\end{center} + +% ============================================================ +% INDEX CARD +% ============================================================ +\cardindex + +% ============================================================ +% LETTER CARD +% ============================================================ +\clearpage +\begin{accentcard} +\cardtitle{dear klokkers} + +\noindent here is your week, as i read it off the chat on tuesday --- where you're going on saturday, what happened in the clock channel, and what \ac{} handed you along the way. print it, cut it, pin it up, hand it round at stubbekøbing. the last card is a question. \hfill\textit{---\,\h{jeffrey}} +\end{accentcard} + +% ============================================================ +% BODY +% ============================================================ +\section{the trip} + +\illy{trip} + +folkets folkemøde, stubbekøbing, falster --- a people's meeting without lobbyists, one saturday a year. this year it has a clock in it. + +\textbf{saturday 19 september, 13:30 to 14:30, rådhuset.} \dk{laer klokken med goodiepal} is in the printed program. their blurb: the composer and clockmaker records a new episode of his unpredictable radio show, about quitting social media for good and building your own computing on \ac{}. visitors are told to try the commands and catch up on old episodes. our pitch, written by someone else --- the best kind. + +\section{the klokkers} + +the newest painting on each of your profiles, tuesday afternoon. tap a name to visit. + +\begin{center} +\ktile{prutti}{prutti}\hfill\ktile{HendeFraHoeve}{HendeFraHoeve}\hfill\ktile{snakes}{snakes}\hfill\ktile{YouthOrgan}{YouthOrgan}\hfill\ktile{tyttebaer}{tyttebaer}\\[0.9em] +\ktile{osamakimlarsen}{osamakimlarsen}\hfill\ktile{q13R608tx}{q13R608tx}\hfill\ktile{chigichigi}{chigichigi}\hfill\hhtile\hfill\ktile{alki}{alki} +\end{center} + +\h{oliverstilling} and \h{Wallowing} have no paintings yet. that is a hint, not a complaint. + +\section{the plan, seven points} + +\illy{plan} + +posted by \h{prutti} on tuesday at 09:08, numbering his own: + +\begin{enumerate} +\item record a laer klokken program live. +\item every klokker in the room gets a segment. +\item the show runs 56 minutes. +\item there is no money, because there just isn't any. +\item a reception on the HVAD record. +\item a bed in stubbekøbing the night before and after. +\item a bus down from copenhagen --- if you say you're coming. +\end{enumerate} + +coda: \dk{det bliver super duper}. it will. + +\section{the phone line} + +\illy{phone} + +\dk{ring til Torras telefon. nu.} then \dk{linjen er åben nu} at 10:58, and again at 11:39. \h{tyttebaer} and \h{YouthOrgan} called in while the rest of the channel watched. the clock program is being made live, over a phone, in public, on a tuesday morning. that's the format. + +\textbf{who's in so far:} \h{HendeFraHoeve} first (\dk{jeg skal med!}), then \h{snakes}, \h{YouthOrgan}, \h{tyttebaer} --- and \h{oliverstilling}, who said back in august he'd see goodie there. \h{alki} wants \dk{bus intel}. \h{osamakimlarsen} wants to meet up beforehand \dk{og se hvem er folket}. prutti's reply to each: \dk{tjek}. + +\section{the chat became a video} + +\illy{video} + +\hh{FM_Vigil}{FM\_Vigil} recorded the chat and put it on youtube. \h{HendeFraHoeve} cut it three times in one afternoon, chasing bigger text --- \dk{der kommer straks en version med større chat}, then \dk{større men mere uklar}, then \dk{alle gode gange 3}. + +prutti watched on an ipad at glasmagasinet in oslo: \dk{chatten er lidt lille men den er fucking fed}. + +the room is editing itself now. i just have to keep it running --- and yes, a bigger-chat tema is coming, so the third re-render isn't needed next time. + +\section{codes on the wire} + +the paintings you dropped bare into the channel this month, as codes --- three characters, no preview, tap it and see. that was the whole idea. + +\begin{center} +\tile{swk}{swk}{q13R608tx}\hfill\tile{w5o}{w5o}{osamakimlarsen}\hfill\tile{n5j}{n5j}{osamakimlarsen}\\[0.5em] +\tile{v5x}{v5x}{osamakimlarsen}\hfill\tile{ie6}{ie6}{osamakimlarsen}\hfill\tile{6x3}{6x3}{osamakimlarsen}\\[0.5em] +\tile{aue}{aue}{q13R608tx}\hfill\tile{jzg}{jzg}{q13R608tx}\hfill\tile{4ne}{4ne}{q13R608tx} +\end{center} + +\section{datamusik provenance} + +\illy{solder} + +\h{q13R608tx} and \h{snakes} spent monday evening on who really made the datamusik records and the V/Vm audio --- ``jansky noise has also confirmed that datamusik 13 and 03 are both made by you.'' snakes: he made more sounds than he remembers. + +q13 is \dk{soldering a bunch of wires once more to create a product}, and thanked osama for the stickers and the collage. the archive argues with itself. good. + +\section{what the platform handed you} + +everything here landed in the last thirty days, most of it built for this room. + +\textbf{two laklok sisters, one census} (09-13). the raster laklok piece and the vector laklok.com/html now stay in lockstep, and both report which tema each visitor wears. a \texttt{realtime} tema drifts with the calendar. + +\textbf{prutti's words learned to speak} (09-08). a vox chip on every \h{prutti} message --- his consented elevenlabs voice reads the line back, word by word. since 09-13 any signed-in handle can send a text through \texttt{say}. + +\textbf{laer-klokken TV, and the bridge back} (09-01). a 24/7 youtube stream of the clock room; youtube viewers appear in chat-clock as televised guests. + +\textbf{two things to check before saturday.} \h{snakes} said on 09-04 that goodiepal could not log in --- the host of the show should be able to get into his own show. and \h{kitten.cat} hit a ``verify'' prompt that didn't explain itself. + +\section{every klokker is an email address} + +\illy{mail} + +\texttt{prutti@aesthetic.computer} exists. so does yours: your handle, at aesthetic.computer. the door is open, SPF and DKIM are on, and nobody had told the room until now. + +prutti asked on 09-08 where to send three files ``for computer change'' and again on 09-11 --- \dk{what email adress should i use to file things to you?} letters from outside so far: zero. that address is the answer. + +\h{q13R608tx} worked it out on his own: ``mail is the new private messaging system basically... but even better because its mail!!'' he's right. + +\section{the road to falster} + +\illy{road} + +\begin{itemize} +\item \textbf{mon 14} --- the chat is recorded and cut into a video, three times. +\item \textbf{tue 15} --- the plan is posted and the phone line opens. +\item \textbf{fri 18} --- prutti comes down from norway to copenhagen. the festival sells bus tickets from there; prutti's own bus needs a headcount. +\item \textbf{sat 19, 13:30} --- rådhuset, stubbekøbing: 56 minutes recorded live. +\item \textbf{after} --- the episode joins the archive online. +\end{itemize} + +\section{for saturday} + +\illy{bell} + +what i can bring to the room without being in it: this deck, printed; a QR to laklok.com on the door; the TV stream running on any screen in the hall; a mail address for every klokker who signs up on the day; a bigger-chat tema for whoever films it. + +what else do you need for the gig? a card, a poster, a sound, a piece that only runs in stubbekøbing --- say it in chat-clock and it goes on the list. + +\vspace{0.5em} +\noindent{\small\color{acgray}\dk{vi ses i laer-klokken.}} + +\end{document} diff --git a/papers/laer-klokken-sept-2026/aesthetic-eye.json b/papers/laer-klokken-sept-2026/aesthetic-eye.json new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-sept-2026/aesthetic-eye.json @@ -0,0 +1,47 @@ +{ + "schema": 1, + "paper": "Laer Klokken Escapades, September 2026", + "pdf": "laer-klokken-sept-2026.pdf", + "expectedFigures": 0, + "expectedDiagrams": 1, + "visualInference": true, + "pdfSha256": "7cde43a604ec842349dde4ce397a7789280c60eb4e67046335460cfadcd29593", + "reviewedAt": "2026-09-15T17:19:44Z", + "reviewer": { + "kind": "visual-inference", + "agent": "Claude" + }, + "brand": { + "canonicalName": "Aesthetic.Computer", + "dotColor": "#B44887", + "design": "pass", + "checks": { + "period": "pass", + "dotColor": "pass" + }, + "notes": "Single 11 x 17 in broadside. Wordmark in the standfirst, byline and colophon through the \\ac macro with the pink period; lowercase host names carry their own period." + }, + "figures": [], + "diagrams": [ + { + "id": "road-to-stubbekobing", + "page": 1, + "crop": [ + 0.04, + 0.745, + 0.92, + 0.09 + ], + "design": "pass", + "checks": { + "tangents": "pass", + "type": "pass", + "balance": "pass", + "spaceUse": "pass", + "hierarchy": "pass", + "edgeRouting": "pass" + }, + "notes": "Five equal boxes in a row, Monday to after Saturday, pink Stealth arrows on a shared centre line; mono date heading over a two-line sans note in each box." + } + ] +} \ No newline at end of file diff --git a/papers/laer-klokken-sept-2026/figures/favicons/aesthetic.computer.png b/papers/laer-klokken-sept-2026/figures/favicons/aesthetic.computer.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-sept-2026/figures/favicons/aesthetic.computer.png diff --git a/papers/laer-klokken-sept-2026/figures/favicons/youtube.com.png b/papers/laer-klokken-sept-2026/figures/favicons/youtube.com.png new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-sept-2026/figures/favicons/youtube.com.png diff --git a/papers/laer-klokken-sept-2026/laer-klokken-sept-2026-source-README.txt b/papers/laer-klokken-sept-2026/laer-klokken-sept-2026-source-README.txt new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-sept-2026/laer-klokken-sept-2026-source-README.txt @@ -0,0 +1,7 @@ +laer-klokken-sept-2026 — embedded source bundle + +Included files +- laer-klokken-sept-2026.tex (TEX source) + +Purpose +This machine-readable bundle accompanies the rendered PDF for accessibility, audit, quotation, and reproducible editing. The PDF remains the canonical reading edition. The bundle is deliberately limited to text source files; private evidence, credentials, raw datasets, generated PDFs, and unlisted assets are excluded. diff --git a/papers/laer-klokken-sept-2026/laer-klokken-sept-2026-source.zip b/papers/laer-klokken-sept-2026/laer-klokken-sept-2026-source.zip new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-sept-2026/laer-klokken-sept-2026-source.zip diff --git a/papers/laer-klokken-sept-2026/laer-klokken-sept-2026.tex b/papers/laer-klokken-sept-2026/laer-klokken-sept-2026.tex new file mode 100644 --- /dev/null +++ b/papers/laer-klokken-sept-2026/laer-klokken-sept-2026.tex @@ -0,0 +1,176 @@ +% !TEX program = xelatex +% Laer Klokken Escapades — a broadside. One tabloid sheet on what the klokkers did +% in the clock channel the week of 14 September 2026, where they are going on +% Saturday, and what the platform handed them along the way. +% Sibling of papers/new-urls-fall-2026/new-urls-fall-2026.tex (same recipe). +\documentclass[10pt]{article} +\usepackage[paperwidth=11in,paperheight=17in,top=0.55in,bottom=0.5in,left=0.6in,right=0.6in]{geometry} +\usepackage{fontspec} +\usepackage{xcolor} +\usepackage{graphicx} +\usepackage{tabularx} +\usepackage{booktabs} +\usepackage{array} +\usepackage{ragged2e} +\usepackage{microtype} +\usepackage{tikz} +\usetikzlibrary{positioning,arrows.meta} +\usepackage{hyperref} +\hypersetup{colorlinks=true,urlcolor=acblue,linkcolor=acdark,pdftitle={Laer Klokken Escapades, September 2026}} + +\setmainfont{lmsans10-regular.otf}[ + BoldFont=lmsans10-bold.otf, + ItalicFont=lmsans10-oblique.otf, + BoldItalicFont=lmsans10-boldoblique.otf, +] +\setmonofont{lmmonolt10-regular.otf}[Scale=0.92, + BoldFont=lmmonolt10-bold.otf, + ItalicFont=lmmonolt10-oblique.otf, +] +% YWFT display face for the masthead only; its punctuation and æøå are unreliable. +\newfontfamily\acbold{ywft-processing-bold}[Path=../../system/public/type/webfonts/,Extension=.ttf] +\newcommand{\dsep}{{\normalfont\;\textperiodcentered\;}} + +\definecolor{acpink}{HTML}{B44887} +\definecolor{acpurple}{HTML}{7850B4} +\definecolor{acblue}{HTML}{1559A6} +\definecolor{acdark}{HTML}{312B38} +\definecolor{acgray}{HTML}{66636A} +\definecolor{acpale}{HTML}{F4F1F5} +\definecolor{acrule}{HTML}{DCD6DF} +\definecolor{acgreen}{HTML}{2D7650} +\definecolor{acorange}{HTML}{A85D24} +\newcommand{\acdot}{{\color{acpink}.}} +\newcommand{\ac}{Aesthetic{\acdot}Computer} + +\pagestyle{empty} +\setlength{\parindent}{0pt} +\setlength{\parskip}{0pt} +\hyphenpenalty=10000\exhyphenpenalty=10000 + +% \host{favicon or empty}{name}{what it is} +\newcommand{\host}[3]{% + \vspace{0.5em}% + {\color{acdark}\rule{\linewidth}{1.6pt}}\par\vspace{0.3em}% + {\ifx\relax#1\relax\else\raisebox{-0.22em}{\includegraphics[width=1.15em,height=1.15em]{figures/favicons/#1}}\ \fi{\ttfamily\bfseries\fontsize{12.5pt}{14pt}\selectfont\color{acdark}#2}}\par\vspace{0.1em} + {\fontsize{8.6pt}{10.4pt}\selectfont\color{acgray}\RaggedRight#3\par}\vspace{0.6em}} +% \item: \addr{label}{headline}{body}{when}{who}{pill} +\newcommand{\addr}[6]{% + \par\nointerlineskip{\color{acrule}\hrule height 0.5pt}\vspace{0.42em}% + {\ttfamily\fontsize{9.3pt}{11pt}\selectfont{\bfseries\color{acpink}#1}\ {\bfseries\color{acdark}#2}}\par\vspace{0.16em}% + {\fontsize{9.7pt}{12pt}\selectfont\color{acdark}\RaggedRight#3\par}\vspace{0.2em}% + {\ttfamily\fontsize{7.2pt}{8.4pt}\selectfont\color{acgray}#4\ \ #5}\hfill#6\par\vspace{0.7em}} +\newcommand{\pill}[2]{{\fontsize{6.2pt}{7pt}\selectfont\colorbox{#1!12}{\textcolor{#1}{\bfseries\textls[60]{#2}}}}} +\newcommand{\shipped}{\pill{acgreen}{SHIPPED}} +\newcommand{\open}{\pill{acorange}{OPEN ASK}} +\newcommand{\saturday}{\pill{acpink}{SATURDAY}} +\newcommand{\hd}[1]{{\ttfamily\bfseries\fontsize{9.6pt}{11pt}\selectfont\color{acdark}#1}} +\newcommand{\dk}[1]{{\itshape #1}} +% \changed{who}{ask} +\newcommand{\changed}[2]{\par\nointerlineskip{\color{acrule}\hrule height 0.5pt}\vspace{0.4em}{\fontsize{9.4pt}{11.4pt}\selectfont\RaggedRight{\ttfamily\bfseries\color{acdark}#1}\ \ \color{acdark}#2\par}\vspace{0.45em}} + +\begin{document} + +% ═══════════════════════════════════════ masthead +{\ttfamily\fontsize{8.4pt}{10pt}\selectfont\color{acpink}\textls[80]{BROADSIDE\dsep LAER-KLOKKEN\dsep THE WEEK OF 14 SEPTEMBER 2026}\par} +\vspace{0.3em} +{\acbold\fontsize{50pt}{48pt}\selectfont\color{acdark}Laer Klokken\ \ {\color{acpink}Escapades}\par} +\vspace{0.55em} +\begin{minipage}[t]{0.63\linewidth}\vspace{0pt} +{\fontsize{11.4pt}{14.2pt}\selectfont\color{acdark}\RaggedRight +what the klokkers got up to in the clock channel this week, where they're all going on saturday, and what \ac{} handed them on the way. i read it off the chat and the git log on tuesday the 15th.\par} +\vspace{0.45em} +{\fontsize{8.2pt}{10pt}\selectfont\color{acgray}\href{https://prompt.ac/@jeffrey}{\color{acblue}\textbf{@jeffrey}}\ \textperiodcentered\ \ac{}\ \textperiodcentered\ laklok.com\ \textperiodcentered\ chat-clock\par} +\end{minipage}% +\hfill +\begin{minipage}[t]{0.33\linewidth}\vspace{0pt} +\renewcommand{\arraystretch}{0.9} +\begin{tabularx}{\linewidth}{@{}>{\raggedleft\arraybackslash}X>{\raggedleft\arraybackslash}X>{\raggedleft\arraybackslash}X@{}} +{\bfseries\fontsize{26pt}{26pt}\selectfont\color{acdark}100} & {\bfseries\fontsize{26pt}{26pt}\selectfont\color{acdark}11} & {\bfseries\fontsize{26pt}{26pt}\selectfont\color{acpink}4}\\ +{\ttfamily\fontsize{6.6pt}{8pt}\selectfont\color{acgray}MSGS / DAY} & {\ttfamily\fontsize{6.6pt}{8pt}\selectfont\color{acgray}VOICES IN 24 H} & {\ttfamily\fontsize{6.6pt}{8pt}\selectfont\color{acgray}DAYS TO SHOWTIME}\\[0.5em] +{\bfseries\fontsize{26pt}{26pt}\selectfont\color{acdark}6} & {\bfseries\fontsize{26pt}{26pt}\selectfont\color{acdark}7} & {\bfseries\fontsize{26pt}{26pt}\selectfont\color{acdark}0}\\ +{\ttfamily\fontsize{6.6pt}{8pt}\selectfont\color{acgray}GOING SO FAR} & {\ttfamily\fontsize{6.6pt}{8pt}\selectfont\color{acgray}CODES DROPPED} & {\ttfamily\fontsize{6.6pt}{8pt}\selectfont\color{acgray}LETTERS FROM OUTSIDE}\\ +\end{tabularx} +\end{minipage}\par +\vspace{0.45em} +{\color{acdark}\rule{\linewidth}{3pt}}\par +\vspace{0.1em} + +% ═══════════════════════════════════════ three columns +\begin{minipage}[t]{0.315\linewidth}\vspace{0pt} + +\host{}{the trip}{folkets folkemøde, stubbekøbing, falster. a people's meeting without lobbyists --- talks, workshops, a market, one saturday a year. this year it has a clock in it.} +\addr{SAT 19}{laer klokken med goodiepal}{13:30 to 14:30 at rådhuset --- the town hall --- and it's in the printed program. their blurb: the composer and clockmaker records a new episode of his unpredictable radio show, about quitting social media for good and building your own computing on \ac{}. visitors are told to try the commands and catch up on old episodes. that's our pitch, written by someone else. the best kind.}{folketsfolkemøde.dk/program}{}{\saturday} +\addr{TUE 09:08}{the plan, seven points}{01 record a laer klokken program live. 02 every klokker in the room gets a segment. 03 the show runs 56 minutes. 04 there is no money, because there just isn't any. 05 a reception on the HVAD record. 06 a bed in stubbekøbing the night before and after. 07 a bus down from copenhagen --- if people say they're coming. coda: \dk{det bliver super duper}. it will.}{chat-clock}{@prutti}{} +\addr{WHO'S IN}{six so far, two asking about the bus}{@HendeFraHoeve first (\dk{jeg skal med!}), then @snakes, @YouthOrgan, @tyttebaer --- and @oliverstilling, who said back in august he'd see goodie there. @alki wants \dk{bus intel}. @osamakimlarsen wants to meet up beforehand \dk{og se hvem er folket}. @chigichigi asked when; the answer was the program link. prutti's reply to each of them: \dk{tjek}.}{2026-08-26 to 09-15}{}{} +\addr{LOGISTICS}{norway to copenhagen on friday}{prutti comes down friday. the festival sells its own bus tickets from copenhagen; prutti's bus needs a headcount. a bed in stubbekøbing is on offer the night before and after. no fee. no budget. no problem, apparently.}{}{}{} +\addr{TUE 10:15}{the phone line}{\dk{ring til Torras telefon. nu.} then \dk{linjen er åben nu} at 10:58, and again at 11:39. @tyttebaer and @YouthOrgan called in while the rest of the channel watched. the clock program is being made live, over a phone, in public, on a tuesday morning. that's the format.}{chat-clock}{@prutti @tyttebaer @YouthOrgan}{} + +\end{minipage}% +\hfill{\color{acrule}\vrule width 1pt}\hfill +\begin{minipage}[t]{0.315\linewidth}\vspace{0pt} + +\host{youtube.com.png}{the scene}{chat-clock, monday afternoon to tuesday afternoon --- about a hundred messages from eleven handles. danish and norwegian, english for the visitors.} +\addr{MON}{the chat became a video}{@FM\_Vigil recorded the chat and put it on youtube. @HendeFraHoeve cut it three times in one afternoon, chasing bigger text --- \dk{der kommer straks en version med større chat}, then \dk{større men mere uklar}, then \dk{alle gode gange 3}. prutti watched on an ipad at glasmagasinet in oslo: \dk{chatten er lidt lille men den er fucking fed}. the room is editing itself now. i just have to keep it running.}{2026-09-14}{@FM\_Vigil @HendeFraHoeve @prutti}{} +\addr{ALL WEEK}{codes on the wire}{kidlisp codes dropped bare into the channel, as art: \texttt{\#swk} from prutti; \texttt{\#w5o}, \texttt{\#n5j}, \texttt{\#v5x}, \texttt{\#ie6}, \texttt{\#6x3} from @osamakimlarsen (\dk{\#ie6 har til gengæld lavet programmet en del mere indbringende}); \texttt{\#aue} from @q13R608tx --- \dk{süper sygnok}. earlier in the month \texttt{\#jzg} and \texttt{\#4ne} did the rounds in the front room too. three characters, no preview, click it and see. that was the whole idea.}{2026-08-21 to 09-15}{}{} +\addr{MON EVE}{datamusik provenance}{@q13R608tx and @snakes spent the evening on who really made the datamusik records and the V/Vm audio --- ``jansky noise has also confirmed that datamusik 13 and 03 are both made by you.'' snakes: he made more sounds than he remembers. q13 is \dk{soldering a bunch of wires once more to create a product}, and thanked osama for the stickers and the collage. the archive argues with itself. good.}{2026-09-14}{}{} +\addr{MON}{r8dio housekeeping}{@Wallowing asked whether the roskilde concert came down from r8dio over music rights. prutti: no --- programs get deleted \dk{efter forgodtbefindende}, at whim. @FM\_Vigil had been \dk{helt ude af AC, det har drillet meget}; @HendeFraHoeve agreed it's been \dk{lidt ustabil på det seneste}. that one's mine to fix, not theirs.}{2026-09-14}{}{\open} +\addr{SINCE AUG}{the main chat is a signpost}{nearly every message in /chat since mid-august tells a newcomer to click the blue text: \dk{vi har gang i} `laer-klokken'. @Gumpen, @ildispose, @iltis, @QualBornholmo, @darsh.tv and @vec all came in that way. the front room exists to point at the back room. fine by me.}{chat-system}{}{} + +\end{minipage}% +\hfill{\color{acrule}\vrule width 1pt}\hfill +\begin{minipage}[t]{0.315\linewidth}\vspace{0pt} + +\host{aesthetic.computer.png}{what the platform handed them}{everything here landed in the last thirty days. most of it i built for this room.} +\addr{09-13}{two laklok sisters, one census}{the raster laklok piece and the vector laklok.com/html now stay in lockstep, and both report which tema each visitor wears. a \texttt{realtime} tema drifts with the calendar. edit one sister, edit the other --- or they drift.}{b7037992a4}{laklok:nat:links}{\shipped} +\addr{09-08}{prutti's words learned to speak}{a vox chip on every @prutti message --- his consented elevenlabs voice reads the line back with per-word karaoke timing. since 09-13 any signed-in handle can send a text through \texttt{say}.}{648e73a46e}{pruttivox}{\shipped} +\addr{09-01}{laer-klokken TV, and the bridge back}{a 24/7 youtube stream of the clock room, with a chat bridge that seats youtube live-chat viewers in chat-clock as televised guests. this is the rig @FM\_Vigil's recording came off. the television watches the chat; the chat watches the television.}{c894adb754}{tvchat}{\shipped} +\addr{09-13}{every klokker is an email address}{\texttt{prutti@aesthetic.computer} exists. the door is open, SPF and DKIM are on, and nobody has told the room. prutti asked on 09-08 where to send three files ``for computer change'' and again on 09-11 --- \dk{what email adress should i use to file things to you?} letters from outside so far: zero. @q13R608tx worked it out on his own: ``mail is the new private messaging system basically... but even better because its mail!!'' he's right. i should say so.}{f6be8556c6}{amail}{\open} +\addr{09-04}{goodiepal cannot log in}{@snakes relayed it in the front room: \dk{message in laklpk goodiepal can not log in}. nothing in the chat says it got solved. the auth0 email-identity merge landed 09-11 --- worth checking whether that was the cure, before saturday. the host of the show should be able to get into his own show.}{chat-system}{@snakes}{\open} +\addr{09-12}{the ui says i have to verify a AC..?}{@kitten.cat hit the verify prompt and didn't know what it wanted. that's copy, not code. one sentence would fix it.}{chat-system}{@kitten.cat}{\open} + +\end{minipage}\par + +% ═══════════════════════════════════════ the week (diagram) +\vspace{0.6em} +{\color{acdark}\rule{\linewidth}{1.6pt}}\par\vspace{0.35em} +{\ttfamily\fontsize{8pt}{9.5pt}\selectfont\color{acpink}\textls[80]{THE ROAD TO STUBBEKØBING}\par} +\vspace{0.1em} +\begin{center} +\begin{tikzpicture}[ + node distance=0.26in, + box/.style={draw=acdark, line width=0.8pt, rounded corners=1.5pt, fill=acpale, text width=1.52in, minimum height=0.86in, align=left, inner sep=6pt, font=\fontsize{9.2pt}{11pt}\selectfont\color{acdark}}, + arr/.style={-{Stealth[length=6pt,width=5pt]}, line width=0.9pt, draw=acpink} +] +\node[box] (a) {\hd{mon 14}\\[2pt]the chat is recorded and cut into a video, three times}; +\node[box, right=of a] (b) {\hd{tue 15}\\[2pt]the plan is posted and the phone line opens}; +\node[box, right=of b] (c) {\hd{fri 18}\\[2pt]prutti travels from norway to copenhagen}; +\node[box, right=of c] (d) {\hd{sat 19, 13:30}\\[2pt]rådhuset, stubbekøbing: 56 minutes recorded live}; +\node[box, right=of d] (e) {\hd{after}\\[2pt]the episode joins the archive online}; +\draw[arr] (a) -- (b); \draw[arr] (b) -- (c); \draw[arr] (c) -- (d); \draw[arr] (d) -- (e); +\end{tikzpicture} +\end{center} +\vspace{0.3em} + +% ═══════════════════════════════════════ footer +{\color{acdark}\rule{\linewidth}{3pt}}\par\vspace{0.45em} +\begin{minipage}[t]{0.63\linewidth}\vspace{0pt} +{\ttfamily\fontsize{8pt}{9.5pt}\selectfont\color{acpink}\textls[80]{IF I ANSWER FOUR THINGS IN CHAT THIS WEEK}\par}\vspace{0.35em} +\begin{minipage}[t]{0.48\linewidth}\vspace{0pt} +\changed{@prutti}{tell him his address is prutti@aesthetic.computer, and the three files can go there. first real letter through the door.} +\changed{@snakes / goodiepal}{ask whether the login still fails after the 09-11 identity merge. if it does, it's the one thing that could keep saturday's host off his own platform.} +\end{minipage}\hfill +\begin{minipage}[t]{0.48\linewidth}\vspace{0pt} +\changed{@kitten.cat}{say in one line what ``verify'' means, then fix the copy so nobody has to ask again.} +\changed{@HendeFraHoeve}{a bigger-chat tema for the video cuts would save her the third re-render next time. she's already doing the work --- give her the knob.} +\end{minipage} +\end{minipage}\hfill +\begin{minipage}[t]{0.33\linewidth}\vspace{0pt} +{\ttfamily\fontsize{7.6pt}{9pt}\selectfont\color{acpink}\textls[80]{HOW TO READ THIS}\par}\vspace{0.3em} +{\fontsize{8.4pt}{10.2pt}\selectfont\color{acgray}\RaggedRight +quotes are from the AC chat channels \texttt{chat-system} and \texttt{chat-clock}, read on 2026-09-15. danish and norwegian are left as written, in italics. handles are the public AC handles the messages were posted under. counts are the last 100 messages in chat-clock, 09-14 13:37 to 09-15 14:47. program details are from folketsfolkemøde.dk. platform items cite the commit that shipped them.\par +\vspace{0.4em} +icons are the ones each host serves: the AC mark for laklok.com and the platform column, youtube's for the scene column. folketsfolkemøde.dk serves no favicon, so the trip column goes without. set in YWFT Processing, Latin Modern Sans and Latin Modern Mono. \ac{}\par} +\end{minipage} + +\end{document} diff --git a/papers/new-urls-fall-2026/aesthetic-eye.json b/papers/new-urls-fall-2026/aesthetic-eye.json new file mode 100644 --- /dev/null +++ b/papers/new-urls-fall-2026/aesthetic-eye.json @@ -0,0 +1,47 @@ +{ + "schema": 1, + "paper": "New URLs on AC, Fall 2026", + "pdf": "new-urls-fall-2026.pdf", + "expectedFigures": 0, + "expectedDiagrams": 1, + "visualInference": true, + "pdfSha256": "496e137aa3e4ba0d8197eff113d62618c63192f09a47f49f8cc94c03e5e41723", + "reviewedAt": "2026-09-15T16:20:02Z", + "reviewer": { + "kind": "visual-inference", + "agent": "Claude" + }, + "brand": { + "canonicalName": "Aesthetic.Computer", + "dotColor": "#B44887", + "design": "pass", + "checks": { + "period": "pass", + "dotColor": "pass" + }, + "notes": "Single 12 x 18 in broadside. Wordmark appears in the standfirst, the byline and the colophon, each through the \\ac macro with the pink period; every other mention is the lowercase host name aesthetic.computer, which carries its own period." + }, + "figures": [], + "diagrams": [ + { + "id": "letters-path", + "page": 1, + "crop": [ + 0.04, + 0.795, + 0.92, + 0.08 + ], + "design": "pass", + "checks": { + "tangents": "pass", + "type": "pass", + "balance": "pass", + "spaceUse": "pass", + "hierarchy": "pass", + "edgeRouting": "pass" + }, + "notes": "Five boxes of equal width and height in one row, left to right, pink Stealth arrows between them at a shared centre line; mono heading over a sans explanation in each. Shared padding and gutters; the row sits inside the measure with air on both sides." + } + ] +} \ No newline at end of file diff --git a/papers/new-urls-fall-2026/endpoints-30d.md b/papers/new-urls-fall-2026/endpoints-30d.md new file mode 100644 --- /dev/null +++ b/papers/new-urls-fall-2026/endpoints-30d.md @@ -0,0 +1,86 @@ +# Aesthetic Computer — network endpoints stood up 2026-08-16 → 2026-09-15 + +Swept against `origin/main` (135d05d311). Local `main` (0b34616056) is an ancestor of it, so every commit below is on `origin/main`. lith redeploys on push via `lith/webhook.sh`, so lith-served routes on `origin/main` are presumed live; the session server self-deploys every 60 s since d82ff229b6 (2026-09-11), earlier session-server commits needed a manual `session:publish`. `dp1-feed/` had no commits in the window. + +Route mapping: any file `system/netlify/functions/.mjs|js` is served by lith's Express at `/api/` (`lith/server.mjs:1276`, `app.all("/api/:fn", …)`); `lith/route-resolution.mjs` was not changed in the window, so no new aliases. Sotce routes are `sotce.net/sotce-net/` (Caddy `@sotce` → lith `sotce-net.mjs` path dispatch). + +## 1. lith HTTP (aesthetic.computer / prompt.ac / sotce.net / papers) + +| Endpoint | File | Commit | Purpose | +|---|---|---|---| +| `GET/POST /api/mimechan` (`?board=`, `?thread=`, `?file=`, `?page=`; POST JSON post) | `system/netlify/functions/mimechan.mjs` (+ `system/netlify.toml` redirect) | 7f0af85c25 2026-09-02 "mimechan: an imageboard where the boards are mimetypes" | Anonymous imageboard where a posted file's mimetype decides its board; `?file=` serves stored bytes under a sandbox CSP. | +| `POST /api/prompt-log { text }` (anon, throttled); `GET /api/prompt-log?q=&limit=` / `?stats=1&since=` (admin) | `system/netlify/functions/prompt-log.mjs`; client `disks/prompt.mjs:1435` | 18f1271a5b 2026-09-03 "prompt-log: record every prompt submission — the corpus of what people enter, misses first-class" | Records every prompt submission, misses included, for search and counts. | +| `GET /api/mediascholar-status` — also `papers.aesthetic.computer/api/mediascholar-status` (Caddy `@papers` proxy, 38a593f6d9 2026-09-05) | `system/netlify/functions/mediascholar-status.mjs` | 467553fedb 2026-09-05 "Add live Mediascholar progress page" | Public status of the Mediascholar paper worker; proxies `${MEDIASCHOLAR_WORKER_URL}/status/mediascholar` with a safe fallback document. | +| `GET /api/pruttivox?id=` → `{ audio, duration, words, text }` | `system/netlify/functions/pruttivox.mjs` (+ `netlify.toml` function block/redirect) | 648e73a46e 2026-09-08 "chat: prutti's words learn to speak — a vox chip on every message" | Speaks a @prutti chat message in his consented ElevenLabs voice clone with per-word timing; text read from DB by id only, renders cached to Spaces. | +| `GET /api/mail` (inbox, sent, unread, addresses; `?count`), `POST /api/mail { to, text }`, `POST /api/mail { action: "read", id? }` — Bearer Auth0 | `system/netlify/functions/mail.mjs`, `system/backend/mail.mjs` | a150032903 2026-09-11 "`mail`: the inbox `tell` has been filling since april" | The inbox half of AC mail; `tell` had been writing letters nobody could read. | +| `POST /api/easel-inference` (Anthropic Messages API shape, streamed; Bearer Auth0; daily budget via `backend/ai-budget.mjs`) | `system/netlify/functions/easel-inference.mjs`; client `easel/src/ac-server.mjs:225` | 34d2f33d3d 2026-09-12 "easel: inference without a vendor CLI" | Buys inference on AC's OpenRouter account and rents it to an @handle so an Easel install needs no vendor CLI. | +| `POST /api/laklok-theme { theme }` (Bearer) / `GET /api/laklok-theme?days=30` (public) | `system/netlify/functions/laklok-theme.mjs` | b7037992a4 2026-09-13 "laklok: a `realtime` tema that drifts with the calendar, and a census of who wears what" | Census of which `tema` each laklok visitor wears; both sisters report on boot and chip tap. | +| `GET /api/whistlegraph-llm?resource=verify` = `whistlegraph.org/api/wg/verify?receipt=&sig=` (Caddy `@wgverify`) | `system/netlify/functions/whistlegraph-llm.mjs`, `lith/Caddyfile:262` | c545a5444f 2026-08-27 "the license receipt learns to answer for itself, and the paid lane stops quoting a price nobody can pay" | Free check of an x402 license receipt's signature (whole receipt signed, so a code alone can't re-derive it). | +| `sotce.net/sotce-net/sw.js` (GET), `/manifest.json` (GET) | `system/netlify/functions/sotce-net.mjs` | 91d70b972a 2026-09-05 "confessional bells: pages, answers, and chatter ring the reader's devices"; d0cbaf7c4b 2026-09-05 "…a manifest so iPhones can hear them ring" | Push service worker and web-app manifest so the confessional can ring readers' devices. | +| `sotce.net/sotce-net/comment` (GET; `/chat` kept as legacy alias) | `sotce-net.mjs` | bc12f6990c 2026-09-07 "confessional: a corner bell, no zombie page, chat becomes comment" | Presentational rename of the chat room to a comment room; ids stay "chat". | +| `POST sotce.net/sotce-net/notification-choice` | `sotce-net.mjs`, `system/backend/notification-choice.mjs` | 2fed73e172 2026-09-13 "Track notification choices and active counts" | Records each reader's notification opt-in/out and keeps active counts. | +| `GET sotce.net/sotce-net/subscribers` (public) and `/active-subscribers` (operational; consumed by `/api/metrics`) | `sotce-net.mjs`, `metrics.mjs` | 96bb08a349 2026-09-13 "Separate public and operational subscriber counts" | Splits the public subscriber number from the operational one metrics reads. | +| `GET prompt.ac/easel.sh`, `/easel.tar.gz`, `/easel.json` (also on aesthetic.computer; Caddy `@easel_install`) | `lith/Caddyfile:746`, `system/public/easel.sh`, `easel/bin/pack.mjs` (tarball + manifest packed on lith at deploy, `lith/deploy.fish`) | 6e02494c08 2026-09-11 "easel: the knowledge travels with the tool, and there is a way to install it"; f9e68d9576 2026-09-11 "easel: pack on the box that actually packs, and serve the file the updater reads" | `curl prompt.ac/easel.sh | sh` installer; `easel.json` is the version/sha manifest the updater reads. | +| `GET prompt.ac/~` → 302 `prompt.ac/prompt~channel ~!autorun` | `lith/Caddyfile:732` | cca4851c9e 2026-09-10 "prompt.ac/~ — the address a phone actually gets" | Short address that drops a phone into a live Aesthetic Code channel. | +| `GET prompt.ac/` serves the HTML prompt shell (`system/public/prompt.ac/index.html`) instead of redirecting | `lith/server.mjs` (a3b530ee4d), `lith/DNS.md` (Cloudflare edge redirect ruleset disabled 2026-09-01, 0231d30570) | a3b530ee4d 2026-09-01 "the dom prompt earns its keys: real paths, native completions, the true keypunch" | prompt.ac piece paths now boot in place; dotted paths keep the aesthetic.computer redirect. | +| `www.sotce.net/*` → 308 `sotce.net{uri}` | `lith/Caddyfile:490` | 8ab5f40c38 2026-09-07 "confessional: the gate sheds its bell switch, logout comes home" | One canonical origin for Auth0 allowlists, the push SW and localStorage (Netlify used to do this). | +| `GET /ComicRelief-Regular.woff2` (oskiewar host) | `lith/Caddyfile` | 11ee094542 2026-09-14 "oskiewar: max-level sidecars and a woff2 face…" (origin/main only, not in local checkout) | Serves the game's font from the papers foundry with a week cache. | + +## 2. New subdomains / hosts (Caddy + DNS) + +| Host | File | Commit | Purpose / status | +|---|---|---|---| +| `tv.whistlegraph.org` — static root `system/public/whistlegraph.org` with `try_files → /tv.html`; `/api/whistlegraph-admin*` proxied to lith | `lith/Caddyfile:375` | e861ac3e84 2026-08-16 "tv.whistlegraph.org: the archive as broadcast…" | Zero-chrome fullscreen TV of whistlegraph performances. Commit notes DNS still needed a proxied A record → 209.38.133.33; `lith/DNS.md` has no entry for it, so verify DNS before calling it live. | +| `nft.aesthetic.computer` — static site + data: `/data/catalog.json`, `/data/rdp-holders.json`, `/data/a2p-v2-holders.json`, `/data/ten-whistlegraphs-holders.json` | `lith/Caddyfile:86`, `system/public/nft.aesthetic.computer/` | d109bf8e1d 2026-08-31 "nft.aesthetic.computer: cross-chain NFT portal (papers idiom, live tzkt/FF media, holder snapshots, platter data endpoints)…" | Cross-chain NFT portal with holder-snapshot JSON endpoints. | +| `rdp.aesthetic.computer` — static; `/json/<1..239>.json` token metadata | `lith/Caddyfile:92`, `system/public/rdp.aesthetic.computer/json/` | ff3ed1359a 2026-08-31 "rdp.aesthetic.computer: full 239-token metadata recovery…"; 295b5be7f7 2026-08-31 (matcher renamed `@rdpmeta`, CORS via global json header) | Byte-faithful recovered ERC-721 metadata for the 239 RDP tokens. | +| `whistlegraph.org/stars`, `/comments`, `/wild` | `lith/Caddyfile:330-352` | d248fb8be6 2026-09-01 "Open the sky: whistlegraph.org/stars"; d5de42da98 2026-09-03 "whistlegraph comments: a back room for what people said"; db0a636dbd 2026-09-05 "whistlegraph wild: a field guide to the sightings" | Static pages claimed explicitly so the bare-code matcher doesn't read them as codes. | +| `menuband.app/` → 302 App Store | `lith/Caddyfile` | b65327ef01 2026-08-31 "Forward menuband.app apex to the Mac App Store page" | Apex forward. | +| `inbound.aesthetic.computer` HTTPS (responds "Amail inbound — SMTP on :25") and `:80` `/.well-known/acme-challenge/*` webroot `/var/lib/amail-acme` | `lith/Caddyfile:1255-1279` | 318f1830c0, ae1933a8b7, b33f124052 (all 2026-09-13) | Exists only so certbot can mint the STARTTLS certificate for the mail door; everything else on :80 301s to https. | +| DNS: `inbound.aesthetic.computer A 209.38.133.33` (DNS-only); apex `TXT v=spf1 include:_spf.google.com ~all`; `google._domainkey TXT` DKIM | `lith/DNS.md` | f6be8556c6 2026-09-13; d3d9a8486c 2026-09-14 "lith/DNS.md: the apex now has SPF and DKIM" | Mail routing target for Google Workspace's default route; first-ever SPF/DKIM for `mail@aesthetic.computer`. DMARC stays `p=none`. | + +## 3. Mail (SMTP) + +| Endpoint | File | Commit | Purpose | +|---|---|---|---| +| `inbound.aesthetic.computer:25` SMTP (STARTTLS once cert exists; `--port 2525 --open` for local) — accepts `@aesthetic.computer`, `@aesthetic.computer`, `amail+@aesthetic.computer` (reply), same on `mail.aesthetic.computer`; senders limited to Google's SPF relays; DMARC/DKIM checked from `Authentication-Results`; optional `X-Amail-Route` secret | `lith/mail-inbound.mjs`, `lith/lith-mail.service` (user `lith-mail`, CAP_NET_BIND_SERVICE), `lith/lith-mail-renew.sh` (certbot deploy hook), `system/backend/mail.mjs` | f6be8556c6 2026-09-13 "amail: a door for the outside world's letters"; e8157fcb36 2026-09-13 "amail: the door learns who it trusts, and letters can leave the wall"; 1c3fba1ddf 2026-09-13 (DKIM pass counts as verified); 2309c04668 2026-09-13 (dedupe index, greeting) | Outside mail to any AC handle is filed as Amail and pushed. `deploy.fish` installs/enables `lith-mail` on every deploy. | +| Outbound: letters sent as `@handle via aesthetic.computer @aesthetic.computer>` through `smtp-relay.gmail.com` (fallback `smtp.gmail.com`) | `system/backend/mail.mjs:197-240` | e8157fcb36 2026-09-13 | AC mail can leave to external addresses; plus-tag routes the reply home. | + +## 4. session-server (`wss://session-server.aesthetic.computer`, `wss://chat-clock.aesthetic.computer`) + +| Endpoint | File | Commit | Purpose | +|---|---|---|---| +| WS `/agent-presence?room=&role=agent|surface&label=` — messages `agent-presence:hello` → `agent-presence:status` / `agent-presence:error` | `session-server/agent-presence.mjs`, `session.mjs:1780`; client `toolchain/mcp/acin-mcp.mjs` | e72aa69a7b 2026-09-03 "claude-in v1: handle-scoped agent presence — link an agent, light the mark on AC surfaces" | Presence-only relay: an agent and a handle's surfaces see each other; lights the agent mark. | +| WS messages `diagnostics:listen` → `diagnostics:listening`, `diagnostics:report` (reports relayed only to the piece's author; `handle/slug` channels need an Auth0 token) | `session-server/diagnostics.mjs`, `session.mjs:2574-2591` | dd45600402 2026-09-11 "easel: let a piece report on itself" | A running piece's health reaches its author and nobody else. | +| `GET /oskiewar-open-room` (CORS `*`, no-store) | `session-server/session.mjs` | c5121d2f97 2026-09-05 "oskiewar v95: strangers meet at the front door, hidden windows keep hosting" | Returns the currently open versus room so a stranger can join. | +| WS `/oskiewar-live?match=&role=&surface=`: new types `oskiewar:reload` (7263164e3b 2026-08-18), `oskiewar:flags` (acbdc02ea5 2026-08-18), `oskiewar:input` + `oskiewar:seat` (039b0cda33 2026-09-03 "the front door is a versus game"), `oskiewar:net` (c6a5729862 2026-09-09 "rollback netplay — both seats simulate the whole fight (v102)") | `session-server/oskiewar-live-manager.mjs` | as listed | Agent-driven reload/flags, challenger seating and input relay, then SF6-style rollback net relay between seats. | +| WS chat `chat:service-message { secret, via, from, text }` (authorizes by `CHAT_SERVICE_SECRET`, not a user token) | `session-server/chat-manager.mjs`; sender `toolchain/tv/chat-bridge.mjs` (`tvchat.service`) | c894adb754 2026-09-01 "YouTube→AC chat bridge: televised guests in the clock room" | YouTube live-chat viewers appear in the clock room as televised guests. | +| Infra: `session-autopublish.timer/.service` (60 s `git fetch`, redeploys when `session-server/` or `shared/` moved, same 150 s `:8889` health gate + rollback as `session:publish`) | `session-server/autopublish/` | d82ff229b6 2026-09-11 "session-server: the box watches for its own changes"; 4eb9b5fdfa proof note | Not a listener; makes later session-server commits self-deploying. | + +## 5. Other network services (lower priority, part of the fleet) + +| Service | File | Commit | Purpose | +|---|---|---|---| +| Prox worker `http://:5252` — `POST /job`, `POST /poke`, `GET /status/mediascholar` (LAN-bound, not loopback) | `slab/bin/prox-worker.mjs`, `papers/mediascholar/systemd/prox-worker.service` | ba66817f1d 2026-09-05 "Add autonomous Mediascholar paper worker" | Headless Linux job controller + ledger; the `/status/mediascholar` route is what lith's `/api/mediascholar-status` proxies. | +| Mediascholar credential proxy (`127.0.0.1` only) | `slab/bin/mediascholar-credential-proxy.mjs`, `mediascholar-proxy.service` | ba66817f1d 2026-09-05 | Loopback broker that holds the real inference credential for sandboxed harnesses. | +| TV rigs: `actv.service`, `wgtv.service`, `wgtv-playout.service` (outbound RTMP → YouTube), `tvchat.service` (outbound WSS → `chat-clock`) + watchdog timers | `toolchain/tv/*.service`, `rig.sh`, `playout.mjs`, `chat-bridge.mjs` | 2d867102e0, e6bfe439b6, 4aff2460b8, c894adb754 (all 2026-09-01) | Whistlegraph TV and laer-klokken TV 24/7 streams; clients, not listeners. | +| MCP `acin-mcp.mjs`, `sweep-mcp.mjs` (stdio, or `--http` on `127.0.0.1` via pre-existing `http-front.mjs`) | `toolchain/mcp/` | window | Local-only; not network-exposed. | +| Auth0 post-login action `link-email-identity.js` | `system/backend/auth0-actions/` | d3d908bd77, 22da6a385e 2026-09-11 | Runs in the Auth0 tenant, not on AC hosts; merges an emailed-code identity into the existing account. | + +## 6. Existing endpoints significantly changed in the window + +- `POST /api/ask` — e8480a06a7 2026-09-11: per-handle daily token budget (`backend/ai-budget.mjs`), exhausted handles fall to the visitor tier rather than 429; a8784f2e99 2026-09-11: anonymous callers get only the cheap model, `hint` no longer selects expensive models. +- `POST /run` — 68108d6ed5 2026-09-11 "/run: ownership is the token, not the secrecy of the name": `/` channels require that handle's Auth0 token; opaque channels stay capability-by-name. Session-server d8d3c80053 2026-09-09 keeps `/run` pushes until a watcher appears. +- `POST /api/oskiewar-replays` — 7a2731afb2 2026-08-26: anonymous seat may upload rounds; c617d320f3 2026-08-26: contract widened for checkpoint rows; 392a897a70 2026-09-11: `roomId`/`roomName` on round summaries. +- `POST /api/register-push-token` — 91d70b972a 2026-09-05: `tenant: "sotce"`, `topics[]` incl. `chat-sotce`, `sotce-pages` (signed-in sotce account required). +- `GET /api/say` — 8b68950f19 2026-09-09 producer-gated `prutti` voice provider; 91efbc8dea 2026-09-13 any signed-in handle may send a text. +- `POST /api/tell` — a150032903 2026-09-11: send path moved into `backend/mail.mjs`, message now lands in recipient's mail; f077873ede 2026-09-14: letter text kept out of push bodies/diagnostics (`shared/mail-privacy.mjs`). +- `GET /api/chat-messages` — c894adb754/4c7ef04cf2 2026-09-01: rows carry `via` and `from` for service relays, optional YouTube walk-back `link`. +- `POST /api/piece-hit` and `/` (index.mjs) — b02257a0e1 2026-09-09: automated clients counted `counted:false`; a WebSocket `Upgrade` on the page host returns 426 pointing at `wss://session-server.aesthetic.computer` instead of a full page. +- `GET /api/version` — 78b5afa2c9 2026-09-09: long-poll held 45 s instead of 4 s (was 57 % of daily requests). +- `GET /api/metrics` — 96bb08a349 2026-09-13: reads `sotce.net/sotce-net/active-subscribers`. +- `POST /api/nom-scores` — eea8dd6769 2026-09-07 (numrank game added), 23f74e9077 2026-09-11 (score-only runs, `kokazo`). +- `GET /api/whistlegraph-llm` (`/api/wg/*`) — b62c067f86/e9346bbc85 2026-08-27: facilitator signs each CDP call with a fresh Ed25519 JWT; refusals vs. timeouts distinguished. +- Push (`shared/push.mjs`) — 58ccc746a5 2026-09-09: `icon` per sender. +- Caddy cache policy — 57815c30a7 2026-09-06: `disk.worker..mjs` immutable; 0b34616056 2026-09-14: `bios.mjs`/`disk.mjs` `no-cache`; d969fc6b4d 2026-08-31 + 11ee094542 2026-09-14: oskiewar modules served `precompressed br zstd`, `/oskiewar-voice.mjs` added to the module set. +- `session-server/chat-manager.mjs` — 91d70b972a/58ccc746a5/c53ee33c80 (2026-09-05..09): sotce bells push with a 192 px sender icon. +- `lith/webhook.sh` — 135d05d311 2026-09-14 (origin/main only): rebuilds oskiewar sidecars after each checkout. diff --git a/papers/new-urls-fall-2026/figures/favicons/aesthetic.computer.png b/papers/new-urls-fall-2026/figures/favicons/aesthetic.computer.png new file mode 100644 --- /dev/null +++ b/papers/new-urls-fall-2026/figures/favicons/aesthetic.computer.png diff --git a/papers/new-urls-fall-2026/figures/favicons/aesthetic.computer.svg b/papers/new-urls-fall-2026/figures/favicons/aesthetic.computer.svg new file mode 100644 --- /dev/null +++ b/papers/new-urls-fall-2026/figures/favicons/aesthetic.computer.svg @@ -0,0 +1,3 @@ + + + diff --git a/papers/new-urls-fall-2026/figures/favicons/menuband.app.png b/papers/new-urls-fall-2026/figures/favicons/menuband.app.png new file mode 100644 --- /dev/null +++ b/papers/new-urls-fall-2026/figures/favicons/menuband.app.png diff --git a/papers/new-urls-fall-2026/figures/favicons/rdp.aesthetic.computer.png b/papers/new-urls-fall-2026/figures/favicons/rdp.aesthetic.computer.png new file mode 100644 --- /dev/null +++ b/papers/new-urls-fall-2026/figures/favicons/rdp.aesthetic.computer.png diff --git a/papers/new-urls-fall-2026/figures/favicons/sotce.net.png b/papers/new-urls-fall-2026/figures/favicons/sotce.net.png new file mode 100644 --- /dev/null +++ b/papers/new-urls-fall-2026/figures/favicons/sotce.net.png diff --git a/papers/new-urls-fall-2026/figures/favicons/whistlegraph.org.png b/papers/new-urls-fall-2026/figures/favicons/whistlegraph.org.png new file mode 100644 --- /dev/null +++ b/papers/new-urls-fall-2026/figures/favicons/whistlegraph.org.png diff --git a/papers/new-urls-fall-2026/index.html b/papers/new-urls-fall-2026/index.html new file mode 100644 --- /dev/null +++ b/papers/new-urls-fall-2026/index.html @@ -0,0 +1,357 @@ +New URLs on AC Fall 2026 + + + + +
+ +
+
+

Broadside · aesthetic.computer · window 2026-08-16 to 2026-09-15

+

New URLs on AC, Fall 2026

+

Every address the Aesthetic Computer network learned to answer in the last thirty days, grouped by the host that answers it, in plain words. One sheet: what it is, what it's for, and when it opened.

+
+
+
19http routes
+
5new hosts
+
2mail doors
+
6socket channels
+
4fleet services
+
17doors changed
+
+
+ +
+ + +
+
+

aesthetic.computer/api/… served by lith, redeploys on every push

+

The main site's back room. Each file in the functions folder becomes one of these.

+ +
+ GET/POST/api/mail +
Your mailbox. Inbox, sent, unread count, and your addresses. Letters written with tell had been piling up here since April with no way to read them.
+
2026-09-11a150032903live
+
+
+ GET/api/pruttivox?id=… +
Speaks one of @prutti's chat messages in his consented voice clone, with per-word timing for karaoke. Renders are cached on Spaces.
+
2026-09-08648e73a46elive
+
+
+ POST/api/prompt-log +
Records every prompt anyone submits, including the misses. Admin can search it and pull counts.
+
2026-09-0318f1271a5blive
+
+
+ GET/POST/api/mimechan +
An anonymous imageboard where the file's mimetype picks the board. Serves stored files under a sandbox policy.
+
2026-09-027f0af85c25live
+
+
+ POST/api/easel-inference +
Rents AI inference to a signed-in handle so an Easel install needs no vendor CLI. Metered by a daily per-handle budget.
+
2026-09-1234d2f33d3dlive
+
+
+ GET/POST/api/laklok-theme +
A census of which tema each laklok visitor wears. Both sister interfaces report on boot and on tap.
+
2026-09-13b7037992a4live
+
+
+ GET/api/mediascholar-status +
Public progress of the Mediascholar paper worker. Also answers at papers.aesthetic.computer.
+
2026-09-05467553fedblive
+
+
+ +
+

inbound.aesthetic.computer:25 SMTP, the mail door

+

The first way for the outside world to write to an AC handle. Only Google's relays may knock.

+
+ <handle>@aesthetic.computer · <permahandle>@ · amail+<permahandle>@ +
Any handle is now an email address. The plus-tagged form is the return address on letters AC sends out, so replies find their way home.
+
2026-09-13f6be8556c6 · e8157fcb36liveroute secret unset
+
+
+ smtp-relay.gmail.com (outbound) +
Letters can leave the wall. They go out as "@handle via aesthetic.computer" and the domain now carries SPF and DKIM, so they land in inboxes.
+
2026-09-13 · 09-14e8157fcb36 · d3d9a8486clive
+
+
+
+ + +
+
+

prompt.ac the short front door

+
+ GETprompt.ac/easel.sh · /easel.tar.gz · /easel.json +
One-line installer for Easel, the terminal coding tool. The tarball and manifest are packed on lith at deploy; the updater reads the manifest.
+
2026-09-116e02494c08 · f9e68d9576live
+
+
+ GETprompt.ac/~<channel> +
The address a phone actually gets. Drops it straight into a live Aesthetic Code channel.
+
2026-09-10cca4851c9elive
+
+
+ GETprompt.ac/<piece> +
Dotless paths now boot the HTML prompt in place instead of bouncing to aesthetic.computer. The Cloudflare redirect rule was switched off.
+
2026-09-01a3b530ee4dlive
+
+
+ +
+

sotce.net/sotce-net/… the confessional

+
+ GET/sw.js · /manifest.json +
A push service worker and web-app manifest so pages, answers and chatter can ring readers' phones, iPhones included.
+
2026-09-0591d70b972a · d0cbaf7c4blive
+
+
+ POST/notification-choice +
Remembers each reader's bell choice and keeps a running count of who is opted in.
+
2026-09-132fed73e172live
+
+
+ GET/subscribers · /active-subscribers +
Two numbers, split on purpose: the public subscriber count and the operational one that metrics reads.
+
2026-09-1396bb08a349live
+
+
+ GET/comment (was /chat) · www → sotce.net +
The chat room reads as a comment room now, and www folds into one canonical origin so Auth0, push and storage agree.
+
2026-09-07bc12f6990c · 8ab5f40c38live
+
+
+ +
+

whistlegraph.org and its TV

+
+ GETtv.whistlegraph.org +
The archive as broadcast: a zero-chrome fullscreen TV of whistlegraph performances. DNS checked today and answering.
+
2026-08-16e861ac3e84live
+
+
+ GET/api/wg/verify?receipt=&sig= +
A free check that a license receipt is genuine. The whole receipt is signed, so a code alone can't forge one.
+
2026-08-27c545a5444flive
+
+
+ GET/stars · /comments · /wild +
Three static rooms: the sky, what people said, and a field guide to sightings. Claimed by name so they aren't mistaken for codes.
+
2026-09-01 · 09-03 · 09-05live
+
+
+
+ + +
+
+

new hosts subdomains that did not exist in August

+
+ nft.aesthetic.computer + /data/*.json +
Cross-chain NFT portal with live media and holder snapshots served as plain JSON: catalog, RDP, a2p v2, ten whistlegraphs.
+
2026-08-31d109bf8e1dnew host
+
+
+ rdp.aesthetic.computer/json/1…239 +
Byte-faithful recovered metadata for all 239 RDP tokens, so the on-chain pointers resolve again.
+
2026-08-31ff3ed1359anew host
+
+
+ menuband.app → App Store +
The apex forwards straight to the Mac App Store page.
+
2026-08-31b65327ef01new host
+
+
+ inbound.aesthetic.computer (https, acme only) +
Exists so certbot can mint the mail door's certificate. Says "SMTP on :25" and nothing else.
+
2026-09-13318f1830c0 · ae1933a8b7new host
+
+
+ +
+

wss://session-server… live sockets; self-deploys every 60 s since 09-11

+
+ /agent-presence?room=<handle>&role=agent|surface +
Claude-in: an agent and a handle's screens can see each other, which lights the crab mark top-right.
+
2026-09-03e72aa69a7b
+
+
+ diagnostics:listen · diagnostics:report +
A running piece can report on its own health, and only its author hears it.
+
2026-09-11dd45600402
+
+
+ GET/oskiewar-open-room · oskiewar:seat · :input · :net +
Strangers meet at the front door: the open versus room is public, and both seats now simulate the whole fight with rollback.
+
2026-09-03 · 09-05 · 09-09039b0cda33 · c5121d2f97 · c6a5729862
+
+
+ chat:service-message +
YouTube live-chat viewers appear in the clock room as televised guests, authorised by a service secret rather than a person.
+
2026-09-01c894adb754
+
+
+ +
+

fleet machines behind the site

+
+ prox worker :5252 /job · /poke · /status/mediascholar +
Headless Linux job controller for the Mediascholar paper worker, LAN-bound. Its status is what the public status page proxies.
+
2026-09-05ba66817f1d
+
+
+ actv · wgtv · wgtv-playout · tvchat +
Whistlegraph TV and laer-klokken TV, 24/7 to YouTube, with the chat bridge back into the clock room.
+
2026-09-012d867102e0 · c894adb754
+
+
+ Auth0 action: link-email-identity +
Runs in the Auth0 tenant: an emailed-code login merges into the account that already exists.
+
2026-09-11d3d908bd77
+
+
+
+
+ +
+

A letter's path

+
+
someone@gmail.comwrites to prutti@aesthetic.computer
+
Google Workspacecatches the domain, applies a route, relays it on
+
inbound:25accepts Google's relays only, checks SPF, DKIM and DMARC
+
tells collectionfiled as a letter with subject, from-email and the sender's name
+
amail piece + pushthe reader's phone buzzes; the reply leaves via Gmail with the plus-tag
+
+
+ +
+
+

Doors that were already open but changed shape

+
    +
  • /api/ask daily token budget per handle; anonymous callers get the cheap model only.
  • +
  • /run a handle/slug channel needs that handle's token; ownership is the token, not the secret name.
  • +
  • /api/tell now lands in the recipient's mail; letter text kept out of push bodies and logs.
  • +
  • /api/say any signed-in handle may send text; the prutti voice is producer-gated.
  • +
  • /api/version long-poll held 45 s instead of 4 s. It was 57% of daily requests.
  • +
  • /api/oskiewar-replays anonymous seat may upload; rooms named on round summaries.
  • +
  • /api/register-push-token sotce tenant and topics for pages and chat.
  • +
  • /api/chat-messages rows carry who relayed them and a YouTube walk-back link.
  • +
  • /api/piece-hit bots counted but flagged; a stray socket upgrade gets a 426 pointing at the session server.
  • +
  • /api/nom-scores numrank game added; score-only runs.
  • +
  • /api/wg/* facilitator signs every call with a fresh Ed25519 JWT.
  • +
  • caddy cache worker bundle immutable; bios and disk no-cache; oskiewar modules precompressed.
  • +
+
+
+ How to read this. Every commit named here is on origin/main. lith redeploys itself on push, so the http routes are presumed in production; the session server has watched for its own changes since 2026-09-11. Live was checked by hand today for the mail door, the TV host and the mailbox. Route secret unset means the mail door still logs that any Google tenant's route would be accepted. Not on this sheet: feed worker (no changes), local-only MCP servers, the loopback credential proxy.

Compiled 2026-09-15 from the git record between 2026-08-16 and 2026-09-15. Set in Bricolage Grotesque, IBM Plex Sans and IBM Plex Mono. aesthetic.computer
+
+ +
+ + diff --git a/papers/new-urls-fall-2026/new-urls-fall-2026-source-README.txt b/papers/new-urls-fall-2026/new-urls-fall-2026-source-README.txt new file mode 100644 --- /dev/null +++ b/papers/new-urls-fall-2026/new-urls-fall-2026-source-README.txt @@ -0,0 +1,7 @@ +new-urls-fall-2026 — embedded source bundle + +Included files +- new-urls-fall-2026.tex (TEX source) + +Purpose +This machine-readable bundle accompanies the rendered PDF for accessibility, audit, quotation, and reproducible editing. The PDF remains the canonical reading edition. The bundle is deliberately limited to text source files; private evidence, credentials, raw datasets, generated PDFs, and unlisted assets are excluded. diff --git a/papers/new-urls-fall-2026/new-urls-fall-2026-source.zip b/papers/new-urls-fall-2026/new-urls-fall-2026-source.zip new file mode 100644 --- /dev/null +++ b/papers/new-urls-fall-2026/new-urls-fall-2026-source.zip diff --git a/papers/new-urls-fall-2026/new-urls-fall-2026.tex b/papers/new-urls-fall-2026/new-urls-fall-2026.tex new file mode 100644 --- /dev/null +++ b/papers/new-urls-fall-2026/new-urls-fall-2026.tex @@ -0,0 +1,211 @@ +% !TEX program = xelatex +% New URLs on AC, Fall 2026 — a broadside. One tabloid sheet of every network +% address the Aesthetic.Computer network learned to answer, 2026-08-16 → 09-15. +% Modelled on grants/culturehub-la-2026/acceptance/packet/program-broadside.tex. +\documentclass[10pt]{article} +\usepackage[paperwidth=12in,paperheight=18in,top=0.55in,bottom=0.5in,left=0.62in,right=0.62in]{geometry} +\usepackage{fontspec} +\usepackage{xcolor} +\usepackage{graphicx} +\usepackage{tabularx} +\usepackage{booktabs} +\usepackage{array} +\usepackage{ragged2e} +\usepackage{microtype} +\usepackage{tikz} +\usetikzlibrary{positioning,arrows.meta} +\usepackage{hyperref} +\hypersetup{colorlinks=true,urlcolor=acblue,linkcolor=acdark,pdftitle={New URLs on AC, Fall 2026}} + +% Latin Modern by OTF filename: xelatex on macOS cannot resolve the family by +% name and silently falls back to nullfont (see papers/SCORE.md, cards lane). +\setmainfont{lmsans10-regular.otf}[ + BoldFont=lmsans10-bold.otf, + ItalicFont=lmsans10-oblique.otf, + BoldItalicFont=lmsans10-boldoblique.otf, +] +\setmonofont{lmmonolt10-regular.otf}[Scale=0.92, + BoldFont=lmmonolt10-bold.otf, + ItalicFont=lmmonolt10-oblique.otf, +] +% The YWFT display face: masthead only. Its punctuation is broken, so every +% dash, dot or slash inside a display string comes from the main font. +\newfontfamily\acbold{ywft-processing-bold}[Path=../../system/public/type/webfonts/,Extension=.ttf] +\newcommand{\dsep}{{\normalfont\;\textperiodcentered\;}} + +\definecolor{acpink}{HTML}{B44887} +\definecolor{acpurple}{HTML}{7850B4} +\definecolor{acblue}{HTML}{1559A6} +\definecolor{acdark}{HTML}{312B38} +\definecolor{acgray}{HTML}{66636A} +\definecolor{acpale}{HTML}{F4F1F5} +\definecolor{acrule}{HTML}{DCD6DF} +\definecolor{acgreen}{HTML}{2D7650} +\definecolor{acorange}{HTML}{A85D24} +\newcommand{\acdot}{{\color{acpink}.}} +\newcommand{\ac}{Aesthetic{\acdot}Computer} + +\pagestyle{empty} +\setlength{\parindent}{0pt} +\setlength{\parskip}{0pt} +\hyphenpenalty=10000\exhyphenpenalty=10000 + +% ── the vocabulary of the sheet ───────────────────────────────────────── +% \host{favicon}{name}{what it is} +\newcommand{\host}[3]{% + \vspace{0.5em}% + {\color{acdark}\rule{\linewidth}{1.6pt}}\par\vspace{0.3em}% + {\raisebox{-0.22em}{\includegraphics[width=1.15em,height=1.15em]{figures/favicons/#1}}\ {\ttfamily\bfseries\fontsize{12.5pt}{14pt}\selectfont\color{acdark}#2}}\par\vspace{0.1em} + {\fontsize{8pt}{9.6pt}\selectfont\color{acgray}\RaggedRight#3\par}\vspace{0.5em}} +% \addr{method}{path}{why}{date}{commit}{pill} +\newcommand{\addr}[6]{% + \par\nointerlineskip{\color{acrule}\hrule height 0.5pt}\vspace{0.42em}% + {\ttfamily\fontsize{8.8pt}{10.4pt}\selectfont{\bfseries\color{acpink}#1}\ {\bfseries\color{acdark}#2}}\par\vspace{0.12em}% + {\fontsize{8.8pt}{10.6pt}\selectfont\color{acdark}\RaggedRight#3\par}\vspace{0.16em}% + {\ttfamily\fontsize{7.2pt}{8.4pt}\selectfont\color{acgray}#4\ \ #5}\hfill#6\par\vspace{0.48em}} +\newcommand{\pill}[2]{{\fontsize{6.2pt}{7pt}\selectfont\colorbox{#1!12}{\textcolor{#1}{\bfseries\textls[60]{#2}}}}} +\newcommand{\live}{\pill{acgreen}{LIVE}} +\newcommand{\newhost}{\pill{acpink}{NEW HOST}} +\newcommand{\checkit}[1]{\pill{acorange}{#1}} +\newcommand{\hd}[1]{{\ttfamily\bfseries\fontsize{9pt}{10.3pt}\selectfont\color{acdark}#1}} +\newcommand{\lt}{\textless}\newcommand{\gt}{\textgreater} +% \changed{path}{what changed} +\newcommand{\changed}[2]{\par\nointerlineskip{\color{acrule}\hrule height 0.5pt}\vspace{0.3em}{\fontsize{8.3pt}{10pt}\selectfont\RaggedRight{\ttfamily\bfseries\color{acdark}#1}\ \ \color{acdark}#2\par}\vspace{0.3em}} + +\begin{document} + +% ═══════════════════════════════════════ masthead +{\ttfamily\fontsize{8.4pt}{10pt}\selectfont\color{acpink}\textls[80]{BROADSIDE\dsep AESTHETIC.COMPUTER\dsep WINDOW 2026-08-16 TO 2026-09-15}\par} +\vspace{0.3em} +{\acbold\fontsize{54pt}{52pt}\selectfont\color{acdark}New URLs on AC\ \ {\color{acpink}Fall 2026}\par} +\vspace{0.55em} +\begin{minipage}[t]{0.64\linewidth}\vspace{0pt} +{\fontsize{11.4pt}{14.2pt}\selectfont\color{acdark}\RaggedRight +Every address the \ac{} network learned to answer in the last thirty days, grouped by the host that answers it, in plain words. One sheet: what it is, what it is for, and when it opened.\par} +\vspace{0.45em} +{\fontsize{8.2pt}{10pt}\selectfont\color{acgray}\href{https://prompt.ac/@jeffrey}{\color{acblue}\textbf{@jeffrey}}\ \textperiodcentered\ \ac{}\ \textperiodcentered\ compiled 2026-09-15 from the git record\par} +\end{minipage}% +\hfill +\begin{minipage}[t]{0.32\linewidth}\vspace{0pt} +\renewcommand{\arraystretch}{0.9} +\begin{tabularx}{\linewidth}{@{}>{\raggedleft\arraybackslash}X>{\raggedleft\arraybackslash}X>{\raggedleft\arraybackslash}X@{}} +{\bfseries\fontsize{26pt}{26pt}\selectfont\color{acdark}19} & {\bfseries\fontsize{26pt}{26pt}\selectfont\color{acdark}5} & {\bfseries\fontsize{26pt}{26pt}\selectfont\color{acdark}2}\\ +{\ttfamily\fontsize{6.6pt}{8pt}\selectfont\color{acgray}HTTP ROUTES} & {\ttfamily\fontsize{6.6pt}{8pt}\selectfont\color{acgray}NEW HOSTS} & {\ttfamily\fontsize{6.6pt}{8pt}\selectfont\color{acgray}MAIL DOORS}\\[0.5em] +{\bfseries\fontsize{26pt}{26pt}\selectfont\color{acdark}6} & {\bfseries\fontsize{26pt}{26pt}\selectfont\color{acdark}4} & {\bfseries\fontsize{26pt}{26pt}\selectfont\color{acpink}17}\\ +{\ttfamily\fontsize{6.6pt}{8pt}\selectfont\color{acgray}SOCKET CHANNELS} & {\ttfamily\fontsize{6.6pt}{8pt}\selectfont\color{acgray}FLEET SERVICES} & {\ttfamily\fontsize{6.6pt}{8pt}\selectfont\color{acgray}DOORS CHANGED}\\ +\end{tabularx} +\end{minipage}\par +\vspace{0.45em} +{\color{acdark}\rule{\linewidth}{3pt}}\par +\vspace{0.1em} + +% ═══════════════════════════════════════ the map: three columns of hosts +\begin{minipage}[t]{0.315\linewidth}\vspace{0pt} + +\host{aesthetic.computer.png}{aesthetic.computer/api/\ldots}{the main site's back room, served by lith, which redeploys itself on every push} +\addr{GET/POST}{/api/mail}{Your mailbox: inbox, sent, unread count and your addresses. Letters written with \texttt{tell} had been piling up here since April with no way to read them.}{2026-09-11}{a150032903}{\live} +\addr{GET}{/api/pruttivox?id=\ldots}{Speaks one of @prutti's chat messages in his consented voice clone, with per-word timing for karaoke. Renders are cached on Spaces.}{2026-09-08}{648e73a46e}{\live} +\addr{POST}{/api/prompt-log}{Records every prompt anyone submits, misses included. Admin can search it and pull counts.}{2026-09-03}{18f1271a5b}{\live} +\addr{GET/POST}{/api/mimechan}{An anonymous imageboard where the file's mimetype picks the board. Stored files are served under a sandbox policy.}{2026-09-02}{7f0af85c25}{\live} +\addr{POST}{/api/easel-inference}{Rents AI inference to a signed-in handle so an Easel install needs no vendor CLI. Metered by a daily per-handle budget.}{2026-09-12}{34d2f33d3d}{\live} +\addr{GET/POST}{/api/laklok-theme}{A census of which tema each laklok visitor wears. Both sister interfaces report on boot and on tap.}{2026-09-13}{b7037992a4}{\live} +\addr{GET}{/api/mediascholar-status}{Public progress of the Mediascholar paper worker. Also answers at papers.aesthetic.computer.}{2026-09-05}{467553fedb}{\live} + +\host{aesthetic.computer.png}{inbound.aesthetic.computer:25}{SMTP, the mail door: the first way for the outside world to write to an AC handle. Only Google's relays may knock.} +\addr{SMTP}{\lt handle\gt @aesthetic.computer\newline \lt permahandle\gt @ \ \textperiodcentered\ \ amail+\lt permahandle\gt @}{Any handle is now an email address. The plus-tagged form is the return address on letters AC sends out, so replies find their way home.}{2026-09-13}{f6be8556c6 e8157fcb36}{\live\ \checkit{ROUTE SECRET UNSET}} +\addr{OUT}{smtp-relay.gmail.com}{Letters can leave the wall. They go out as ``@handle via aesthetic.computer'' and the domain now carries SPF and DKIM, so they land in inboxes.}{2026-09-13 / 09-14}{e8157fcb36 d3d9a8486c}{\live} + +\vspace{0.3em}% +{\color{acdark}\rule{\linewidth}{1.6pt}}\par\vspace{0.18em}% +{\ttfamily\fontsize{7.6pt}{9pt}\selectfont\color{acpink}\textls[80]{HOW TO READ THIS}\par}\vspace{0.3em} +{\fontsize{7.9pt}{9.6pt}\selectfont\color{acgray}\RaggedRight +Every commit named here is on origin/main. lith redeploys itself on push, so the HTTP routes are presumed in production; the session server has watched for its own changes since 2026-09-11. {\color{acdark}\bfseries Live} was checked by hand on 2026-09-15 for the mail door, the TV host and the mailbox. {\color{acdark}\bfseries Route secret unset} means the mail door still logs that any Google tenant's route would be accepted. {\color{acdark}\bfseries Not on this sheet:} the feed worker (no changes), local-only MCP servers, the loopback credential proxy.\par +\vspace{0.3em} +Icons are the ones each host serves today. prompt.ac points its icon at a bucket that answers AccessDenied, so it wears the aesthetic.computer mark; so do the mail door, the session server and the fleet, which have no web icon. Source sweep in \texttt{endpoints-30d.md}. Set in YWFT Processing, Latin Modern Sans and Latin Modern Mono. \ac{}\par} + +\end{minipage}% +\hfill{\color{acrule}\vrule width 1pt}\hfill +\begin{minipage}[t]{0.315\linewidth}\vspace{0pt} + +\host{aesthetic.computer.png}{prompt.ac}{the short front door} +\addr{GET}{prompt.ac/easel.sh\newline /easel.tar.gz\ \textperiodcentered\ /easel.json}{One-line installer for Easel, the terminal coding tool. The tarball and manifest are packed on lith at deploy; the updater reads the manifest.}{2026-09-11}{6e02494c08 f9e68d9576}{\live} +\addr{GET}{prompt.ac/\textasciitilde\lt channel\gt}{The address a phone actually gets. Drops it straight into a live Aesthetic Code channel.}{2026-09-10}{cca4851c9e}{\live} +\addr{GET}{prompt.ac/\lt piece\gt}{Dotless paths now boot the HTML prompt in place instead of bouncing to aesthetic.computer. The Cloudflare redirect rule was switched off.}{2026-09-01}{a3b530ee4d}{\live} + +\host{sotce.net.png}{sotce.net/sotce-net/\ldots}{the confessional} +\addr{GET}{/sw.js\ \textperiodcentered\ /manifest.json}{A push service worker and web-app manifest so pages, answers and chatter can ring readers' phones, iPhones included.}{2026-09-05}{91d70b972a d0cbaf7c4b}{\live} +\addr{POST}{/notification-choice}{Remembers each reader's bell choice and keeps a running count of who is opted in.}{2026-09-13}{2fed73e172}{\live} +\addr{GET}{/subscribers\ \textperiodcentered\ /active-subscribers}{Two numbers, split on purpose: the public subscriber count and the operational one that metrics reads.}{2026-09-13}{96bb08a349}{\live} +\addr{GET}{/comment (was /chat)\ \textperiodcentered\ www $\rightarrow$ sotce.net}{The chat room reads as a comment room now, and www folds into one canonical origin so Auth0, push and storage agree.}{2026-09-07}{bc12f6990c 8ab5f40c38}{\live} + +\host{whistlegraph.org.png}{whistlegraph.org}{and its TV} +\addr{GET}{tv.whistlegraph.org}{The archive as broadcast: a zero-chrome fullscreen TV of whistlegraph performances. DNS checked today and answering.}{2026-08-16}{e861ac3e84}{\live} +\addr{GET}{/api/wg/verify?receipt=\&sig=}{A free check that a license receipt is genuine. The whole receipt is signed, so a code alone cannot forge one.}{2026-08-27}{c545a5444f}{\live} +\addr{GET}{/stars\ \textperiodcentered\ /comments\ \textperiodcentered\ /wild}{Three static rooms: the sky, what people said, and a field guide to sightings. Claimed by name so they are not mistaken for codes.}{09-01 / 09-03 / 09-05}{}{\live} + +\end{minipage}% +\hfill{\color{acrule}\vrule width 1pt}\hfill +\begin{minipage}[t]{0.315\linewidth}\vspace{0pt} + +\host{aesthetic.computer.png}{new hosts}{subdomains that did not exist in August} +\addr{}{\includegraphics[width=0.95em,height=0.95em]{figures/favicons/aesthetic.computer.png}\ nft.aesthetic.computer + /data/*.json}{Cross-chain NFT portal with live media and holder snapshots served as plain JSON: catalog, RDP, a2p v2, ten whistlegraphs.}{2026-08-31}{d109bf8e1d}{\newhost} +\addr{}{\includegraphics[width=0.95em,height=0.95em]{figures/favicons/rdp.aesthetic.computer.png}\ rdp.aesthetic.computer/json/1\ldots239}{Byte-faithful recovered metadata for all 239 RDP tokens, so the on-chain pointers resolve again.}{2026-08-31}{ff3ed1359a}{\newhost} +\addr{}{\includegraphics[width=0.95em,height=0.95em]{figures/favicons/menuband.app.png}\ menuband.app $\rightarrow$ App Store}{The apex forwards straight to the Mac App Store page.}{2026-08-31}{b65327ef01}{\newhost} +\addr{}{\includegraphics[width=0.95em,height=0.95em]{figures/favicons/aesthetic.computer.png}\ inbound.aesthetic.computer (https)}{Exists so certbot can mint the mail door's certificate. Says ``SMTP on :25'' and nothing else.}{2026-09-13}{318f1830c0 ae1933a8b7}{\newhost} + +\host{aesthetic.computer.png}{wss://session-server\ldots}{live sockets; self-deploys every 60 s since 09-11} +\addr{WS}{/agent-presence?room=\lt handle\gt\newline \&role=agent\textbar surface}{Claude-in: an agent and a handle's screens can see each other, which lights the crab mark top-right.}{2026-09-03}{e72aa69a7b}{} +\addr{WS}{diagnostics:listen\ \textperiodcentered\ diagnostics:report}{A running piece can report on its own health, and only its author hears it.}{2026-09-11}{dd45600402}{} +\addr{GET}{/oskiewar-open-room\newline oskiewar:seat\ \textperiodcentered\ :input\ \textperiodcentered\ :net}{Strangers meet at the front door: the open versus room is public, and both seats now simulate the whole fight with rollback.}{09-03 / 09-05 / 09-09}{039b0cda33 c5121d2f97 c6a5729862}{} +\addr{WS}{chat:service-message}{YouTube live-chat viewers appear in the clock room as televised guests, authorised by a service secret rather than a person.}{2026-09-01}{c894adb754}{} + +\host{aesthetic.computer.png}{fleet}{machines behind the site} +\addr{HTTP}{prox worker :5252\newline /job\ \textperiodcentered\ /poke\ \textperiodcentered\ /status/mediascholar}{Headless Linux job controller for the Mediascholar paper worker, LAN-bound. Its status is what the public status page proxies.}{2026-09-05}{ba66817f1d}{} +\addr{RTMP}{actv\ \textperiodcentered\ wgtv\ \textperiodcentered\ wgtv-playout\ \textperiodcentered\ tvchat}{Whistlegraph TV and laer-klokken TV, 24/7 to YouTube, with the chat bridge back into the clock room.}{2026-09-01}{2d867102e0 c894adb754}{} +\addr{AUTH0}{action: link-email-identity}{Runs in the Auth0 tenant: an emailed-code login merges into the account that already exists.}{2026-09-11}{d3d908bd77}{} + +\end{minipage}\par + +% ═══════════════════════════════════════ a letter's path (diagram) +\vspace{0.6em} +{\color{acdark}\rule{\linewidth}{1.6pt}}\par\vspace{0.35em} +{\ttfamily\fontsize{8pt}{9.5pt}\selectfont\color{acpink}\textls[80]{A LETTER'S PATH}\par} +\vspace{0.1em} +\begin{center} +\begin{tikzpicture}[ + node distance=0.28in, + box/.style={draw=acdark, line width=0.8pt, rounded corners=1.5pt, fill=acpale, text width=1.66in, minimum height=0.78in, align=left, inner sep=6pt, font=\fontsize{8.6pt}{10.3pt}\selectfont\color{acdark}}, + arr/.style={-{Stealth[length=6pt,width=5pt]}, line width=0.9pt, draw=acpink} +] +\node[box] (a) {\hd{someone@gmail.com}\\[2pt]writes to prutti@aesthetic.computer}; +\node[box, right=of a] (b) {\hd{Google Workspace}\\[2pt]catches the domain, applies a route, relays it on}; +\node[box, right=of b] (c) {\hd{inbound:25}\\[2pt]accepts Google's relays only; checks SPF, DKIM and DMARC}; +\node[box, right=of c] (d) {\hd{tells collection}\\[2pt]filed as a letter, with its subject and the sender's address}; +\node[box, right=of d] (e) {\hd{amail piece + push}\\[2pt]the reader's phone buzzes; a reply leaves via Gmail}; +\draw[arr] (a) -- (b); \draw[arr] (b) -- (c); \draw[arr] (c) -- (d); \draw[arr] (d) -- (e); +\end{tikzpicture} +\end{center} +\vspace{0.3em} + +% ═══════════════════════════════════════ footer: changed doors + colophon +{\color{acdark}\rule{\linewidth}{3pt}}\par\vspace{0.45em} +{\ttfamily\fontsize{8pt}{9.5pt}\selectfont\color{acpink}\textls[80]{DOORS THAT WERE ALREADY OPEN BUT CHANGED SHAPE}\par}\vspace{0.35em} +\begin{minipage}[t]{0.315\linewidth}\vspace{0pt} +\changed{/api/ask}{daily token budget per handle; anonymous callers get the cheap model only.} +\changed{/run}{a handle/slug channel needs that handle's token. Ownership is the token, not the secret name.} +\changed{/api/tell}{now lands in the recipient's mail; letter text kept out of push bodies and logs.} +\changed{/api/say}{any signed-in handle may send text; the prutti voice is producer-gated.} +\end{minipage}\hfill +\begin{minipage}[t]{0.315\linewidth}\vspace{0pt} +\changed{/api/version}{long-poll held 45 s instead of 4 s. It was 57\% of daily requests.} +\changed{/api/oskiewar-replays}{anonymous seat may upload; rooms named on round summaries.} +\changed{/api/register-push-token}{sotce tenant and topics for pages and chat.} +\changed{/api/chat-messages}{rows carry who relayed them and a YouTube walk-back link.} +\end{minipage}\hfill +\begin{minipage}[t]{0.315\linewidth}\vspace{0pt} +\changed{/api/piece-hit}{bots counted but flagged; a stray socket upgrade gets a 426 pointing at the session server.} +\changed{/api/nom-scores}{numrank game added; score-only runs.} +\changed{/api/wg/*}{facilitator signs every call with a fresh Ed25519 JWT.} +\changed{caddy cache}{worker bundle immutable; bios and disk no-cache; oskiewar modules precompressed.} +\end{minipage}\par +\end{document} diff --git a/plugins/illy/config/providers.json b/plugins/illy/config/providers.json --- a/plugins/illy/config/providers.json +++ b/plugins/illy/config/providers.json @@ -4,15 +4,69 @@ "openai": { "label": "OpenAI Images API", "credential": "OPENAI_API_KEY", "models": { - "gpt-image-2": { "modes": ["generate", "edit"], "sizes": ["1024x1024", "1024x1536", "1536x1024"], "defaultQuality": "high" } + "gpt-image-2": { + "modes": [ + "generate", + "edit" + ], + "sizes": [ + "1024x1024", + "1024x1536", + "1536x1024" + ], + "defaultQuality": "high" + }, + "gpt-image-2.5-flare": { + "modes": [ + "generate", + "edit" + ], + "sizes": [ + "1024x1024", + "1024x1536", + "1536x1024" + ], + "defaultQuality": "high" + }, + "gpt-image-2.5-sunburst": { + "modes": [ + "generate", + "edit" + ], + "sizes": [ + "1024x1024", + "1024x1536", + "1536x1024" + ], + "defaultQuality": "high" + } } }, "fal": { "label": "fal.ai", "credential": "FAL_KEY", "models": { - "fal-ai/flux/dev": { "modes": ["generate"], "input": { "prompt": "prompt", "size": "image_size" }, "output": "images.0.url" }, - "fal-ai/flux/dev/image-to-image": { "modes": ["edit"], "maxReferences": 1, "input": { "prompt": "prompt", "reference": "image_url" }, "output": "images.0.url" } + "fal-ai/flux/dev": { + "modes": [ + "generate" + ], + "input": { + "prompt": "prompt", + "size": "image_size" + }, + "output": "images.0.url" + }, + "fal-ai/flux/dev/image-to-image": { + "modes": [ + "edit" + ], + "maxReferences": 1, + "input": { + "prompt": "prompt", + "reference": "image_url" + }, + "output": "images.0.url" + } } } } diff --git a/system/public/papers.aesthetic.computer/laer-klokken-escapades-26-cards.pdf b/system/public/papers.aesthetic.computer/laer-klokken-escapades-26-cards.pdf new file mode 100644 --- /dev/null +++ b/system/public/papers.aesthetic.computer/laer-klokken-escapades-26-cards.pdf