Back to the site

PATCH ARCHIVE // DEVELOPMENT RECORDS

What broke, and how we fixed it.

This is not a changelog. Every entry below is a fault this site actually had: how it showed up, why it was worth chasing, and what changed. Difficulty is recorded on a five step scale.

PATCH / FIX

Threat levels

The same entity at five sizes. It grows with how hard the fault was to find, not with how much code it took to fix. The two rarely match.

  1. 01 // TRACE EASY

    An isolated fault. You see it at once, and it lives in one place.

  2. 02 // DRIFT MODERATE

    Clear cause, but it reaches several places. The work is mapping how far.

  3. 03 // ANOMALY HARD

    Behaviour and code disagree. Understanding it costs more than fixing it.

  4. 04 // ABYSS EXTREME

    Several systems claim the same authority. Each fix moves another one.

  5. 05 // 4072 NIGHTMARE

    Reopened more than once, each time with a different cause, and each one real.

IMPLEMENTATION / NEW FEATURE

Implementation levels

The same lily as the site, three openings. It does not measure difficulty: it measures how much of the site a new feature reaches, and how much it changes the way you move through it.

  1. 01 // LILY ADDITION

    A single addition. It touches one place and does not change how you move through the site.

  2. 02 // GLITCH LILY EXPANSION

    A real feature that reaches several parts. From then on the site offers something it did not have.

  3. 03 // 4072 BLOOM TRANSFORMATION

    A new system. After it, the site is not visited the same way.

Records

03 // ANOMALY HARD

REGRESSION

Favicon and navbar had swapped identities

SYMPTOM
The official PNG intended for the browser tab had been interpreted as the navbar’s visible logo. Later correction attempts replaced the historic expanded wordmark and disabled the compact lily; serve-5341.js had also fallen back to CommonJS inside the ESM project.
OBJECTIVE
Separate the favicon from visible branding for good, restoring the historic navbar without losing the official local server.
RESOLUTION
The 2400×2400 RGBA master remains exclusive to the favicon family for tabs, touch and manifest. Expanded navbar once again shows only sayonara_alice.exe; compact keeps the original lily and the VHS-liquid morph in both directions. serve-5341.js uses ESM and preserves disk streams, Range 206, no-store, Connection close and separate Portal/live-source routing.
STATUS // RESOLVED

04 // ABYSS EXTREME

INTERNAL OBSERVATION

Starfall rewarded waiting

SYMPTOM
Keeping a boss alive could inflate a record through duplicate pickups, summons, graze, Hull or Shield and time spent in non-playable states.
OBJECTIVE
Leave gameplay unchanged while making competitive score unfarmable, without turning it into a speedrun.
RESOLUTION
Pickups score only when they create progress, summons score zero, Hull and Shield stay within the baseline and competitive graze is capped at 80 per encounter. Active Gameplay Time counts only real flight and is restored on retry; Hardcore jitter is gone. STARFALL_RULES 2 separates new records from era 1.
STATUS // RESOLVED

04 // ABYSS EXTREME

INTERNAL OBSERVATION

Starfall difficulty was scaling the wrong things

SYMPTOM
Enemy density and movement shared one control, some boss moves accumulated multipliers and Boss Memory cycles did not build consistent endurance. God’s second special also projected its lasers outside the arena.
OBJECTIVE
Make Difficulty × Cycle perceptible without changing the fundamental attack geometry or leaking into Memory Route and Tournament.
RESOLUTION
density controls spawns and formations, enemyMove controls descent; special cooldown and speed use attenuated scaling exactly once. Boss Memory applies a C1–C6 endurance curve only in that mode. God converges on centre, locks, telegraphs four horizontal lanes inside real bounds and always releases movement after completion, pause, phase, death or retry.
STATUS // RESOLVED

02 // DRIFT MODERATE

REGRESSION

Information opened Home, not About

SYMPTOM
From internal pages, the Information icon could return to Home without landing on the About section.
OBJECTIVE
Use #about on Home and /home/index.html#about from every internal editorial page.
RESOLUTION
The link now follows page context and the generated shell inherits the same correct route. Home, Alice, Story, Visual Archive, Community and Updates were verified on desktop and mobile through the actual landing on About.
STATUS // RESOLVED

03 // 4072 BLOOM TRANSFORMATION

