M1-01: Repo scaffold and build standard #1
Labels
No labels
area/agent
area/capture
area/editor
area/geo
area/security
area/sync
area/transcription
area/ui
area/vault
area/voice-memos
blocked
milestone/M1
milestone/M2
milestone/M3
milestone/M4
needs-decision
needs-hardware
p0
p1
p2
type/bug
type/enhancement
type/feature
type/idea
type/infrastructure
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Stash/stash-ios#1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Stand up
stash-iosso everything after this has somewhere to land.Scope
project.ymlfor XcodeGen — the.xcodeprojis generated, not committed, so projectstructure is reviewable as a diff instead of an unreadable pbxproj blob.
AGENTS.md— the build standard, and the single source of truth (see below).CLAUDE.md— one line:@AGENTS.md. No symlink; Claude Code resolves the import nativelyand Codex reads
AGENTS.mddirectly. One file to maintain, nothing to drift.README.md— what it is, how to build, how to run..gitignore,.swiftlint.yml.⚠️ This repository is PUBLIC
Both
stash-iosandstash-docsare public. This has to be stated loudly at the top ofboth
README.mdandAGENTS.md, because it changes what may ever be committed:screenshots attached to issues.
equivalent one instead.
What
AGENTS.mdmust stateWes's build standard, in his words where his framing is the requirement:
mainis protected; only Wes approves.feature-sized, incremental. Not thousands of lines.
aren't updated along the way. And if the code is hard to read, same thing."
Agentic development does not run at human pace and the estimates are always wrong.
Done when
The app builds and launches in the simulator from a fresh clone, and
AGENTS.mdis completeenough that someone could pick up issue 02 without this conversation.
Milestone 1 of the Stash v3 rebuild, scoped 2026-08-06. M1 is a functioning iOS app on Wes's
phone with no sync at all — the entire goal is recording voice memos reliably and getting
them off the device by hand. Sync arrives in M3.
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.
Branch
m1-01-repo-scaffold, one commit, ready for a PR.What's in it
project.yml— XcodeGen. The.xcodeprojis gitignored and generated. Swift 6 language mode, complete strict concurrency, warnings as errors.Stash/—StashApp.swiftand aContentViewthat draws a waveform glyph and the word Stash. Nothing else.Stash/Assets.xcassets— the amethyst#9966CCaccent, and the moustache-over-waveform app icon carried over unchanged from the archived app.AGENTS.md— the build standard, with the public-repository warning as the first thing on the page. Feature branch per issue, the 15–20 minute PR rule, tested-before-PR (device where the label says so), docs in the same commit, helpful error messages, no timelines anywhere, reliability over fanciness, system-standard UI, decisions recorded instash-docs. Your framing is quoted where the wording is the requirement.CLAUDE.md— one line,@AGENTS.md.README.md— same public warning at the top, then what it is, how to build, how to run..gitignore,.swiftlint.yml.What I validated
Cloned the branch fresh into an empty directory and ran the full path from nothing:
xcodegen generate— project created, no.xcodeprojin the clone beforehand.swiftlint lint --strict— 0 violations in 2 files.xcodebuild -destination 'platform=iOS Simulator,name=iPhone 17 Pro Max'— BUILD SUCCEEDED..app, launchedtoday.wes.stash. It came up as pid 41348 and was still alive inlaunchctl listafterwards, so it launched rather than launching-and-crashing. Screenshot shows the amethyst tint resolving throughAccentColor.I also confirmed the guardrails do what they claim rather than just being set: an unused-variable warning fails the build (
error: initialization of immutable value 'unused' was never used), and the staged tree carries zero.xcodeprojpaths.What I did not validate
Leaving this open for you.
This has been resolved