Files
ProLibertateGames/CLAUDE.md
T
adrianoftyrielandPaperclip 5c797c8807
Build and Release APK / Build APK and publish release (push) Canceled after 0s
Restore the Pro Libertate Games title and splash; list Katan under Board Games
The bootstrap rebranded the app to Pilgrims of Katan (WALA-118 review);
the decision is to keep the upstream's own identity instead.

- Title and splash: the upstream originals restored exactly — the Wallace
  tartan splash under the "Pro Libertate Games" uncial wordmark
  (SplashScreen.kt, Tartan.kt), the tartan launcher icon, and the
  Theme.ProLibertateGames window theme. The game screens go back to the
  upstream WallaceGold/WallaceRed accents the tartan is woven from.
- Names and colours: launcher names back to "Pro Libertate Games" /
  "Pro Libertate Games DEV"; the channel colours back to the clan red /
  hunting green setts (resValue tartan_field and friends). The installed
  identity stays ca.wallacenet.pilgrimsofkatan (+ .dev) — that is the
  package, not the brand.
- Catalogue: Katan is listed under Board Games (3-4 players, original
  blurb, no third-party marks) with available = false, so dev builds show
  it as "Coming soon" and a production build hides it until its engine
  and screen land.
- Docs: README/CLAUDE.md/docs/CI.md updated to the restored identity;
  CatalogTest's invariant now names Katan as the one deliberate exception
  rather than asserting nothing is unfinished.

Structural bootstrap untouched: applicationId, OTA repointed at the Gitea
releases, CI workflows, version stamping.

Verified: ./gradlew assembleDebug and testDebugUnitTest green — 628 tests,
0 failures.

Co-Authored-By: Paperclip <[email protected]>
2026-10-14 02:15:30 +00:00

4.5 KiB

Working on this repo (agent notes)

ProLibertateGames — Wallacenet's build of an Android collection of card and board games, playable against AI or over Wi-Fi (LAN). Upstream: adrianoftyriel/ProLibertateGames (GPL-3.0, kept as the upstream remote). Canonical repo: https://git.wallacenet.ca/devadmin/PilgrimsOfKatan.

Ground rules

  • Licences travel. LICENSE is GPL-3.0 and must stay. The Uncial Antiqua font ships with its OFL licence at docs/licenses/UncialAntiqua-OFL.txt; never delete or edit either. Attribution to the upstream lives in the README.
  • No Catan trademarks or brand assets — the one hard line. The app's own branding is the upstream's, restored (see README → Branding): tartan launcher icon and splash, Wallace clan red on production and hunting green on dev, launcher names Pro Libertate Games / Pro Libertate Games DEV. The installed identity is ca.wallacenet.pilgrimsofkatan (+ .dev).
  • The existing catalogue is the regression safety net. Keep every game green; new games (Katan) arrive as separate tasks, not edits to old ones. The 22 reference games are available = true; Katan is listed with available = false (Coming soon) until its game task lands.
  • Docs conventions: every game gets docs/RULES-<id>.md (index and gaps in docs/README.md); build/CI/release decisions go in docs/CI.md. Update the docs when behaviour changes — they are the check against the rules code.

Build

export JAVA_HOME=...   # JDK 17
export ANDROID_HOME=...  # SDK with platform 34, build-tools 34
./gradlew assembleDebug            # dev-channel APK (default)
PLG_CHANNEL=production ./gradlew assembleDebug   # production APK
./gradlew testDebugUnitTest        # JVM unit tests (rules/AI/net/score)
./gradlew lintDebug                # Android lint (CI runs it)

On the Wallacenet project workspace a ready toolchain sits at ../.toolchain/ (jdk17/, android-sdk/) — export JAVA_HOME and ANDROID_HOME to it rather than installing again. Both variants must build: they install side by side (different applicationId, launcher name, colour).

Channels and OTA

One flag — isDevBuild in app/build.gradle.kts — drives applicationId, launcher name and brand colour together. Never set them individually.

In-app OTA points at this repo's own Gitea releases (/api/v1/repos/devadmin/PilgrimsOfKatan/releases…) and is on: BuildConfig.OTA_ENABLED is true. The channel is a decision already made and recorded — docs/CI.md documents the endpoints, the build-number scheme, and what publishing requires. Setting the flag to false is the kill switch.

CI

.github/workflows/ — Actions-compatible so the Gitea instance runs them. ci.yml: build + test + lint + artifact, and a dev prerelease from dev. release.yml: production release from main. Both publish through scripts/publish-release.sh (Gitea REST API), which is also runnable by hand.

No Actions runner is registered on the instance yet, so the workflows are idle until one is — the local gradle commands above are the source of truth, and CI green means those plus lint. Do not treat a workflow that has never run as evidence.

Code map

  • game/ — rules engines and AI, pure Kotlin, no Android types, unit tested. Catalog.kt is the registry (id, title, blurb, options, available).
  • net/ — wire protocol, LAN transport (mDNS + TCP), lobby, host-authoritative match driver; score/ the scorekeeper sheet, also pure.
  • ui/ — Compose screens; ui/theme/Theme.kt holds the brand palette (BrandField/BrandDeep/BrandAccent) and table accents.
  • update/ — OTA policy (UpdatePolicy.kt, pure and tested) and the gated fetch (Updater.kt).
  • settings/ — DataStore preferences.

Host is authoritative over the wire; clients send intents, host re-validates against the rules. Keep game/ free of Android imports — the JVM tests depend on it.

Git

  • Branches: main (production), dev (integration). Feature branches → PR into dev.
  • Commits by Paperclip agents end with Co-Authored-By: Paperclip <[email protected]>.
  • Pull upstream fixes with git pull upstream (the GitHub source); do not point origin anywhere but this repo's Gitea URL.

Legacy files

.claude/ and .rtk/ are the upstream author's assistant tooling, harmless and left as inherited. This file supersedes the upstream's CLAUDE.md (which documented their GitHub sandbox; that history is still in git).