mirror of
https://github.com/awizemann/scarf.git
synced 2026-05-10 18:44:45 +00:00
d2a447fcc4
Public docs now live at https://github.com/awizemann/scarf/wiki (separate git repo cloned to .wiki-worktree/, mirroring the .gh-pages-worktree/ pattern). Internal dev notes stay in scarf/docs/. scripts/wiki.sh wraps pull/commit/push with a two-pass secret-scan: hard patterns (token regexes + private-key headers + a user-maintained scripts/wiki-blocklist.txt) abort with non-zero exit; soft assignment patterns (api_key=…, password=…, token=…) warn and require --force-terms. CLAUDE.md gains a Wiki section listing the update triggers (new feature, new service, architecture change, Hermes version bump, full release, keyboard/sidebar change) and the workflow. CONTRIBUTING.md points external contributors at the wiki Edit button or a direct clone. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
54 lines
1.9 KiB
Markdown
54 lines
1.9 KiB
Markdown
# Contributing to Scarf
|
|
|
|
Thanks for your interest in contributing to Scarf.
|
|
|
|
## Getting Started
|
|
|
|
1. Fork and clone the repo
|
|
2. Open `scarf/scarf.xcodeproj` in Xcode 26.3+
|
|
3. Build and run (requires macOS 26.2+ and Hermes installed at `~/.hermes/`)
|
|
|
|
## Architecture
|
|
|
|
Scarf uses the MVVM-Feature pattern. Each feature is a self-contained module under `Features/`:
|
|
|
|
```
|
|
Features/FeatureName/
|
|
Views/ SwiftUI views
|
|
ViewModels/ @Observable view models
|
|
```
|
|
|
|
Rules:
|
|
- Features never import sibling features directly
|
|
- Cross-feature navigation goes through `AppCoordinator`
|
|
- Services in `Core/Services/` are shared across features
|
|
- Models in `Core/Models/` are plain structs
|
|
|
|
## Guidelines
|
|
|
|
- Keep it simple. Minimal dependencies, no over-engineering.
|
|
- No commented-out code, TODOs, or deferred functionality in PRs.
|
|
- All code must build with zero warnings.
|
|
- Follow existing patterns — look at how similar features are built before adding new ones.
|
|
- The app only reads from `~/.hermes/state.db` (never writes). Memory files are the exception.
|
|
- Swift 6 strict concurrency: `@MainActor` default isolation, `nonisolated` for service methods.
|
|
|
|
## Documentation
|
|
|
|
Public docs live in the [GitHub wiki](https://github.com/awizemann/scarf/wiki). Small fixes (typos, clarifications) can be made via the "Edit" button on any wiki page — you need push access to the main repo. For larger changes, clone the wiki locally (`git clone git@github.com:awizemann/scarf.wiki.git`) or open an issue describing the proposed change.
|
|
|
|
## Reporting Issues
|
|
|
|
Open an issue with:
|
|
- What you expected to happen
|
|
- What actually happened
|
|
- macOS version and Hermes version
|
|
- Steps to reproduce
|
|
|
|
## Pull Requests
|
|
|
|
- Open an issue first to discuss the change
|
|
- One feature or fix per PR
|
|
- Include a clear description of what changed and why
|
|
- Ensure the project builds with `xcodebuild -project scarf/scarf.xcodeproj -scheme scarf build`
|