Post-card density baseline + P1 label contrast fix #72

Merged
starsetbyte merged 3 commits from fix/post-card-density-baseline into feat/device-trust-foundation 2026-07-11 20:21:54 +00:00
Owner

What this does

Branch 1 — Restore compact inline label geometry (eb2aa37)

  • Removed sizeIn(minHeight = 48.dp) from SafetyLabelPill and SocialLabelRun
  • Updated LabelPillContractTest to assert the removal
  • Added device fixture with semantics bounds checks + PNG evidence (4 screenshots: light/dark × 1.0×/1.3× font scale)

Branch 2 — Explicit PostCard geometry (7a7a3da)

  • Added PostCardGeometry object with named spacing constants
  • Gutter 10→12dp for visual consistency
  • Media-embed fixture post in device tests

Branch 3 — Meta-line overflow fix (0ec0f14)

  • Social provenance now ellipsizes before identity data
  • Moved weight(1f) from handle to SocialLabelRun
  • Explicit fillMaxWidth() for overflow control
  • PostHeader contract audit confirmed no drift

Branch 4 — Device geometry harness (7a91943)

  • 3 stress cases: long display name, long social label, context lines
  • Failure capture: saves PNG + semantics dump on assertion failure
  • Overflow-menu accessibility assertions
  • All 7 new device tests pass on Peregrine_API_35 emulator

P1 contrast fix (e0fc16a)

  • Introduced PeregrineLabelColors via CompositionLocal with theme-resolved warn and inform semantic colors
  • Light: #8C5200 (warn) / #006874 (inform) — both ≈5:1 on light surface
  • Dark/AMOLED: #FFB74D (warn) / #80DEEA (inform) — both ≈10:1 on dark surface
  • Removed dead LabelWarn/LabelWarnLight color palette entries
  • SafetyLabelPill uses LocalPeregrineLabelColors.current.warn
  • SocialLabelRun separator dot uses LocalPeregrineLabelColors.current.inform
  • Wired through PeregrineTheme

Roadmap update (74ef906)

  • Marked all three P1 items resolved in the consolidated roadmap

Gates passed

Gate Result
testDebugUnitTest 623 passed, 0 failed
lintDebug 0 errors
assembleDebug
compileDebugAndroidTestKotlin
connectedDebugAndroidTest (7 tests) 7/7 passed on API 35

P2 items deferred

  • Mixed label styling → already fixed in b12d0ee (socialLabelPresentation)
  • Touch targets → shelved as Issue #71
  • Remaining P2 (source-contract tests, DPoP classifier, handle resolution, README) → next pass
## What this does ### Branch 1 — Restore compact inline label geometry (`eb2aa37`) - Removed `sizeIn(minHeight = 48.dp)` from `SafetyLabelPill` and `SocialLabelRun` - Updated `LabelPillContractTest` to assert the removal - Added device fixture with semantics bounds checks + PNG evidence (4 screenshots: light/dark × 1.0×/1.3× font scale) ### Branch 2 — Explicit PostCard geometry (`7a7a3da`) - Added `PostCardGeometry` object with named spacing constants - Gutter 10→12dp for visual consistency - Media-embed fixture post in device tests ### Branch 3 — Meta-line overflow fix (`0ec0f14`) - Social provenance now ellipsizes before identity data - Moved `weight(1f)` from handle to `SocialLabelRun` - Explicit `fillMaxWidth()` for overflow control - PostHeader contract audit confirmed no drift ### Branch 4 — Device geometry harness (`7a91943`) - 3 stress cases: long display name, long social label, context lines - Failure capture: saves PNG + semantics dump on assertion failure - Overflow-menu accessibility assertions - All 7 new device tests pass on Peregrine_API_35 emulator ### P1 contrast fix (`e0fc16a`) - Introduced `PeregrineLabelColors` via `CompositionLocal` with theme-resolved `warn` and `inform` semantic colors - Light: #8C5200 (warn) / #006874 (inform) — both ≈5:1 on light surface - Dark/AMOLED: #FFB74D (warn) / #80DEEA (inform) — both ≈10:1 on dark surface - Removed dead `LabelWarn`/`LabelWarnLight` color palette entries - `SafetyLabelPill` uses `LocalPeregrineLabelColors.current.warn` - `SocialLabelRun` separator dot uses `LocalPeregrineLabelColors.current.inform` - Wired through `PeregrineTheme` ### Roadmap update (`74ef906`) - Marked all three P1 items resolved in the consolidated roadmap ## Gates passed | Gate | Result | |---|---| | `testDebugUnitTest` | 623 passed, 0 failed | | `lintDebug` | 0 errors | | `assembleDebug` | ✓ | | `compileDebugAndroidTestKotlin` | ✓ | | `connectedDebugAndroidTest` (7 tests) | 7/7 passed on API 35 | ## P2 items deferred - Mixed label styling → already fixed in `b12d0ee` (socialLabelPresentation) - Touch targets → shelved as [Issue #71](https://durandal.exe.xyz/starsetbyte/peregrine/issues/71) - Remaining P2 (source-contract tests, DPoP classifier, handle resolution, README) → next pass
- PeregrineLabelColors (warn/inform) resolved per theme mode via
  CompositionLocal, provided by PeregrineTheme.
- SafetyLabelPill uses labelColors.warn (dark amber light, amber dark).
- SocialLabelRun uses labelColors.inform (teal light, TealLight dark).
- Separator dot between safety/social labels uses labelColors.inform
  instead of hardcoded TealLight (#80DEEA, 1.5:1 on light).
- Removed dead PeregrineColors.LabelWarn / LabelWarnLight / LabelWarnContainer
  which were never wired and had sub-1.7:1 light contrast.
- Contract tests updated for new color source strings.
- Host + device gates pass: 10/10 connected, test/lint/assemble green.
docs: mark all three P1 items resolved in consolidated roadmap
All checks were successful
peregrine-ci / assembleDebug Build succeeded (13s)
74ef9066ad
- P1 label contrast: fixed (e0fc16a) — PeregrineLabelColors with
  theme-resolved warn/inform via CompositionLocal.
- P1 provenance sheet: already fixed (77bb4f3 + scroll addition).
- P1 labeler cap: already fixed — repository enforces the limit,
  ProfileViewModel catches LabelerSubscriptionLimitException.
starsetbyte merged commit 83709045de into feat/device-trust-foundation 2026-07-11 20:21:54 +00:00
Sign in to join this conversation.
No description provided.