origin = bearylabs/openwhispr, upstream = OpenWhispr/openwhispr. No app code here.
The app branch's CLAUDE.md is binding as well.
-
main: exact mirror ofupstream/main, updated only withgit merge --ff-only upstream/main. -
dev-rules: this branch. Never merge into or out of it. -
Per topic, both from
upstream/main:<type>/<topic>: becomes the upstream PR. Protected: changes only by squash PR fromexp/.exp/<type>/<topic>: free. Commit, revert, force-push, experiment.
type:feat fix chore docs refactor perf test ci build.topic: lowercase kebab-case that tells a reviewer what changes. One topic per pair. -
pr-assets/*: screenshots linked from PR descriptions. Never delete, never a PR source. -
Once per clone, in a dev-rules checkout:
bash tools/install-guard.sh(push guard).
- Create and push both branches. Work only in
exp/. - Test the pushed
exp/SHA (mobile and native Mac on GitHub runners; desktop:npm test):git show origin/dev-rules:tools/run-all-tests.sh | bash -s exp/<type>/<topic>, thengh run watch <id> --repo bearylabs/openwhispr --exit-status. Only a green run for that SHA counts. - Land: one fork PR per clean commit.
Conventional Commit title.
gh pr create --repo bearylabs/openwhispr --base <type>/<topic> --head exp/<type>/<topic> --title "<title>" --body "<body>" gh pr merge <n> --repo bearylabs/openwhispr --squash --subject "<title>" --body "<body>"
--repois required (default is upstream),--subjecttoo (otherwise GitHub appends the fork's(#n)). - Merge
origin/<type>/<topic>back intoexp/and push. Both trees must be equal. - Upstream PR (draft) from
<type>/<topic>: what, why, link to the test run. Later landings update it.
Build the iOS app ("build the app"): repo bearylabs/ios-builds, local /home/hrudek/dev/ios-builds.
Read its README.md first. Any pushed app SHA may be built, tested or not (usually the exp/
branch); never dev-rules. Tests are required only for landing and upstream PRs.
Rebase a feature branch only when asked: disable ruleset 26306024
(gh api -X PUT repos/bearylabs/openwhispr/rulesets/26306024 -f enforcement=disabled),
push --force-with-lease --no-verify, re-enable (enforcement=active), merge into exp/.
- Smallest change in upstream's style; no unrelated edits; nothing fork-specific in app branches.
- Behavior changes ship with tests. Change a test only for intended behavior. Never weaken the
security audit or skip assertions; if a
tools/headless-keyboard/*.patchstops applying, fix it. - Before the upstream PR,
git diff upstream/main...<type>/<topic>contains only the topic.
Landing in a feature branch, opening or updating upstream PRs, rebasing, deleting branches,
changing GitHub settings. Pushing exp/ needs no permission.
Every upstream PR has its pair; nothing else is kept.
| Upstream PR | Feature branch |
|---|---|
| #3039 | feat/ios-keyboard-autocorrection |
| #3024 | fix/mobile-uri-decoder |
| #3015 | feat/ios-minimal-voice-keyboard |