NEW FEATURE

The Global Archive became real

SYMPTOM
Starfall records existed only on the device that created them; there was no durable shared archive.
OBJECTIVE
Add an era 2 global leaderboard without sacrificing the local archive when the network or backend is unavailable.
RESOLUTION
Neon/PostgreSQL stores players and scores through versioned migrations; starfall_runtime has only the privileges it needs. The starfall-pilot and starfall-scores Netlify Functions serve creation, verification, submission and reading. A private preview validated the path end to end, then its QA data was removed and the database left clean.
STATUS // RESOLVED

02 // GLITCH LILY EXPANSION

NEW FEATURE

Every global record gained a Pilot Signature

SYMPTOM
The preparatory endpoint could accept global submissions without a valid signature and lacked complete protection against the same completion being sent twice.
OBJECTIVE
Bind every record to a verifiable anonymous pilot without storing that pilot’s secret in the database.
RESOLUTION
Creation returns a XXXXX-XXXXX Pilot ID and a private token that stays with the client; Neon receives only its SHA-256. A missing or invalid token rejects GLOBAL, a duplicate submission_id returns conflict and each completion can create at most one signed record.
STATUS // RESOLVED

02 // GLITCH LILY EXPANSION

NEW FEATURE

Visual Archive now browses like a memory

SYMPTOM
On phones, 16 CORE and 42 FRAGMENTS formed a long vertical grid that hid the rhythm of the images.
OBJECTIVE
Give CORE a single focus and FRAGMENTS compact pages while preserving tap, lightbox, vertical scroll and desktop.
RESOLUTION
On mobile, CORE advances one at a time and FRAGMENTS across eleven 2×2 pages, both with bidirectional circular swipe and no arrows. The loop is logical and does not clone the 63 sources; threshold and axis distinguish tap, swipe and scroll. Lazy loading, order, ECHO, lightbox and desktop layout remain unchanged.
STATUS // RESOLVED

03 // 4072 BLOOM TRANSFORMATION

NEW FEATURE

The editorial site learned ten languages

SYMPTOM
The main pages translated only part of the interface: new prose, controls and states could fall back to English or expose raw keys.
OBJECTIVE
Give Home, Alice, Story, Visual Archive, Community and Updates the same complete vocabulary in IT, EN, JA, DE, FR, ES, PL, TR, KO and Simplified Chinese.
RESOLUTION
Page-scoped dictionaries now extend one shared engine. Prose, labels, states, accessible attributes and document language change together; canonical names stay unchanged and no new record depends on the English fallback.
STATUS // RESOLVED

03 // 4072 BLOOM TRANSFORMATION

NEW FEATURE

About became an operational gateway

SYMPTOM
About presented controls and links as separate boxes, while the Memory Gate lacked the scenic weight of the entrance it represented.
OBJECTIVE
Unify navigation, sound, language and Visual Engine in a readable system with a central threshold that feels alive but controlled.
RESOLUTION
Memory Gate is now an arched digital door with ignition, vortex and a dormant state outside the viewport. The About menu exposes Information, Gate, Sound, Updates, Language and Visual Engine; visual controls share one preference and stay synchronized without permanent off-screen animation.
STATUS // RESOLVED

02 // GLITCH LILY EXPANSION

NEW FEATURE

The Contact Channel and footer became shared

SYMPTOM
Contact had no clear editorial place, while the historic footer was missing or diverging between pages.
OBJECTIVE
Keep the Contact Channel as a Home-only closing section and restore the same real footer across all six editorial pages.
RESOLUTION
Home carries the Contact Channel with send and copy actions; Alice, Story, Visual Archive, Community and Updates do not duplicate it. One component builds the historic footer on all six, including a clickable email address, ten languages, accessible reveal and a static reduced-motion state.
STATUS // RESOLVED

02 // GLITCH LILY EXPANSION

NEW FEATURE

The implementation lilies became living signals

SYMPTOM
A large solid disc behind the six petals made LILY, GLITCH LILY and 4072 BLOOM read as logos inside a sphere.
OBJECTIVE
Keep the same six-petal lily and grow behaviour, depth and glitch without inflating the flower.
RESOLUTION
Geometry, reveal and idle now live in separate SVG groups. Pulses travel through veins, desyncs recover and the 4072 BLOOM field alternates distinct events; the symbol never rotates, pauses outside the viewport and shows its complete static state under reduced motion.
STATUS // RESOLVED

