<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>alegauss — what every product shipped</title>
  <id>https://alegauss.github.io/changelog/</id>
  <link rel="alternate" href="https://alegauss.github.io/changelog/"/>
  <link rel="self" href="https://alegauss.github.io/changelog/feed.xml"/>
  <updated>2026-10-19T00:00:00Z</updated>
  <author><name>Alexandre Oliveira</name></author>
  <entry>
    <title>winwright · WW551: A case cannot drive the common Open or Save dialog, so choosing a file through it has no case</title>
    <id>https://alegauss.github.io/changelog/winwright/#WW551</id>
    <link href="https://github.com/alegauss/winwright/commit/e826dc4a3db9c747bc73e6182d2c30ea3ceabe74"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>A case cannot drive the common Open or Save dialog, so choosing a file through it has no case — 'choose file' fills the common Open or Save dialog's name box by id and confirms; a read absent proves it closed, and pick sets the type (design recorded in `src/Winwright/Acting/Act.cs`).</summary>
  </entry>
  <entry>
    <title>winwright · WW550: A case cannot drop a file from Explorer onto the application, so a drop zone has no case</title>
    <id>https://alegauss.github.io/changelog/winwright/#WW550</id>
    <link href="https://github.com/alegauss/winwright/commit/e6c2602e8721ccaaa160760462289f4abcb6a4b3"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>A case cannot drop a file from Explorer onto the application, so a drop zone has no case — 'drop file' drops a file onto the app by a real drag carrying CF_HDROP; a target that answers no effect is a named hole (design recorded in `src/Winwright/Acting/FileDrop.cs`).</summary>
  </entry>
  <entry>
    <title>winwright · WW549: A case first in its run cannot type: the window it launched never comes forward before any synthesised input</title>
    <id>https://alegauss.github.io/changelog/winwright/#WW549</id>
    <link href="https://github.com/alegauss/winwright/commit/da0d785d820b528fcdfe4f962a6e1e331d77e5af"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>A case first in its run cannot type: the window it launched never comes forward before any synthesised input — A launch hands the started process the foreground first, so a case first in its run or soaked alone comes forward (design recorded in `src/Winwright/Windowing/ForegroundLock.cs`).</summary>
  </entry>
  <entry>
    <title>winwright · WW548: A case cannot claim a window covers its monitor, so a full-screen mode that leaves a border or a pixel uncovered passes</title>
    <id>https://alegauss.github.io/changelog/winwright/#WW548</id>
    <link href="https://github.com/alegauss/winwright/commit/7c853f328b91a7cbdf8c9d119798605ca3abe60e"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>A case cannot claim a window covers its monitor, so a full-screen mode that leaves a border or a pixel uncovered passes — A step claims fillsMonitor: its element covers the whole monitor it is on, so a full screen leaving a border fails naming both rectangles and each edge left uncovered in pixels.</summary>
  </entry>
  <entry>
    <title>winwright · WW545: Typing into a terminal substitutes the last character for an earlier one about once a send in fifty, unrepaired</title>
    <id>https://alegauss.github.io/changelog/winwright/#WW545</id>
    <link href="https://github.com/alegauss/winwright/commit/d87820d804f0b732f86ecbd94c8eb554ab2bec37"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>Typing into a terminal substitutes the last character for an earlier one about once a send in fifty, unrepaired — Typing into a terminal repairs the last-character substitution before Enter, proven by quickshell's tab case passing 300 of 300 guest runs on 1.1.2, the repair firing on two.</summary>
  </entry>
  <entry>
    <title>Quickshell · QS369: The UI cases still carry a synthesised-input workaround for a foreground winwright 1.1.3 now takes itself</title>
    <id>https://alegauss.github.io/changelog/quickshell/#QS369</id>
    <link href="https://github.com/alegauss/quickshell/commit/7d4fcf113c78e746b7447dd5c93672c67f609c42"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>The UI cases still carry a synthesised-input workaround for a foreground winwright 1.1.3 now takes itself — The UI cases run on winwright 1.1.3, which takes the foreground at launch, so the nudge is gone and the tab case soaked alone passed 20 of 20.</summary>
  </entry>
  <entry>
    <title>Quickshell · QS368: Winwright 1.1.2's repair of the tab case's typed substitution is unproven, so winwright's WW545 stays blocked</title>
    <id>https://alegauss.github.io/changelog/quickshell/#QS368</id>
    <link href="https://github.com/alegauss/quickshell/commit/00a82b31470c0055e233a05b15ab7fefe1118bac"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>Winwright 1.1.2's repair of the tab case's typed substitution is unproven, so winwright's WW545 stays blocked — The tab case passed 300 of 300 guest runs on winwright 1.1.2, the repair firing on two; run-tests-vm -Soak repeats any one case on one build.</summary>
  </entry>
  <entry>
    <title>polyweave · PW565: A flattened sphere creases at its rim whatever its steps</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW565</id>
    <link href="https://github.com/alegauss/polyweave/commit/0b75d59d500a53b61a2b83ffa36b24462fde0964"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>A flattened sphere creases at its rim whatever its steps — A sphere's rings and meridians follow its normal, so a squashed or oval sphere reads no crease at its rim at the steps it declares (design recorded in `src/polyweave/layers/geometry/solid.py`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW564: A bevelled or carved piece loses its colours, and every built mesh is written faceted</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW564</id>
    <link href="https://github.com/alegauss/polyweave/commit/fb8b87af46d34f014915adbed9a342819aac91c4"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>A bevelled or carved piece loses its colours, and every built mesh is written faceted — A solve keeps what each face wears, and a document's smooth welds and shades a mesh smooth by angle.</summary>
  </entry>
  <entry>
    <title>polyweave · PW563: A bevel in a fresh process crashes with No module named bmesh</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW563</id>
    <link href="https://github.com/alegauss/polyweave/commit/fb8b87af46d34f014915adbed9a342819aac91c4"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>A bevel in a fresh process crashes with No module named bmesh — A bevel loads Blender before bmesh, so a declaration with a bevel builds in a fresh process.</summary>
  </entry>
  <entry>
    <title>polyweave · PW562: A sphere or torus declared with steps crashes the build with a TypeError</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW562</id>
    <link href="https://github.com/alegauss/polyweave/commit/fb8b87af46d34f014915adbed9a342819aac91c4"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>A sphere or torus declared with steps crashes the build with a TypeError — Every primitive takes steps as a whole number, so a sphere or torus declared with steps builds.</summary>
  </entry>
  <entry>
    <title>polyweave · PW561: A loop cut by sound.loop always opens on the track's first sample, even a dying beat</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW561</id>
    <link href="https://github.com/alegauss/polyweave/commit/1078fb1970a45f88f5adcec666f4641e9b1969a3"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>A loop cut by sound.loop always opens on the track's first sample, even a dying beat — sound.loop takes a start bar and rotates the loop to open on it, seamless still, and answers starts_at; Spinhold's intro now opens on bar 2, past the dying beat.</summary>
  </entry>
  <entry>
    <title>polyweave · PW560: sound.loop fails an Ogg loop's seam that sound.measure reads as ordinary</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW560</id>
    <link href="https://github.com/alegauss/polyweave/commit/0f2969d3acd346b60b9549022b5e863de07539d3"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>sound.loop fails an Ogg loop's seam that sound.measure reads as ordinary — sound.loop judges its seam with sound.measure's seam_step and seam_flux under those names, and an encoded loop says how it read as cut (design recorded in `src/polyweave/layers/sound/sound_loop.py`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW559: A recorded track cannot become an editable music.toml score</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW559</id>
    <link href="https://github.com/alegauss/polyweave/commit/277c640232178a0db1979c1ff585a6687e66429d"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>A recorded track cannot become an editable music.toml score — music.from_audio hears a recording's stems as notes and hits, drafts a valid score, and answers the calls that sit it by the original (design recorded in `src/polyweave/layers/sound/music_heard.py`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW558: A voice over a recorded music track cannot be removed through polyweave</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW558</id>
    <link href="https://github.com/alegauss/polyweave/commit/64dd88e43248f050cddb6a411eccddcee5a22d85"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>A voice over a recorded music track cannot be removed through polyweave — sound.stems splits a recorded track with Demucs into vocals and no_vocals, or four stems, each recorded and saying where it plays against the mix; Spinhold's intro lost its spoken tag through it.</summary>
  </entry>
  <entry>
    <title>polyweave · PW557: the players kit copies no ui_accept or ui_cancel per player, so one player's menu cannot answer their own A and B alone</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW557</id>
    <link href="https://github.com/alegauss/polyweave/commit/eea665551290ef3b503422e1d7d74aaed2e5e025"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>the players kit copies no ui_accept or ui_cancel per player, so one player's menu cannot answer their own A and B alone — Each joined player gets their own copy of the menu actions on their pad, and the first player's answer their pad alone once two play (design recorded in `docs/specs/kit.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW556: a pad whose name hides its maker is named in the wrong buttons, and the player cannot say which family it is</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW556</id>
    <link href="https://github.com/alegauss/polyweave/commit/af68216271589c381e10dbae63cf3a051f858ca4"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>a pad whose name hides its maker is named in the wrong buttons, and the player cannot say which family it is — A player chooses a pad's button names on the remap screen, kept by its name; every prompt and menu follows the choice at once (design recorded in `docs/specs/kit.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW555: the remap kit offers no ready button maps, so a player changes a scheme only by rebinding each action</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW555</id>
    <link href="https://github.com/alegauss/polyweave/commit/7e655571464af2f3317dec6f81fabefa914b6ee3"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>the remap kit offers no ready button maps, so a player changes a scheme only by rebinding each action — Both remap screens carry a Map row: maps stepped and previewed on the pad, tried on a countdown and kept with a second press (design recorded in `docs/specs/kit.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW554: a keyed timeline of a scene's own properties cannot be declared and built, only skeletal motion and camera shots</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW554</id>
    <link href="https://github.com/alegauss/polyweave/commit/eedbbaacb940e78977bed6b57abe5bf35ec4c349"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>a keyed timeline of a scene's own properties cannot be declared and built, only skeletal motion and camera shots — clip.timeline builds a declared *.timeline.toml of keyed properties and marks into an AnimationPlayer scene the game plays or seeks (design recorded in `docs/specs/motion.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW553: game.open passes no arguments to the game, so a state the game opens by a flag is reached by calling private methods</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW553</id>
    <link href="https://github.com/alegauss/polyweave/commit/7841a56d420dd8b6cafacd3101df2b6899512106"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>game.open passes no arguments to the game, so a state the game opens by a flag is reached by calling private methods — game.open passes the game's own flags, kept in its flows, and clip.shots opens the game with them itself: a world's cutscene is one call (design recorded in `docs/specs/driving.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW552: the prompts kit's follow keeps a lambda whose node was freed, and the next refresh calls it on a null instance</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW552</id>
    <link href="https://github.com/alegauss/polyweave/commit/89b7913cabde9099e99c36f1e55bd8fa0319e2a7"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>the prompts kit's follow keeps a lambda whose node was freed, and the next refresh calls it on a null instance — refresh asks each follower again just before calling it, so a screen freed mid-refresh is let go (design superseded: the freeing was mid-refresh) (design recorded in `docs/specs/kit.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW551: a help line's {action} marks fill only as words; bbcode reads another mark, ignores the player and pad, and drops {move}</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW551</id>
    <link href="https://github.com/alegauss/polyweave/commit/99fecd7dc1ee7656d240c81e6e07fcc6187b8c60"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>a help line's {action} marks fill only as words; bbcode reads another mark, ignores the player and pad, and drops {move} — fill_bbcode draws a help row's own {action} and {move} marks as each player's icons, words where none, and watch_bbcode keeps it filled (design recorded in `docs/specs/kit.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW550: a kit's copied records name the artefact inside polyweave's tree, so provenance.verify reports every kit icon missing</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW550</id>
    <link href="https://github.com/alegauss/polyweave/commit/ba6bd79ce36aba2a459d053a8e682ad9e348faa4"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>a kit's copied records name the artefact inside polyweave's tree, so provenance.verify reports every kit icon missing — kit.install and kit.update rewrite each copied record to name the file where it landed in the game, so verify finds every kit icon (design recorded in `docs/specs/kit.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW549: an accepted take cannot be placed at the path the game loads, so it is copied by hand with a record naming its old path</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW549</id>
    <link href="https://github.com/alegauss/polyweave/commit/df1ac7f19209e78b01cdf6579a1774da9a9ce4c2"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>an accepted take cannot be placed at the path the game loads, so it is copied by hand with a record naming its old path — verdict.place puts an accepted member where the game loads it, with a record naming that path, the take and the verdict (design recorded in `docs/specs/acceptance-spec.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW548: no measure reads a transparent picture's alpha edge, so a halo or a wide soft fringe round it passes every spec</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW548</id>
    <link href="https://github.com/alegauss/polyweave/commit/7fd4d4b56b5bb6313aad3ff8074610a5dfcd08e7"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>no measure reads a transparent picture's alpha edge, so a halo or a wide soft fringe round it passes every spec — fringe_width, fringe_luma and fringe_delta_e read a transparent edge, so a spec holds a logo's outline free of a wide ramp or halo (design recorded in `docs/specs/measurements.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW547: a sitting of alternatives for one slot lets a person accept every one, with no way to pick just one</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW547</id>
    <link href="https://github.com/alegauss/polyweave/commit/fa3d6fb7badd4f3d74356048d4d2a093c4e6d628"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>a sitting of alternatives for one slot lets a person accept every one, with no way to pick just one — A sitting family may be a pick of alternatives: the page asks which one, batch accept skips it, and voice.choose takes the pick from the answer (design recorded in `docs/specs/acceptance-spec.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW546: a dialogue kit proof ends with no signal under the full gate's load, so its broken-box case fails with nothing to read</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW546</id>
    <link href="https://github.com/alegauss/polyweave/commit/245cb3e1e3d84e108226e930cc8e2424f09ffdc9"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>a dialogue kit proof ends with no signal under the full gate's load, so its broken-box case fails with nothing to read — The dialogue proof times typing by summed frame time, not a wall clock read before frame one; a proof cut short names its last KIT STEP (design recorded in `docs/specs/kit.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW545: the prompts kit starts on the keyboard before any input, so a game launched with a pad in hand shows keys</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW545</id>
    <link href="https://github.com/alegauss/polyweave/commit/00a45cbc45222432d3ffad2fb0166c314bdcf1e7"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>the prompts kit starts on the keyboard before any input, so a game launched with a pad in hand shows keys — Before any input the prompts kit takes the first connected pad's family, the keyboard where none is, so a game needs no boot code to name the pad (design recorded in `docs/specs/kit.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW544: kit.install writes the remap kit's own file into polyweave.toml even where the game declares a STORE</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW544</id>
    <link href="https://github.com/alegauss/polyweave/commit/89261b009c55f0d337e4c0d9f62499a8e2ccafe0"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>kit.install writes the remap kit's own file into polyweave.toml even where the game declares a STORE — A kit may name the project constant that says where it keeps its file; install then writes the game's STORE file and section into [kit.remap] (design recorded in `docs/specs/kit.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW543: loading an older bindings file logs an engine error for every action the player never rebound</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW543</id>
    <link href="https://github.com/alegauss/polyweave/commit/4b38c834cc2c995dfea166daf5016c94f5555dfe"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>loading an older bindings file logs an engine error for every action the player never rebound — The store asks for each action's key before reading it, so a file naming only rebound actions loads with no engine error; the remap proof listens for one (design recorded in `docs/specs/kit.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW542: the drawn pad screen shows raw action names, unfilled help and works only on ui_accept and ui_cancel</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW542</id>
    <link href="https://github.com/alegauss/polyweave/commit/29a08bc8690b35118b748916904c84967177d5a0"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>the drawn pad screen shows raw action names, unfilled help and works only on ui_accept and ui_cancel — The pad screen reads each action's declared label, its help names the buttons through the prompts kit, and both screens work on a declared CONFIRM and BACK (design recorded in `docs/specs/kit.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW541: the remap screen says nothing when it listens and rebuilds its rows on each bind, so a host game loses focus</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW541</id>
    <link href="https://github.com/alegauss/polyweave/commit/b747585df04fcf11c2ddc0832dc95e609b4bde65"/>
    <updated>2026-10-19T00:00:00Z</updated>
    <summary>the remap screen says nothing when it listens and rebuilds its rows on each bind, so a host game loses focus — The remap screen says listening and listened, answers is_listening, and repaints its rows in place, so a host game keeps focus after a bind (design recorded in `docs/specs/kit.md`).</summary>
  </entry>
  <entry>
    <title>winwright · WW547: A run's summary says &quot;1 case that ran say what they catch&quot;, plural verb and pronoun on a single case</title>
    <id>https://alegauss.github.io/changelog/winwright/#WW547</id>
    <link href="https://github.com/alegauss/winwright/commit/c40adc6943622f3d8b155208c24840a2b42f402c"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>A run's summary says &quot;1 case that ran say what they catch&quot;, plural verb and pronoun on a single case — A run's two catches lines agree with one case in every word, saying &quot;1 case that ran says what it catches&quot;, and the tests assert the whole singular sentence.</summary>
  </entry>
  <entry>
    <title>winwright · WW546: A case's type step drops the resend count, so a repaired substitution traces exactly like a clean send</title>
    <id>https://alegauss.github.io/changelog/winwright/#WW546</id>
    <link href="https://github.com/alegauss/winwright/commit/b871ebe449d1486b8164e14c7b511a73e24e3ad5"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>A case's type step drops the resend count, so a repaired substitution traces exactly like a clean send — A case's type step that WW249 had to resend stays green and its trace line names how many resends it took, so the fault rate can be read off an adopter's own runs.</summary>
  </entry>
  <entry>
    <title>roadkeep · RK1713: no writing verb can be asked what it would write, so an agent probes a replace with a real write</title>
    <id>https://alegauss.github.io/changelog/roadkeep/#RK1713</id>
    <link href="https://github.com/alegauss/roadkeep/commit/b09b009b1b17826d2c4d233544863c94f346a677"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>no writing verb can be asked what it would write, so an agent probes a replace with a real write — section amend --check runs every refusal and prints the prose as it would read, writing nothing, on the CLI and the served tool (design recorded in `plugin/src/roadkeep/sections.py`).</summary>
  </entry>
  <entry>
    <title>roadkeep · RK1712: show refuses a deferred id and only names where it sits, so a paused line's section is read by grep</title>
    <id>https://alegauss.github.io/changelog/roadkeep/#RK1712</id>
    <link href="https://github.com/alegauss/roadkeep/commit/4cbaae433a6911e132b0098cb3a3100373515dae"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>show refuses a deferred id and only names where it sits, so a paused line's section is read by grep — show joins a paused line from the deferred store with its reason and the resume door, alone or among other ids; brief still refuses one (design recorded in `plugin/src/roadkeep/showing.py`).</summary>
  </entry>
  <entry>
    <title>roadkeep · RK1711: section add --role strategy refuses every anchor on a fresh init --strategy scaffold, and its remedy is the refused call</title>
    <id>https://alegauss.github.io/changelog/roadkeep/#RK1711</id>
    <link href="https://github.com/alegauss/roadkeep/commit/2860ae7a8d0877648a7dc11d11ad6c297335de0e"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>section add --role strategy refuses every anchor on a fresh init --strategy scaffold, and its remedy is the refused call — An id project's prose takes a non-id top-level anchor before the first block, so a scaffolded strategy file opens (design recorded in `plugin/src/roadkeep/sections.py`).</summary>
  </entry>
  <entry>
    <title>roadkeep · RK1710: non-goal list elides entries past twelve, and neither --json nor any flag prints the rest</title>
    <id>https://alegauss.github.io/changelog/roadkeep/#RK1710</id>
    <link href="https://github.com/alegauss/roadkeep/commit/52f6a011a06c569767b9f300e3375d3d2e06e232"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>non-goal list elides entries past twelve, and neither --json nor any flag prints the rest — non-goal list --all prints every entry, --json always carries every lead and reason, and the elided count names the flag (design recorded in `plugin/src/roadkeep/briefing.py`).</summary>
  </entry>
  <entry>
    <title>roadkeep · RK1709: anchors --next names no free top-level when a family is not one numbering</title>
    <id>https://alegauss.github.io/changelog/roadkeep/#RK1709</id>
    <link href="https://github.com/alegauss/roadkeep/commit/c4ffc543320a750cda8a05aba57d82eb2c59d865"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>anchors --next names no free top-level when a family is not one numbering — anchors names each numbering's free top-level with its family count where they differ, and a trailing colon no longer reads as a namespace (design recorded in `plugin/src/roadkeep/history.py`).</summary>
  </entry>
  <entry>
    <title>Quickshell · QS367: In a split tab every pane blinks its cursor and nothing marks which pane has the keyboard</title>
    <id>https://alegauss.github.io/changelog/quickshell/#QS367</id>
    <link href="https://github.com/alegauss/quickshell/commit/6533dafaece6eda23f975bb712c14f42e5087d23"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>In a split tab every pane blinks its cursor and nothing marks which pane has the keyboard — Only the focused pane blinks; the others draw a steady hollow cursor and ask for no blink frames, and in a split tab the focused pane is framed in the accent.</summary>
  </entry>
  <entry>
    <title>Quickshell · QS366: A default window hides the menu bar until Alt is tapped, so a person who does not know the tap never finds it</title>
    <id>https://alegauss.github.io/changelog/quickshell/#QS366</id>
    <link href="https://github.com/alegauss/quickshell/commit/7d1426015caef7b525b7b9e793f40486eb6e5e2a"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>A default window hides the menu bar until Alt is tapped, so a person who does not know the tap never finds it — A default window shows the menu bar under the title bar, menuBar now defaulting to Always; Alt and Hidden stay, and Block G's criterion names the menu bar as part of a default window.</summary>
  </entry>
  <entry>
    <title>Quickshell · QS365: The palette's Document sessions as PDF writes only the connected session instead of every saved one</title>
    <id>https://alegauss.github.io/changelog/quickshell/#QS365</id>
    <link href="https://github.com/alegauss/quickshell/commit/fe69a45099d405b7be2227fca578b67a43db4239"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>The palette's Document sessions as PDF writes only the connected session instead of every saved one — Document all sessions as PDF, in the palette, writes every saved session whatever the sidebar selected; the sidebar's own menus still document the session, folder or rows chosen there.</summary>
  </entry>
  <entry>
    <title>Quickshell · QS364: The UI cases still work around three winwright gaps that 1.1.2 closed</title>
    <id>https://alegauss.github.io/changelog/quickshell/#QS364</id>
    <link href="https://github.com/alegauss/quickshell/commit/26aee1e08ec97c1498c8e42254541899bb03a021"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>The UI cases still work around three winwright gaps that 1.1.2 closed — The cases name the checkout by {root/}, stage the agent feed and request as written now, and bring the menu bar up by an Alt tap, all on winwright 1.1.2.</summary>
  </entry>
  <entry>
    <title>Quickshell · QS349: Choosing several sidebar rows is proven by automation peers in a unit test, not by a UI case</title>
    <id>https://alegauss.github.io/changelog/quickshell/#QS349</id>
    <link href="https://github.com/alegauss/quickshell/commit/d40640ff03eb50008aec78e4129e3897c900bda1"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>Choosing several sidebar rows is proven by automation peers in a unit test, not by a UI case — A UI case Ctrl+clicks two sessions and a folder, Shift+clicks a range and reads each row chosen; the set they stand for is still read in process.</summary>
  </entry>
  <entry>
    <title>Quickshell · QS348: That a tab's close cross is drawn inside its tab is proven by an in-process render, not by a UI case</title>
    <id>https://alegauss.github.io/changelog/quickshell/#QS348</id>
    <link href="https://github.com/alegauss/quickshell/commit/81b35c36ecd39ae45946e16a0812e99e0bcea990"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>That a tab's close cross is drawn inside its tab is proven by an in-process render, not by a UI case — A UI case retitles a tab short and then long and claims its close cross is drawn inside it and not empty, so QS312's geometry is proven in the guest.</summary>
  </entry>
  <entry>
    <title>polyweave · PW540: the remap screen rebinds on a store of its own, so co-op pads lose their narrowing and the shared store goes stale</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW540</id>
    <link href="https://github.com/alegauss/polyweave/commit/39c64f92c903baed04a0e948e682b383bb2c09d1"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>the remap screen rebinds on a store of its own, so co-op pads lose their narrowing and the shared store goes stale — The remap screens bind on the shared store, which says changed, and the players kit follows it, so a rebind keeps each pad on its own actions (design recorded in `docs/specs/kit.md`).</summary>
  </entry>
  <entry>
    <title>polyweave · PW539: the players kit's proof expects a pad seated on its first join press, so a game declaring AUTO_JOIN false fails it</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW539</id>
    <link href="https://github.com/alegauss/polyweave/commit/1f7de804e3073977c7f7549d4b3421065db01865"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>the players kit's proof expects a pad seated on its first join press, so a game declaring AUTO_JOIN false fails it — The players proof holds AUTO_JOIN on while it proves seating and puts the game's value back, so a game that answers its own joins holds.</summary>
  </entry>
  <entry>
    <title>polyweave · PW538: the players kit's proof resets bindings through the game's declared store, wiping a player's own controls</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW538</id>
    <link href="https://github.com/alegauss/polyweave/commit/1f7de804e3073977c7f7549d4b3421065db01865"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>the players kit's proof resets bindings through the game's declared store, wiping a player's own controls — The players proof rebinds and resets a store of its own run, so installing the kit leaves a game's declared store and a player's controls untouched.</summary>
  </entry>
  <entry>
    <title>polyweave · PW537: the remap kit's proof reads the screen's words in the game's language, so a pt-BR game with its own rows fails it</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW537</id>
    <link href="https://github.com/alegauss/polyweave/commit/1337aaf1b1159ce7bd1099b9a83d4120b2ae9527"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>the remap kit's proof reads the screen's words in the game's language, so a pt-BR game with its own rows fails it — The remap proof reads in a language of its own, set again after the game's autoloads, and holds in Spinhold on a pt-BR machine with its pt_BR rows.</summary>
  </entry>
  <entry>
    <title>polyweave · PW536: a kit's older-file adoption is a fixed user:// path, so a game's tests overwrite kit fields to keep off the real file</title>
    <id>https://alegauss.github.io/changelog/polyweave/#PW536</id>
    <link href="https://github.com/alegauss/polyweave/commit/90ea7ac818057937c283c2cc6c34c858d29f25a4"/>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>a kit's older-file adoption is a fixed user:// path, so a game's tests overwrite kit fields to keep off the real file — A relative ADOPTED file is read beside the options file, and adopted(folder) gets the saves folder, so a test's store adopts its seed (design recorded in `docs/specs/kit.md`).</summary>
  </entry>
</feed>
