M1-01: Repo scaffold and build standard #1

Open
opened 2026-08-08 20:03:42 -04:00 by agent · 0 comments
Member

Stand up stash-android so everything after this has somewhere to land.

Scope

  • Gradle with Kotlin DSL, a single :app module, version catalog in gradle/libs.versions.toml.
  • Jetpack Compose and Material 3. A minimal app that launches on the device and does nothing else.
  • ktlint and detekt, wired so a violation fails the build. The iOS repo learned this the hard
    way and wrote it into its standard: warnings that do not fail a build are warnings nobody fixes.
  • AGENTS.md — the build standard, and the single source of truth.
  • CLAUDE.md — one line, @AGENTS.md. Not a symlink: Claude Code resolves the import natively and
    Codex reads AGENTS.md directly. One file to maintain, nothing to drift.
  • README.md, .gitignore, .editorconfig.
  • .githooks/ mirroring iOS: pre-commit runs the linters, pre-push requires the Codex review
    artifacts and SUMMARY.md for the branch and then runs the tests.

⚠️ This repository is PUBLIC

Stated loudly at the top of README.md and AGENTS.md, as in stash-ios:

  • No secrets, tokens, API keys, or release signing keystores.
  • No personal audio, transcripts or vault content — not in fixtures, not in tests, not in
    screenshots attached to issues.
  • No internal hostnames or infrastructure detail.
  • Test fixtures are synthetic.

What AGENTS.md must state

Port the iOS build standard verbatim where it is Wes's words, because it is his framing that is the
requirement, not the iOS specifics:

  • Every issue gets a feature branch. main is protected; only Wes approves.
  • "The goal should be that a PR review could be done in 15 to 20 minutes."
  • Nothing gets a PR until it has been tested — on the device where the issue says so.
  • "You will, 100%, keep documentation up to date on every commit. I will fail PRs if docs aren't
    updated along the way. And if the code is hard to read, same thing."
  • "Error messages must be helpful. It must be. No option."
  • "I don't want to see anything about timelines in any of the documentation anywhere."
  • "We're gonna choose reliability and simplicity over fanciness."
  • "I would much prefer system standards for UI over having our own custom special UI." On
    Android that means Material 3 and platform conventions, not a port of the iOS look.

It must also carry the fifteen-step issue workflow with Codex in the loop, and the
.agent/<branch>/ artifact convention. Branch naming is the same: m<milestone>-<issue>-<slug>,
because the pre-push hook derives the artifact path from the branch name.

What is deliberately NOT ported

The iOS AGENTS.md documents a lot of hard-won platform specifics — audio session categories,
route repair, the speech analyzer's clock. None of that is true here. Port the process and the
standard; let the platform sections be written by the issues that discover them.

Done when

The app builds and launches on the Pixel from a fresh clone, and AGENTS.md is complete enough
that someone could pick up M1-02 without this conversation.


Milestone 1 of Stash for Android, mirroring stash-ios M1. M1 is a functioning app on the test
device with no sync at all — record voice memos reliably and get them off the device by hand.
Sync arrives in M3.

Test device is a Pixel 6 (Tensor G1) borrowed from a friend, until something better turns up.
Stock Android, so no OEM battery-killer behaviour to fight — worth remembering that a phone from
another manufacturer may not be as forgiving about background work.

Translation of Stash/stash-ios#1. Where the platform forces a different answer this issue says so; where it
does not, the iOS issue is the fuller statement of intent and should be read alongside this one.

Working agreement for every issue in this repo: feature branch, tested before the PR opens
(on-device where the label says so), then Wes reviews the PR and we walk the code together. Docs
update in the same commit. A PR that takes more than 20 minutes to review is too big — say so and
split it.

Stand up `stash-android` so everything after this has somewhere to land. ## Scope - Gradle with Kotlin DSL, a single `:app` module, version catalog in `gradle/libs.versions.toml`. - Jetpack Compose and Material 3. A minimal app that launches on the device and does nothing else. - **ktlint and detekt**, wired so a violation fails the build. The iOS repo learned this the hard way and wrote it into its standard: warnings that do not fail a build are warnings nobody fixes. - `AGENTS.md` — the build standard, and the single source of truth. - `CLAUDE.md` — one line, `@AGENTS.md`. Not a symlink: Claude Code resolves the import natively and Codex reads `AGENTS.md` directly. One file to maintain, nothing to drift. - `README.md`, `.gitignore`, `.editorconfig`. - `.githooks/` mirroring iOS: `pre-commit` runs the linters, `pre-push` requires the Codex review artifacts and `SUMMARY.md` for the branch and then runs the tests. ## ⚠️ This repository is PUBLIC Stated loudly at the top of `README.md` and `AGENTS.md`, as in `stash-ios`: - No secrets, tokens, API keys, or **release signing keystores**. - No personal audio, transcripts or vault content — not in fixtures, not in tests, not in screenshots attached to issues. - No internal hostnames or infrastructure detail. - Test fixtures are synthetic. ## What `AGENTS.md` must state Port the iOS build standard verbatim where it is Wes's words, because it is his framing that is the requirement, not the iOS specifics: - Every issue gets a feature branch. `main` is protected; only Wes approves. - **"The goal should be that a PR review could be done in 15 to 20 minutes."** - Nothing gets a PR until it has been tested — on the device where the issue says so. - **"You will, 100%, keep documentation up to date on every commit. I will fail PRs if docs aren't updated along the way. And if the code is hard to read, same thing."** - **"Error messages must be helpful. It must be. No option."** - **"I don't want to see anything about timelines in any of the documentation anywhere."** - **"We're gonna choose reliability and simplicity over fanciness."** - **"I would much prefer system standards for UI over having our own custom special UI."** On Android that means Material 3 and platform conventions, not a port of the iOS look. It must also carry the fifteen-step issue workflow with Codex in the loop, and the `.agent/<branch>/` artifact convention. Branch naming is the same: `m<milestone>-<issue>-<slug>`, because the pre-push hook derives the artifact path from the branch name. ## What is deliberately NOT ported The iOS `AGENTS.md` documents a lot of hard-won platform specifics — audio session categories, route repair, the speech analyzer's clock. None of that is true here. Port the process and the standard; let the platform sections be written by the issues that discover them. ## Done when The app builds and launches on the Pixel from a fresh clone, and `AGENTS.md` is complete enough that someone could pick up M1-02 without this conversation. --- *Milestone 1 of Stash for Android, mirroring `stash-ios` M1. M1 is a functioning app on the test device with **no sync at all** — record voice memos reliably and get them off the device by hand. Sync arrives in M3.* *Test device is a **Pixel 6** (Tensor G1) borrowed from a friend, until something better turns up. Stock Android, so no OEM battery-killer behaviour to fight — worth remembering that a phone from another manufacturer may not be as forgiving about background work.* *Translation of `Stash/stash-ios#1`. Where the platform forces a different answer this issue says so; where it does not, the iOS issue is the fuller statement of intent and should be read alongside this one.* *Working agreement for every issue in this repo: feature branch, tested before the PR opens (on-device where the label says so), then Wes reviews the PR and we walk the code together. Docs update in the same commit. A PR that takes more than 20 minutes to review is too big — say so and split it.*
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Stash/stash-android#1
No description provided.