01 // LILY ADDITION

DEVELOPMENT DISCOVERY

Development Archive gained a reproducible source

SYMPTOM
The Updates generator and official local server lived only in a checkpoint, while the generated HTML could look like a file meant to be edited by hand.
OBJECTIVE
Make the Archive’s live source explicit and ensure every regeneration produces the same result.
RESOLUTION
The official tools were promoted into scripts/. The generator takes the shared shell from Story, records from its own matrix and prose from the dictionaries; Updates declares its origin and two consecutive builds must be byte-identical.
STATUS // RESOLVED

04 // ABYSS EXTREME

INTERNAL OBSERVATION

The Starfall configuration panel

SYMPTOM
On desktop the settings panel next to the Starfall intro sat too high and pushed out of the frame that was supposed to contain it. Its first line was cut off.
OBJECTIVE
Put the panel back inside its frame without reducing text sizes and without taking apart the side by side layout, which works.
RESOLUTION
Four times we corrected a state that was not the one on screen. Every rule had been written for the panel after a difficulty is chosen, while the fault showed up before that. Measuring the real position of the box against the visible frame, instead of trusting an automatic check that said “nothing overflows”, showed it starting well above the edge. The panel now has a ceiling in every state, and when the content is taller it scrolls inside itself.
STATUS // RESOLVED

03 // ANOMALY HARD

INTERNAL OBSERVATION

Scrolling the records window

SYMPTOM
On a phone, swiping inside the records window moved the page behind it instead of the list. The list stayed where it was and the last records could not be reached.
OBJECTIVE
While the archive is open the gesture belongs to the archive, and whatever is behind it should stay where it was.
RESOLUTION
There were two height limits decided separately that did not add up. Whatever was left over was simply cut away and no element took charge of it, so the gesture travelled up to the page. The window now scrolls as one piece, the list is as tall as it needs to be, and the page behind stays locked until the archive closes.
STATUS // RESOLVED

02 // DRIFT MODERATE

DEVELOPMENT DISCOVERY

Column alignment in the leaderboard

SYMPTOM
On a tablet the leaderboard headings no longer sat above the columns they named. On desktop they did, which is why nobody had noticed.
OBJECTIVE
One definition of the columns, used by the heading row and by every record, so they cannot drift apart again.
RESOLUTION
They were two separate grids sharing a definition, but that definition left each one to size itself on its own content: the heading measured the word, the row measured the value below it. On a wide screen the two happened to agree. The widths are written out explicitly now, so the heading sits above its column in every condition.
STATUS // RESOLVED

01 // TRACE EASY

DEVELOPMENT DISCOVERY

The depth of the Pilot ID panel

SYMPTOM
Opened from the records window, the panel explaining the Pilot Signature ended up behind the leaderboard instead of over it. It was there and fully drawn, but invisible and impossible to touch.
OBJECTIVE
A panel that opens on top of something should be on top of it.
RESOLUTION
An old value was still in place, from when that panel could only be opened from a screen with nothing above it. We raised it just enough to sit above the archive and below everything else. The panel now also returns focus to the button that opened it.
STATUS // RESOLVED

05 // 4072 NIGHTMARE

INTERNAL OBSERVATION

Landscape containment on Safari

SYMPTOM
With the phone turned sideways the page ran past the edges of the screen. Depending on the round, what ended up in the wrong place was the text under the browser toolbar, the navigation bar next to the camera, or the side bands of the background. Every correction fixed one device and broke another.
OBJECTIVE
Keep the background full screen, which is how it should be, and at the same time keep all the content readable and touchable, without shrinking anything.
RESOLUTION
This record sits at level 05 because it reopened four times, each time with a different cause and each one real. The first mistake was treating “full screen” and “where the text goes” as the same surface: they are two separate things now, the background reaches the edges and the content has its own guaranteed margins. Then it turned out that fixed elements, such as the navigation bar, do not receive the margins of the sections, because they position against the window and not against what surrounds them: they needed a margin of their own. The third round was about the side background: written in shorthand, the background colour reverted to transparent, and on real Safari the side bands came out white. Colour and image are declared separately now. The last lesson was about method: an analysis done on the computer had concluded that the background image was never visible at the sides and that the colour alone was enough. The real phone disproved it. On this behaviour the authority is Safari, not the emulator.
STATUS // RESOLVED ATTEMPTS // MANY STATUS // SOMEHOW ALIVE

