docs(android): M12 phase 2 as landed #114

Merged
whitlocktech merged 1 commits from docs/android-theming-nav-phase-2 into edge 2026-08-08 10:16:50 +00:00
Member

The radii-and-shadow phase, shipped as Android-app#35. Pairs with that PR; targets edge.

Seven "as landed" notes, of which three are amendments to the spec rather than records of it:

§5.4's elevation map is not a no-op, and now says so — with §2 and AC-1 amended to match. Material3's filled Card is Level0 and FeatureCard drew none of the shadow its own KDoc claimed, so the app has been flat since M5 — while the runic-gateway preset it was drawn from selects the Default shadow. The org lead chose to apply the map as written rather than rebase it on the flat baseline, because rebasing would have collapsed none/Soft/Default onto 0dp and left only Deep doing anything on the phone. The radius half is untouched by this and remains a provable no-op.

§5.4's exact-string match is corrected to a nearest-blur match. The fantasy preset's own --shadow-card is not one of SHADOW_OPTIONS' four values, because resolveThemeTokens copies a preset's tokens verbatim and they never pass through the admin form's dropdown.

§5.2 gains the rule the pill needed. CircleShape is a percentage, so it has no shipped dp for a ratio to scale and the resolved px is taken as dp below the 500px floor. It is a literal because there is no app scale to preserve here, not as an exception to the ratio rule.

Also recorded: why all 24 Card( call sites became ShardCard( (Material takes elevation as a default argument, not from the theme), that --radius-pill reaches only StatusPill because the app's other two CircleShape uses are 8dp dots, and that Shapes — unlike ColorSchemedoes implement equals, so the structural no-op proof is one assertion rather than a reflection walk.

PLAN.md §9's M12 entry records phase 2 landed.


  • AI-assisted: written with Claude Code (Claude Opus 5)
The radii-and-shadow phase, shipped as Android-app#35. Pairs with that PR; targets `edge`. Seven "as landed" notes, of which **three are amendments to the spec** rather than records of it: **§5.4's elevation map is not a no-op, and now says so** — with §2 and AC-1 amended to match. Material3's filled `Card` is `Level0` and `FeatureCard` drew none of the shadow its own KDoc claimed, so the app has been flat since M5 — while the `runic-gateway` preset it was drawn from selects the *Default* shadow. The org lead chose to apply the map as written rather than rebase it on the flat baseline, because rebasing would have collapsed `none`/`Soft`/`Default` onto 0dp and left only `Deep` doing anything on the phone. The radius half is untouched by this and remains a provable no-op. **§5.4's exact-string match is corrected to a nearest-blur match.** The `fantasy` preset's own `--shadow-card` is not one of `SHADOW_OPTIONS`' four values, because `resolveThemeTokens` copies a preset's tokens verbatim and they never pass through the admin form's dropdown. **§5.2 gains the rule the pill needed.** `CircleShape` is a percentage, so it has no shipped dp for a ratio to scale and the resolved px is taken as dp below the 500px floor. It is a literal because there is no app scale to preserve here, not as an exception to the ratio rule. Also recorded: why all 24 `Card(` call sites became `ShardCard(` (Material takes elevation as a default argument, not from the theme), that `--radius-pill` reaches only `StatusPill` because the app's other two `CircleShape` uses are 8dp dots, and that `Shapes` — unlike `ColorScheme` — *does* implement `equals`, so the structural no-op proof is one assertion rather than a reflection walk. `PLAN.md` §9's M12 entry records phase 2 landed. --- - [x] AI-assisted: written with Claude Code (Claude Opus 5)
wtclaude added 1 commit 2026-08-08 10:16:32 +00:00
The radii-and-shadow phase, shipped as Android-app#35. Seven notes, of which
three are amendments to the spec rather than records of it.

Section 5.4's elevation map is not a no-op and now says so, with section 2 and
AC-1 amended to match. Material3's filled Card is Level0 and FeatureCard drew
none of the shadow its own KDoc claimed, so the app has been flat since M5 -
while the runic-gateway preset it was drawn from selects the "Default" shadow.
The org lead chose to apply the map as written rather than rebase it on the flat
baseline, because rebasing would have collapsed none/Soft/Default onto 0dp and
left only Deep doing anything on the phone. The radius half is untouched by this
and remains a provable no-op.

Section 5.4's exact-string match is corrected to a nearest-blur match. The
fantasy preset's own --shadow-card is not one of SHADOW_OPTIONS' four values,
because resolveThemeTokens copies a preset's tokens verbatim and they never pass
through the admin form's dropdown.

Section 5.2 gains the rule the pill needed: CircleShape is a percentage, so it
has no shipped dp for a ratio to scale and the resolved px is taken as dp below
the 500px floor. It is a literal because there is no app scale to preserve, not
as an exception to the ratio rule.

Also recorded: why all 24 Card( call sites became ShardCard( (Material takes
elevation as a default argument, not from the theme), that --radius-pill reaches
only StatusPill, and that Shapes - unlike ColorScheme - does implement equals,
so the structural no-op proof is one assertion rather than a reflection walk.

PLAN.md 9's M12 entry records phase 2 landed.

Co-Authored-By: Claude <noreply@anthropic.com>
whitlocktech merged commit ea8c5b9a42 into edge 2026-08-08 10:16:50 +00:00
whitlocktech deleted branch docs/android-theming-nav-phase-2 2026-08-08 10:16:51 +00:00
Sign in to join this conversation.
No description provided.