Repository navigation
Releases: michelbr84/Flapforge
Release list
v0.2.5
Two navigation fixes on the mobile-surface release, both in the bottom bar
every hub section shares.
Fixed
- Play in the bottom navigation goes to the home tab instead of starting a
run. On the Shop, Birds, Forge and Goals sections the centre item was
wired straight to a run: a tap flew one immediately, from a screen whose job
is to set one up. Play is the hub's own section, so it now unwinds the stack
back to the hub —ScreenManager.popTo(Class)— where START RUN is, and the
four sections behave the same way. - The run the Birds screen configures reaches START RUN. The mode row
(Standard / Seeded / Daily) had no effect on the hub's own start, which is
why the navigation's Play had to launch the run itself; the row now hands
the hub the run it names — Seeded with the seed of the last finished run,
Daily with today's settled pick — and the hub's START RUN plays it. Standard
hands nothing over and clears a previous request, so going back to Standard
really goes back. - The Goals section's navigation is labelled. Its five items were built
with empty text, like every section's, and Goals was the one that never
filled them in: the bar showed five icons and no words. It now names Shop,
Birds, Play, Forge and Goals from the string table and follows a language
switch, the way the other sections do.
Downloads
| Platform | File | How to run |
|---|---|---|
| Windows 10+ | Flapforge-0.2.5-windows.zip |
Unzip and run Flapforge\Flapforge.exe (bundled runtime, nothing to install) |
| macOS 12+ | Flapforge-0.2.5-macos.zip |
Unzip and open Flapforge.app (unsigned: right-click › Open the first time) |
| Linux | Flapforge-0.2.5-linux.zip |
Unzip and run Flapforge/bin/Flapforge |
| Any OS with Java 17+ | flapforge-0.2.5-all.jar |
java -jar flapforge-0.2.5-all.jar (--lang pt_BR, --fullscreen, --no-audio, --seed N, …) |
| Android 13+ | Flapforge-0.2.5-android.apk |
Sideload (debug-signed; allow installs from unknown sources) |
Saves live in ~/.flapforge (Linux), %APPDATA%\Flapforge (Windows) or
~/Library/Application Support/Flapforge (macOS) and load unchanged across
releases. Player guide: https://github.com/michelbr84/Flapforge/wiki (English and Português).
Full changelog: https://github.com/michelbr84/Flapforge/blob/v0.2.5/CHANGELOG.md · Compare: v0.2.4...v0.2.5
v0.2.4
The mobile-surface release (M14): the game now uses the screen it is given.
Until now the 420x640 logical playfield was both the box everything was laid
out in and the box the renderer clipped to, so on a tall phone it sat
centred inside the letterbox colour — 377 dead pixels above it and 377 below
it at 1080x2400, with the footers parked in the middle of the glass. The
surface is now elastic: the scale is still the uniform min(w/420, h/640) and
nothing is ever stretched, but the logical band the game draws in grows and
shrinks with the device, and it ends on the physical bottom edge where the
navigation is pinned. The hub also gains its fifth section, Goals.
Added
- An elastic layout surface (M14):
ui/layout/LayoutMetricsturns the
real viewport into a safe viewport and then into the bands a screen lays out
against — a header region, a flexible content region and the persistent
bottom navigation — withcontentTop(),contentBottom(),navTop()and
aboveNavHeight(), clamped so the content region never falls under 480 rows
and the navigation never overlaps the header. Every hub screen re-derives its
bands when the metrics change, and at the classic 420x640 surface every band
lands on exactly the constant it replaced. - Safe-area support (M14): Android reports
systemBars ∪ cutout ∪ gestures
throughMainActivityandAndroidHostinto the screen stack, so a gesture
bar or a notch lifts the navigation off the glass instead of under it. - The Goals section (M14) as the hub's fifth tab, in the Shop/Birds/Play/
Forge language, with the five-item navigation and Goals on the gold plate
and no redundant Back button. Challenges is a carousel of cards with the
world, tier, rules, progress, reward and unlock a challenge actually carries,
and a gold call to action that starts it. Achievements is a scrolling list
under a live summary, each card with its name, description and the real date
it was unlocked. Milestones is a heading, the level bar and one row per
metric, with current, target and remaining. Collections is eight rows of
owned / total (percent)plus an Everything card. Every number comes from
the profile or from the shipped content — the collection totals are computed
at runtime, so they cannot disagree with the JSON — and the tabs speaken
andpt_BRthrough sixteen new string keys.
Changed
- The world picker, the run summary, the statistics and the settings no longer
anchor their footers to a fixedPlayfield.HEIGHT - N. They anchor to the
bottom of the elastic band, and the room a tall screen frees goes to the
scrolling region instead of to dead letterbox. - On a tall screen the world cards grow to fill the list and the run summary
spreads its rows, rather than one gap growing.
Fixed
- The statistics screen drew the long prestige value right-aligned past the
panel border — 471 pixels of text in a 372-pixel column, starting at x = −75
and overprinting its own label. It now wraps on a word boundary inside the
row's inner margin. GoalsScreendid not invalidate its layout when the navigation's top moved,
and the Forge, the bird selection and Goals each compared only two
coordinates when deciding whether their metrics had changed, which could
leave cached hit targets stale. All three now compare the whole value.
Downloads
| Platform | File | How to run |
|---|---|---|
| Windows 10+ | Flapforge-0.2.4-windows.zip |
Unzip and run Flapforge\Flapforge.exe (bundled runtime, nothing to install) |
| macOS 12+ | Flapforge-0.2.4-macos.zip |
Unzip and open Flapforge.app (unsigned: right-click › Open the first time) |
| Linux | Flapforge-0.2.4-linux.zip |
Unzip and run Flapforge/bin/Flapforge |
| Any OS with Java 17+ | flapforge-0.2.4-all.jar |
java -jar flapforge-0.2.4-all.jar (--lang pt_BR, --fullscreen, --no-audio, --seed N, …) |
| Android 13+ | Flapforge-0.2.4-android.apk |
Sideload (debug-signed; allow installs from unknown sources) |
Saves live in ~/.flapforge (Linux), %APPDATA%\Flapforge (Windows) or
~/Library/Application Support/Flapforge (macOS) and load unchanged across
releases. Player guide: https://github.com/michelbr84/Flapforge/wiki (English and Português).
Full changelog: https://github.com/michelbr84/Flapforge/blob/v0.2.4/CHANGELOG.md · Compare: v0.2.3...v0.2.4
v0.2.3
The forge release: the Upgrades screen becomes the Forge — three trees,
one tab each, laid out in the hub's own visual language, with a live panel
that shows what the coins are buying in the numbers a run is started with.
Nothing that was for sale changed hands: the same eighteen nodes, the same
prices, the same prerequisite graph. What changed is that the player can now
see the tree, read the attribute it moves, and buy it without guessing.
Added
- The Forge is rebuilt (M13) as five bands. A compact header carries the
title, the open tree's subtitle, the wallet in its coin pill and the hub's
forge scene drawn small, so the place reads as the same room the main menu
shows. Under it the three tree tabs — Flight, Economy, Forge — with a glyph
each and the selected one in gold. Then the tree viewport: every node laid
out by tier as a row card under a green tier pill, with the prerequisite edges
drawn as light-yellow elbows whose endpoints come from the shippedprereqs
graph, scrolled by the wheel and by the focus. Then the detail panel: the
selected node's hero glyph over a gold glow, its name, level, description and
status in words, and one gold call to action. The hub's five-item navigation
closes the screen with Forge on the gold plate. - The attribute summary (M13): under a divider in the detail panel, every
stat the open tree can touch, with its live resolved value and a five-segment
pip bar normalised over the stat's own clamp range. It reads the very
StatSheeta run is started with, andForgeStatRealityTestproves every
node moves every stat it claims to touch, in the direction it says. - Select, then buy (M13): activating a card only selects what the panel is
describing; the purchase happens through the panel's call to action, so a
mis-tap cannot spend. A refusal is surfaced, never swallowed — the toast says
why, and the wallet, the cards and the live stats stand still. - A locked tree is for sale on the spot (M13): the Forge is the second
screen that sellstree:<id>, through the same atomic route the shop uses,
so a tree bought here lands in the save byte-for-byte as one bought there.
ForgePersistenceTestproves it across a restart. - Nine new player-facing strings in
enandpt_BR: the screen title, the
three tree subtitles, the level and tree-unlock calls to action, the maxed
word, the attribute-summary heading, the not-enough-coins note and the
select-a-node hint.
Changed
- The screen no longer carries a full-width Back button; the hub's
SectionNav
closes it. BACK and Escape still pop. - The tree scrolls by moving its cards, not the canvas, so every node stays in
screen coordinates and one focus ring runs from the tabs through the cards and
the call to action down into the navigation. A card scrolled out of the band
is clipped away and stops answering the pointer. UpgradeManagergrew a tree-unlock facade —isTreeLocked,treeUnlockId,
treeUnlockPrice,canAffordTreeUnlock,buyTree,isTreeEarnedand
claimEarnedTrees— so the screen reaches one manager instead of two. No
constructor changed, so the hub screens and the existing tests are untouched.upgrade.glide_1.descsaid −25% while the shipped effect is −30%. Both string
files now say what the node does.
Fixed
- A tree already earned by play is never charged for (M13).
tree:forgeis
any_of[world_cleared wind_valley, purchase 900]andtree:economyis
any_of[level 3, purchase 120]: a profile carried over from a build without
the tree could satisfy it without owning it, and the Forge would have sold
back for coins something the player had already unlocked.
Downloads
| Platform | File | How to run |
|---|---|---|
| Windows 10+ | Flapforge-0.2.3-windows.zip |
Unzip and run Flapforge\Flapforge.exe (bundled runtime, nothing to install) |
| macOS 12+ | Flapforge-0.2.3-macos.zip |
Unzip and open Flapforge.app (unsigned: right-click › Open the first time) |
| Linux | Flapforge-0.2.3-linux.zip |
Unzip and run Flapforge/bin/Flapforge |
| Any OS with Java 17+ | flapforge-0.2.3-all.jar |
java -jar flapforge-0.2.3-all.jar (--lang pt_BR, --fullscreen, --no-audio, --seed N, …) |
| Android 13+ | Flapforge-0.2.3-android.apk |
Sideload (debug-signed; allow installs from unknown sources) |
Saves live in ~/.flapforge (Linux), %APPDATA%\Flapforge (Windows) or
~/Library/Application Support/Flapforge (macOS) and load unchanged across
releases. Player guide: https://github.com/michelbr84/Flapforge/wiki (English and Português).
Full changelog: https://github.com/michelbr84/Flapforge/blob/v0.2.3/CHANGELOG.md · Compare: v0.2.2...v0.2.3
v0.2.2
The shop release: the Shop stops reading like a settings list and becomes a
catalogue in the home hub's own visual language — the second section screen
to adopt the shell the Birds screen introduced in 0.2.1, and the one screen
the player is asked to spend in. Nothing that was for sale changed hands: the
same ids, the same prices, the same purchase paths; what changed is that the
player can now read them.
Added
- The Shop is rebuilt in the hub's language (M12). The
HubHeadernames
it and shows the wallet — once, as a readout, because from inside the Shop
the coin chip has nowhere to go. Under it the four categories — Birds,
Abilities, Worlds, Features — as aTabBarwith a glyph on every tab and the
selected one marked in gold. Then a two-column grid of portrait cards,
scrolled by the wheel and by the focus with a thumb that appears only when
a tab has more rows than the band: each card carries the thing's own art —
the bird's portrait in its first palette, the ability's glyph in gold inside
a slot ring, the world's four-colour thumbnail, a hammer for a tree, a gear
for a feature, a crown for a legendary card — its name, one line saying
where it stands, and its state on a wooden price tag, the one piece of
market furniture the Shop borrows. Under the grid a wooden detail plaque
with the description, and one gold call to action whose verb is the tab's:
Buy bird, Unlock ability / Upgrade ability, Unlock world, Unlock
feature. The hub's five-item navigation closes the screen with Shop on
the gold plate. - What you own stays in the Shop. A bought bird, world, feature, tree or
legendary card keeps its card, badged with a check and Owned and no price,
sorted after everything still for sale; a tab with nothing left to sell says
so under the cards it still shows. What the profile starts with was never
for sale and still never appears, so every tab holds the same cards whatever
the profile owns — six birds, eight abilities, four worlds, seven features. - Every card says how to earn it. In this game everything for sale is also
earnable, so nothing in the Shop is ever shut: instead of a padlock, a card
that is not yours yet carries the road that costs no coins as its second line
— Play 3 runs, Reach level 8, Clear Green Fields — from the same
ProgressionText.unlockTextthe Birds, Worlds and Goals screens use, and
the plaque repeats it as Or earn it: …. A price the wallet cannot cover
keeps its tag crisp over the dimmed card, with Not enough coins on the
plaque in the warning colour. - Three reusable pieces:
ShopCard(a portraitCardGrid.Cardwith the four
states and a hit test clamped to the grid's band),ShopArt(the art of
every kind the Shop sells, resolved once when the card is built) and
WorldSwatch, the world thumbnail promoted out of the World Select so both
screens draw the same square.TabBargained an optional glyph per tab and
an accented mode that underlines the selected tab in gold; a bar without
either draws exactly as before. - Seven strings in both languages: the five verbs of the call to action, Or
earn it: {0} and Next level: {0}.
Changed
- The price is on the card and nowhere else. The detail plaque no longer
repeats it, the call to action carries no number, and the wallet appears
once. The plaque carries what the card has no room for: the description, the
free road in, and for an owned ability what the next level does. - The Shop has no Back button:
Esc(or the Android back gesture) returns
to the hub, exactly as on the Birds screen, and the bottom navigation swaps
sections instead of stacking them. Play from the Shop starts the standard
run in the profile's own world and tier. - Reduce flashing caps the call to action's glow on the Shop, as everywhere.
- The version moves to 0.2.2 across
version.properties, the Android version
code and name, the changelog, the roadmap and the docs.
Downloads
| Platform | File | How to run |
|---|---|---|
| Windows 10+ | Flapforge-0.2.2-windows.zip |
Unzip and run Flapforge\Flapforge.exe (bundled runtime, nothing to install) |
| macOS 12+ | Flapforge-0.2.2-macos.zip |
Unzip and open Flapforge.app (unsigned: right-click › Open the first time) |
| Linux | Flapforge-0.2.2-linux.zip |
Unzip and run Flapforge/bin/Flapforge |
| Any OS with Java 17+ | flapforge-0.2.2-all.jar |
java -jar flapforge-0.2.2-all.jar (--lang pt_BR, --fullscreen, --no-audio, --seed N, …) |
| Android 13+ | Flapforge-0.2.2-android.apk |
Sideload (debug-signed; allow installs from unknown sources) |
Saves live in ~/.flapforge (Linux), %APPDATA%\Flapforge (Windows) or
~/Library/Application Support/Flapforge (macOS) and load unchanged across
releases. Player guide: https://github.com/michelbr84/Flapforge/wiki (English and Português).
Full changelog: https://github.com/michelbr84/Flapforge/blob/v0.2.2/CHANGELOG.md · Compare: v0.2.1...v0.2.2
v0.2.1
The bird-selection release: the Birds screen stops reading like a settings
list and becomes a collection screen in the home hub's own visual language.
Nothing was taken away — the world, tier and mode rows, the ability list and
the stat breakdown are the same rows with the same ids, moved into two panels
that give them the height to be read.
Added
- The Birds screen is rebuilt in the hub's language (M11). The
HubHeadernames it and shows the wallet (the coin chip opens the Shop, as
on the hub). Under it the hero: the bird being browsed, large, bobbing
on an anvil on a floating island, with its name, what it is
("Guardian · Selected") and three headline attributes — Mobility,
Defence and Control, each out of ten, resolved by
BirdAttributes.offrom the bird's own profile and its innate abilities, so
they describe the bird alone and never move when an upgrade is bought. Below
it a carousel of the seven birds walked with Left/Right, the arrows at
its ends or the wheel: a locked tile carries its padlock and its price and
nudges the padlock when it is tapped, and the selected tile carries the same
gold border as the hub's call to action. Then the palette swatches of the
browsed bird, a one-line run-setup bar ("Green Fields · Normal ·
Standard ›") whose panel holds the world, tier and mode rows, the loadout as
ability cards (icon, role, name, "Lv 1/3") with the ability list and the
stat breakdown behind See details, one gold call to action naming the
single thing to do (Use Ironbeak, Buy · 150 coins, Bird selected,
Locked · Play 3 runs), and the hub's own five-item navigation with
Birds on the gold plate. - Two reusable hub components, so the other section screens can adopt the same
shell:HubHeader(title plus a currency chip that is focusable only when it
has a route) andSectionNav.build(nav, primaryId, routes), which fills a
NavBarwith Shop · Birds · Play · Forge · Goals and marks one item as
primary — Play on the hub, the section itself on a section screen. With them
comeCarousel,AbilityCardandAttributeBadge. - The release workflow names the GitHub release and fills its notes from the
version's section of this changelog (scripts/release-notes.sh: the
section, a download table and the compare link against the previous tag),
and a dispatchable Release notes workflow (release-notes.yml) re-applies
them to an existing release.
Changed
- The world, tier and mode rows moved from the Birds screen's body into the
panel its run-setup bar opens, and the ability list and stat breakdown into
the panel See details opens. Each panel owns its own focus ring and is the
ring taking input while it is up, so nothing under the veil can be hovered,
clicked or reached with an arrow;Esccloses the panel before it leaves the
screen. Under a settled daily the world and tier rows go read-only and show
the pick's own world and tier, because that is what the daily will play
whatever the rows said. - The Birds screen has no Back button:
Esc(or the Android back gesture)
returns to the hub, exactly as on the hub's other section screens, and the
bottom navigation replaces the screen instead of stacking one. - Reduce flashing on the Birds screen caps the three glows and leaves the
motion alone — the bob, the wing beat, the hero's slide and the carousel's
tween are motion, not luminance, the same line the hub already draws with its
own bob. - The gold call to action ellipsises its title when even its smallest font size
overflows the plate, so a long translation at a large text scale can no
longer spill past it.
Fixed
- Every warning the Eclipse compiler's default set reported over the tree is
gone (29 of them: unused imports, fields, locals and one private method, five
missingserialVersionUIDs, two dead-code guards and two deprecated
Thread.getId()calls). The IDE Problems panel showing hundreds of markers
is stale language-server state from older checkouts, not this tree: run
Java: Clean Java Language Server Workspace and reload after pulling.
Downloads
| Platform | File | How to run |
|---|---|---|
| Windows 10+ | Flapforge-0.2.1-windows.zip |
Unzip and run Flapforge\Flapforge.exe (bundled runtime, nothing to install) |
| macOS 12+ | Flapforge-0.2.1-macos.zip |
Unzip and open Flapforge.app (unsigned: right-click › Open the first time) |
| Linux | Flapforge-0.2.1-linux.zip |
Unzip and run Flapforge/bin/Flapforge |
| Any OS with Java 17+ | flapforge-0.2.1-all.jar |
java -jar flapforge-0.2.1-all.jar (--lang pt_BR, --fullscreen, --no-audio, --seed N, …) |
| Android 13+ | Flapforge-0.2.1-android.apk |
Sideload (debug-signed; allow installs from unknown sources) |
Saves live in ~/.flapforge (Linux), %APPDATA%\Flapforge (Windows) or
~/Library/Application Support/Flapforge (macOS) and load unchanged across
releases. Player guide: https://github.com/michelbr84/Flapforge/wiki (English and Português).
Full changelog: https://github.com/michelbr84/Flapforge/blob/v0.2.1/CHANGELOG.md · Compare: v0.2.0...v0.2.1
v0.2.0
The home-hub release: the main menu becomes a visual home hub with a player
card, the world plaque, a forge that grows with your upgrades, a next-unlock
card and one gold START RUN; Challenges and Achievements merge into Goals, the
statistics become the Profile, and a bilingual player wiki ships with the
repository. This release also carries the 0.1.1 Android line, whose tag was cut
off main (see 0.1.1 below), so the desktop bundles and the APK build from one
tree again.
Added
- The main menu is a home hub (M10): a HUD band with the player card
(the selected bird as avatar, "Player", a crown with the level, the XP
track and the prestige badge — opens the Profile), the coin chip (opens
the Shop) and the settings gear; the bird-on-anvil emblem over the title;
a wooden world plaque ("World 1 · Green Fields ›") that opens the new
World Select screen (one card per world with its palette, hazards or
way in, price while locked, and the difficulty row); a forge scene —
the anvil and the selected bird on a floating island in the selected
world's palette over that world's backdrop, dressed with a lit hearth, a
hammer, barrels and a banner as the upgrade trees are built and gold trim
after a prestige; a Next unlock card naming the nearest measurable
unlockable with its counter (UnlockEvaluator.nextUnlock,progressOf,
nearestBranch) that opens the screen where it is earned; a gold
START RUN with "World • Difficulty" under it and a pulsing glow (capped
under reduce flashing); a last-run / best line; and a five-item bottom
navigation — Shop · Birds · Play · Forge (the upgrade trees) · Goals.
START RUN plays the profile's selection through the hub's own run
factory, seeded when--seedwas given. - A Goals screen with four tabs — Challenges, Achievements, Milestones,
Collections — merging the former Challenges and Achievements screens. - The statistics screen is the Profile: a fixed header with the selected
bird, the name, the level and its progress bar, the prestige badge and a
"Birds x/7 · Worlds x/5 · Achievements x/41" line, over the statistics. - Settings gained an About section (version, build, global keys) and a
Quit row on the desktop (GameHost.supportsQuit; never on Android). - New components:
NavBar/NavButton,IconButton,CtaButton,
CurrencyChip,IconPainter; new procedural art (gear, flame, hammer,
barrel, banner, awning, scroll, crown, chevron, padlock, glow, the gold
call-to-action, navigation, chip and plaque plates);TextPainter.ellipsise. - Strings:
menu.start_run,menu.run_subtitle,menu.world_plaque,
menu.player_name,menu.player_level,menu.next_unlock,
menu.next_unlock_none,menu.last_run,menu.last_run_none,
menu.quit_confirm,menu.nav_forge,menu.nav_goals,goals.title,
profile.title,profile.collections,world_select.title,
world_select.card,world_select.tier,settings.section.about. - A bilingual player wiki — English and Português (Brasil), fourteen pages each
with screenshots — generated fromwiki/onmainand published to the GitHub
wiki by.github/workflows/wiki.yml;scripts/check-wiki.shvalidates links,
images and language pairs before every publish.
Changed
- Quitting from the home:
Esc/Back on the hub arms a "Press again to quit"
toast for three seconds and a second press closes the game; the old Quit
button is gone from the menu (it lives in Settings › About on the desktop). --world <id>no longer pins the hub's runs to a world the profile has
not unlocked: START RUN always plays the profile's selection (an owned
--worldis written to the selection as before, and the log line says
what happened). The headless run still plays the flag's world.- The tab bar clips each label to its own cell, so the four Goals tabs stay
legible in Portuguese at the largest text scale.
Removed
ChallengesScreenandAchievementsScreen(merged intoGoalsScreen),
and the string keysmenu.statistics,menu.upgrades,menu.challenges,
menu.achievements,menu.worldandachievements.title.
Downloads
| Platform | File | How to run |
|---|---|---|
| Windows 10+ | Flapforge-0.2.0-windows.zip |
Unzip and run Flapforge\Flapforge.exe (bundled runtime, nothing to install) |
| macOS 12+ | Flapforge-0.2.0-macos.zip |
Unzip and open Flapforge.app (unsigned: right-click › Open the first time) |
| Linux | Flapforge-0.2.0-linux.zip |
Unzip and run Flapforge/bin/Flapforge |
| Any OS with Java 17+ | flapforge-0.2.0-all.jar |
java -jar flapforge-0.2.0-all.jar (--lang pt_BR, --fullscreen, --no-audio, --seed N, …) |
| Android 13+ | Flapforge-0.2.0-android.apk |
Sideload (debug-signed; allow installs from unknown sources) |
Saves live in ~/.flapforge (Linux), %APPDATA%\Flapforge (Windows) or
~/Library/Application Support/Flapforge (macOS) and load unchanged across
releases. Player guide: https://github.com/michelbr84/Flapforge/wiki (English and Português).
Full changelog: https://github.com/michelbr84/Flapforge/blob/v0.2.0/CHANGELOG.md · Compare: v0.1.1...v0.2.0
v0.1.1
Bind desugared records by constructor order, not field order The first attempt fixed only the single-component defs. On a device the dex format stores a class's fields sorted by name, so getDeclaredFields() is alphabetical: BirdDef's 13 components no longer matched any constructor signature and were rejected, while UpgradesDef(trees, nodes) — two List components — matched by type in the wrong order and would have bound nodes into trees. Field order is unusable, and trusting it is worse than failing. StrictBinder now finds the canonical constructor by the multiset of its parameter types (order-independent) and takes the component order from that constructor, mapping each parameter to its field by name; -parameters is added to the Android javac so the names survive, as they already do on the desktop build. A parameter that resolves to neither a name nor a uniquely typed field yields no components at all rather than a guess. StrictBinderDesugarTest now hands the fields over in dex order and asserts the components still equal the record reading, so the alphabetical case is covered on the JVM. versionCode 5 -> 6; versionName stays 0.1.1. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017R4Qc2xhRcuWXcz5648DZA
v0.1.0
Flapforge 0.1.0 — Skill-Based Arcade Roguelite, milestones M0–M9 Determinism baseline: eaaa01685261a433 (--headless-run 3000 --seed 42) Save schema v1 frozen at this tag; later schema changes ship migrations.