04 // ABYSS EXTREME

INTERNAL OBSERVATION

The video panel did not fill its space in landscape

SYMPTOM
On a narrow phone held sideways there was a dark band left under the video, and the clip was framed by two bars at the sides.
OBJECTIVE
Let the video fill the space it is given in landscape, without breaking the portrait layout, where that limit is still doing work.
RESOLUTION
The portrait layout, where the video is a band at the top and a height limit protects the space for the text below, was being selected by width alone. A narrow phone in landscape fell inside that threshold and brought the limit with it, where it made no sense: measured at 667 by 375, there were 71 pixels of empty space under the video plus 26 pixels of bar on each side. Removing it everywhere was not possible, because in portrait it still bites: at 320 by 568 it is worth almost 16 pixels. So it was cancelled for phones in landscape only.
STATUS // RESOLVED

04 // ABYSS EXTREME

INTERNAL OBSERVATION

The video panel seemed to chase the scroll

SYMPTOM
Scrolling the Home with the phone in landscape, the video panel seemed to follow the page instead of leaving the screen together with its own section.
OBJECTIVE
Work out what was actually moving it, without blaming an effect that was not in the code.
RESOLUTION
During the scroll no element changed position, transform or class: it was not a parallax. The section was as tall as the window, but declared with the unit that on iOS follows the Safari toolbar as it retracts. The section therefore grew mid scroll, and everything inside it moved down within the document while the page moved up. Simulating a 55 pixel reduction of the toolbar, the section went from 375 to 430 and the video dropped by the same amount. On a computer it was not reproducible, because there the toolbar does not retract. That height now uses the stable unit.
STATUS // RESOLVED

03 // ANOMALY HARD

INTERNAL OBSERVATION

Starfall records were not being kept

SYMPTOM
Names and scores disappeared. You finished a run, the record showed up in the archive, and after a reload the archive was empty again.
OBJECTIVE
A finished run should still be there after the page is closed, and the archive should say clearly where it is keeping the data.
RESOLUTION
There were two separate problems that looked like one. Records were never written to the browser storage, so nothing survived a reload. On top of that, the address the game asks for its records was being intercepted by a fixed file that could not hold any: a placeholder left over from an earlier stage, always answering the same thing. Records now stay on the device that produced them, and the archive says so in its own header. The placeholder has been removed from the current development path, and that address is ready for a shared archive, which is a separate job and has not been done yet.
STATUS // RESOLVED

03 // ANOMALY HARD

INTERNAL OBSERVATION

The Starfall intro was not centred

SYMPTOM
On an iPhone SE the Starfall opening screen appeared shifted to the right, while the game itself was centred.
OBJECTIVE
Centre it by construction, on every screen, without picking a number by looking at a screenshot.
RESOLUTION
The fact that the game was centred ruled out the canvas and the overall architecture, and left one suspect: the same element switches rules between the two states. In the opening state there was no declaration of how to compute the width, so padding and border added to it instead of fitting inside: at 375 pixels the box measured 373 in a space of 351, and the centre moved by eleven. The flight state rule already declared it. Both declare it now.
STATUS // RESOLVED

03 // ANOMALY HARD

INTERNAL OBSERVATION

The navigation bar went wide again on phones held sideways

SYMPTOM
With the phone in landscape the navigation bar dropped its compact layout and went back to the wide one, running past the margins it should have kept.
OBJECTIVE
Bring it back to the compact layout without redrawing it and without chasing individual devices.
RESOLUTION
The compact geometry was tied to a width threshold. Since the page extends all the way under the camera, an iPhone 12 in landscape reports 844 pixels instead of 750 and crosses that threshold, so the bar went wide. The new rule redraws nothing: it repeats the same values under a condition of touch capability plus height, never width, so the result stays identical to before.
STATUS // RESOLVED

02 // DRIFT MODERATE

REGRESSION

The Community portraits

