Document .reference/ for untracked reference apps and repos

Projects modelled on another app need its docs and source close at hand,
but never in the repo. A self-ignoring .reference/ folder keeps that
material available to every session without risking a stray commit.
This commit is contained in:
2026-10-20 01:08:02 +08:00
parent 09e761297b
commit 43112dc0e9
+38 -9
View File
@@ -28,6 +28,10 @@ The reference implementations to copy from are `~/Git/kapture` and
`dist/`, `.swiftpm/`, `xcuserdata/`, `DerivedData/`, `.DS_Store`. `dist/`, `.swiftpm/`, `xcuserdata/`, `DerivedData/`, `.DS_Store`.
(`go build ./...` drops a binary next to the source — ignore it explicitly.) (`go build ./...` drops a binary next to the source — ignore it explicitly.)
- Never commit secrets (`.p8`, API keys) or push to a remote unless asked. - Never commit secrets (`.p8`, API keys) or push to a remote unless asked.
- **Reference material goes in `.reference/`, never in the repo.** Every project
that is modelled on another app or repo gets a `.reference/` folder with a
`.gitignore` containing `*` — see [Reference material](#2-reference-material-reference)
for the exact shape and what to put in it.
- Commit messages: concise, why-focused, first line < 72 chars; add a body only - Commit messages: concise, why-focused, first line < 72 chars; add a body only
when it helps a future reader. when it helps a future reader.
- Prefer SwiftPM (Swift/SwiftUI) for macOS apps; no external dependencies. - Prefer SwiftPM (Swift/SwiftUI) for macOS apps; no external dependencies.
@@ -48,11 +52,36 @@ git push -u origin main
``` ```
Scaffold every repo with `README.md`, `AGENTS.md` (architecture + commands + Scaffold every repo with `README.md`, `AGENTS.md` (architecture + commands +
gotchas), and `.gitignore`. See `~/Git/simpletopbar` for the minimal shape: gotchas), `.gitignore`, and `.reference/` (see below). See
`Package.swift`, `Sources/<Name>/*.swift`, `build-app.sh`, `release.sh`, `~/Git/simpletopbar` for the minimal shape: `Package.swift`,
`scripts/`. `Sources/<Name>/*.swift`, `build-app.sh`, `release.sh`, `scripts/`.
## 2. Homebrew tap ## 2. Reference material (`.reference/`)
Apps and repos that a project is modelled on are research input, not source
code. Keep them in an untracked `.reference/` folder at the repo root so they
are available to every session without ever entering the repository:
```bash
mkdir -p ~/Git/<repo>/.reference
printf '*\n' > ~/Git/<repo>/.reference/.gitignore
```
- The `.gitignore` **inside** `.reference/` contains a single `*`. Ignore the
whole folder there, not in the repo's root `.gitignore`: the folder is then
self-contained and stays untracked even if the root ignore file is rewritten.
- Clone reference repos inside it:
`git clone --depth 1 <url> .reference/<name>`. Do not vendor them into
`Sources/` or `vendor/`.
- Write one short note per reference (`tangerine.md`, `filee.md`) covering: what
the app does, its interaction model, the formats/features worth matching, and
what we deliberately skip. Notes are untracked too — that is fine; they are
for the next session, not for the public repo.
- Check licences before reusing code. MIT/Apache-2.0 code can be adapted with
attribution; never copy assets, icons, or code from a closed app.
- `.reference/` is never committed, never released, and never required to build.
## 3. Homebrew tap
- The tap clone lives at **`~/.cache/homebrew-tap`** - The tap clone lives at **`~/.cache/homebrew-tap`**
(origin `https://gitea.tzgyn.dev/TZGyn/homebrew-tap.git`). (origin `https://gitea.tzgyn.dev/TZGyn/homebrew-tap.git`).
@@ -106,7 +135,7 @@ class <Name> < Formula
end end
``` ```
## 3. Releasing a macOS GUI app ## 4. Releasing a macOS GUI app
Two scripts per repo: `build-app.sh <version>` and `release.sh <version>`. Two scripts per repo: `build-app.sh <version>` and `release.sh <version>`.
@@ -118,7 +147,7 @@ Two scripts per repo: `build-app.sh <version>` and `release.sh <version>`.
`CFBundleIdentifier = dev.tzgyn.<name>`. `CFBundleIdentifier = dev.tzgyn.<name>`.
2. **Notarize + staple + zip** (`release.sh`): build → `ditto -c -k --keepParent 2. **Notarize + staple + zip** (`release.sh`): build → `ditto -c -k --keepParent
<App>.app dist/<App>.zip` → submit to Apple → staple → re-zip → print sha256. <App>.app dist/<App>.zip` → submit to Apple → staple → re-zip → print sha256.
See [Notarization](#4-notarization) for the credentials. See [Notarization](#5-notarization) for the credentials.
3. **Publish the release** and attach the zip: 3. **Publish the release** and attach the zip:
```bash ```bash
@@ -147,7 +176,7 @@ Two scripts per repo: `build-app.sh <version>` and `release.sh <version>`.
brew upgrade --cask <name> brew upgrade --cask <name>
``` ```
## 4. Notarization ## 5. Notarization
Signing identity: `Developer ID Application: Teh Zi Gyn (RX6767S6BW)`. Signing identity: `Developer ID Application: Teh Zi Gyn (RX6767S6BW)`.
App Store Connect API key (shared with Kapture): App Store Connect API key (shared with Kapture):
@@ -204,13 +233,13 @@ xcrun notarytool history --key ... --key-id ... --issuer ... # 403 here = acco
problem is the account, not the bundle, so there is nothing to change in the problem is the account, not the bundle, so there is nothing to change in the
app or the scripts. app or the scripts.
## 5. Mobile ## 6. Mobile
For mobile (iOS/Android), notarization does not apply; the equivalent is store For mobile (iOS/Android), notarization does not apply; the equivalent is store
signing (App Store Connect / Play Console) or EAS. Ask for the specific stack signing (App Store Connect / Play Console) or EAS. Ask for the specific stack
before assuming; this skill currently only codifies the macOS path. before assuming; this skill currently only codifies the macOS path.
## 6. Extending this skill (self-improvement) ## 7. Extending this skill (self-improvement)
This skill is meant to grow. When the user asks for a new behaviour, preference, This skill is meant to grow. When the user asks for a new behaviour, preference,
or convention: or convention: