Baseline: wave 1A server complete, wave 1B Android scaffold + design system green

assembleDebug, testDebugUnitTest, and recordPaparazziDebug all pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bThmkmyUUdqQpy3MXFFe5
This commit is contained in:
2026-09-06 01:58:37 +00:00
commit 6c17e42037
79 changed files with 3773 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
You are creating the Android project SCAFFOLD + DESIGN SYSTEM for Bookshelf.
READ FIRST: ~/bookshelf/docs/SPEC.md — authoritative, follow exactly.
Environment (already installed, do not reinstall):
JAVA_HOME=~/toolchain/jdk21 (JDK 21) ANDROID_HOME=~/toolchain/android-sdk
Installed: platforms;android-37.0, build-tools;37.0.0, platform-tools
No emulator/KVM available — you CANNOT run the app. Verify by compiling.
Create a Gradle project at ~/bookshelf/app. Deliver:
1. Working Gradle build: settings.gradle.kts, build.gradle.kts, gradle.properties,
gradle/libs.versions.toml (version catalog), app/build.gradle.kts, the Gradle
wrapper (download a wrapper JAR compatible with AGP for compileSdk 37 + JDK 21),
local.properties pointing at the SDK, and a sensible .gitignore.
Pick versions that ACTUALLY RESOLVE — check Maven Central / dl.google.com rather
than guessing. Declare every library from the SPEC in the catalog now, even ones
later waves will use, so downstream workers never touch build files.
2. AndroidManifest with the permissions the SPEC implies (camera, internet) and a
single MainActivity hosting Compose.
3. ui/theme: Color.kt, Type.kt, Theme.kt implementing the SPEC palette for BOTH
light and dark. Dynamic color OFF. Bundle the Literata variable/static TTF in
res/font (download from the Google Fonts GitHub repo, it is OFL — include the
license file). Full Material3 ColorScheme for both modes, mapped thoughtfully:
this app must read as warm paper and mahogany, never as default-Material purple.
4. A small reusable component set in ui/theme or ui/components that later waves will
build every screen from — at minimum: BookshelfScaffold (topbar w/ serif title +
gold hairline rule), PaperSurface, GoldDivider, BookCover (Coil, correct 2:3
aspect, letterpress-ish placeholder when no cover, graceful error state),
PrimaryButton/SecondaryButton, EmptyState, SyncStatusBar. Make these genuinely
nice — the owner explicitly cares that this "feels like books". Restrained and
typographic beats skeuomorphic.
5. Paparazzi configured so Compose renders to PNG on the JVM (no device). Add
screenshot tests for the component set in BOTH light and dark, run
`./gradlew recordPaparazziDebug` (or the equivalent task), and confirm real PNGs
land on disk. If Paparazzi will not cooperate with this AGP/Compose combination
after a genuine effort, say so plainly in your report and fall back to Robolectric
+ Roborazzi; do not silently skip visual verification.
6. A placeholder MainActivity screen that renders the component set, so wave 3 has a
living style reference.
MUST end green: `./gradlew assembleDebug` and `./gradlew test` both pass.
Iterate until they do — a broken build blocks every downstream worker.
Write ~/bookshelf/app/BUILD_NOTES.md recording the EXACT resolved versions (AGP,
Gradle, Kotlin, KSP, Compose BOM, Room, Retrofit, Coil, CameraX, ML Kit, WorkManager,
Paparazzi) and any compatibility traps you hit. Downstream workers depend on this.
Do not modify ~/bookshelf/server or ~/bookshelf/docs.
Finish with a <=25 line report: versions, what builds, Paparazzi status, deviations.