SYMPTOM
Two portraits that were already framed correctly went back to being cropped, and one of them moved when the pointer went over it.
OBJECTIVE
Go back to exactly the approved state, without redrawing anything and without adding a second set of rules on top of the first.
RESOLUTION
A later edit had put back the very rules the approved fix had removed. Three visible symptoms, one cause. We removed those lines again instead of stacking more corrections over them.
STATUS // RESOLVED

02 // DRIFT MODERATE

INTERNAL OBSERVATION

The sealed node reveal

SYMPTOM
A node on the Community map started its reveal while it was still off screen. By the time you scrolled to it, the animation was already over.
OBJECTIVE
The animation should start when you are looking at it, not when the page loads.
RESOLUTION
Less trivial than it sounds, because arriving from a direct link makes the page glide to the point rather than jump to it. The check had to wait for the movement to start before it could wait for it to stop. The reveal now begins only when the node is really in view and the page has settled.
STATUS // RESOLVED

03 // ANOMALY HARD

COMMUNITY SIGNAL

The About panel stayed active after a tap

Anonymous community report · Identity withheld for privacy

SYMPTOM
On Chrome for Android, after opening and closing the About panel, the section below stopped responding to taps in that part of the screen.
OBJECTIVE
Find what was catching the taps, instead of moving or shrinking whatever sat underneath.
RESOLUTION
On Android the hover state sticks after a tap. The panel was therefore still treated as open and kept receiving taps even after the user had closed it: an invisible surface laid over the section. That rule now applies only where hover is a real, reversible state, which means with a mouse.
STATUS // RESOLVED

03 // ANOMALY HARD

INTERNAL OBSERVATION

Phones held sideways were getting the tablet layout

SYMPTOM
With the phone in landscape some sections took on the layout meant for tablets, with proportions that made no sense on a screen that short.
OBJECTIVE
Tell a tablet from a phone held sideways without reading the device model and without inventing bespoke thresholds.
RESOLUTION
The tablet rules were selected by width alone, and a phone held sideways is as wide as a small tablet. What separates them is height: a tablet stays tall even in landscape. We added a minimum height condition to the nine blocks involved, so width alone is no longer enough to trigger that layout.
STATUS // RESOLVED

01 // LILY ADDITION

NEW FEATURE

The Starfall orientation notice

SYMPTOM
Starfall is the one part of the site that a phone held sideways does not serve well: the flight area and the controls need height.
OBJECTIVE
Say so to whoever arrives, without stopping them from doing anything.
RESOLUTION
We added a notice suggesting you turn the phone. It is a suggestion and not a gate: you dismiss it and keep flying, and it touches neither the canvas, nor the controls, nor the score. Who sees it is decided by the same classification the navigation bar already uses, which is touch capability plus a screen too short to be a tablet, so the site has one system instead of two. No device model is read or named.
STATUS // RESOLVED

03 // ANOMALY HARD

INTERNAL OBSERVATION

The featured Starfall card ran off the screen

SYMPTOM
On iPhone the right edge of the featured Starfall card ended up past the edge of the screen. The automated checks, however, came back clean.
OBJECTIVE
Work out why the automatic measurement and the phone were saying two different things, and fix the cause rather than the symptom.
RESOLUTION
The card button held an element with a width of one hundred per cent, plus padding and a border. Buttons inherit from the browser the calculation that counts padding and border inside the width, but their children do not, and this sheet declared no reset: the element resolved to 370 pixels against a space that ended at 347. The card hid whatever overflowed, so those 23 pixels never showed up in the width of the document, which is why the automatic check could not see them. Measuring the document was the wrong probe: the card had to be measured from the inside.
STATUS // RESOLVED

02 // DRIFT MODERATE

INTERNAL OBSERVATION

The reading order of the BettahAI card on phones

SYMPTOM
On a phone the BettahAI card lost its hierarchy: the portrait ended up at the bottom, below the social icons, instead of staying next to the name.
OBJECTIVE
Put the portrait back where it belongs without duplicating the image and without adding a second element.
RESOLUTION
There was a comment in the sheet describing the intended order, centred image and then header, text and links, but that order had never been written down: the document structure decided it. All the text sat in one container and the portrait was its sibling, so once collapsed to a single column it could only land last. The text content is now promoted into the card grid and the order is stated: kicker, name, role, portrait, and then the rest.
STATUS // RESOLVED
COMMUNITY · 4072 Where the signals arrive The Community page collects what reaches the archive.