docs: add community health files and Gitea issue/PR templates
CODEOWNERS, CONTRIBUTING.md, SECURITY.md, SETUP.md, and the .gitea issue/PR templates, rewritten for Outpost (they started as copies from an unrelated project's templates - stripped the cross-repo/ticket-ID conventions and the entirely different tech stack in SETUP.md, replaced with this repo's actual submodule/OutlineKit/Xcode workflow).
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
name: Bug Report
|
||||
about: Report a bug in Outpost
|
||||
labels:
|
||||
- "type: bug"
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Outpost is early alpha — please check the version in About (or your build's commit) is current before filing, and mention which platform (macOS only, for now) and OS version you're on.
|
||||
- type: input
|
||||
id: summary
|
||||
attributes:
|
||||
label: Summary
|
||||
placeholder: Brief description of the bug
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: steps
|
||||
attributes:
|
||||
label: Steps to Reproduce
|
||||
value: |
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: expected
|
||||
attributes:
|
||||
label: Expected Behavior
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: actual
|
||||
attributes:
|
||||
label: Actual Behavior
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: context
|
||||
attributes:
|
||||
label: Additional Context
|
||||
description: Logs, screenshots, macOS version, Outline server version, etc.
|
||||
@@ -0,0 +1 @@
|
||||
blank_issues_enabled: false
|
||||
@@ -0,0 +1,30 @@
|
||||
name: Documentation
|
||||
about: Report missing, incorrect, or outdated documentation
|
||||
labels:
|
||||
- "type: docs"
|
||||
body:
|
||||
- type: input
|
||||
id: page
|
||||
attributes:
|
||||
label: Affected Page / File
|
||||
placeholder: "e.g. SETUP.md, docs/ARCHITECTURE.md, CLAUDE.md"
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: type
|
||||
attributes:
|
||||
label: Type
|
||||
options:
|
||||
- Missing documentation
|
||||
- Incorrect / outdated information
|
||||
- Unclear or confusing
|
||||
- Typo / formatting
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Description
|
||||
description: What needs to change and why?
|
||||
validations:
|
||||
required: true
|
||||
@@ -0,0 +1,46 @@
|
||||
name: Security Vulnerability
|
||||
about: Report a security vulnerability in this repository
|
||||
labels:
|
||||
- "type: security"
|
||||
- "priority: critical"
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
**Please do not disclose sensitive details publicly.** If this is a critical vulnerability,
|
||||
email security@psmattas.com directly instead of filing this issue — see [`SECURITY.md`](../../SECURITY.md).
|
||||
- type: input
|
||||
id: summary
|
||||
attributes:
|
||||
label: Summary
|
||||
placeholder: Brief description of the vulnerability
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: severity
|
||||
attributes:
|
||||
label: Severity
|
||||
options:
|
||||
- Critical — active exploit / data exposure
|
||||
- High — exploitable with moderate effort
|
||||
- Medium — limited impact or requires specific conditions
|
||||
- Low — informational / hardening suggestion
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Description
|
||||
description: What is the vulnerability and how can it be exploited?
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: reproduction
|
||||
attributes:
|
||||
label: Steps to Reproduce
|
||||
description: Provide enough detail for someone to verify the issue.
|
||||
- type: textarea
|
||||
id: remediation
|
||||
attributes:
|
||||
label: Suggested Remediation
|
||||
description: If you have a fix in mind, describe it here.
|
||||
@@ -0,0 +1,38 @@
|
||||
name: Pull Request
|
||||
about: Standard pull request template
|
||||
body:
|
||||
- type: input
|
||||
id: ticket
|
||||
attributes:
|
||||
label: Related Issue
|
||||
description: "Leave blank if there isn't one."
|
||||
placeholder: "Resolves #"
|
||||
|
||||
- type: textarea
|
||||
id: summary
|
||||
attributes:
|
||||
label: Summary
|
||||
description: "One or two sentences — what and why."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: changes
|
||||
attributes:
|
||||
label: Changes
|
||||
value: "-\n-"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: Checklist
|
||||
options:
|
||||
- label: Self-reviewed
|
||||
required: true
|
||||
- label: "`OutlineKit` tests added/updated and passing (`swift test`), if this touches the REST layer"
|
||||
required: false
|
||||
- label: Verified in Xcode (there's no reliable CLI build for the app target)
|
||||
required: true
|
||||
- label: Docs updated (if applicable)
|
||||
@@ -0,0 +1,5 @@
|
||||
# Outpost Code Owners
|
||||
# These users are automatically requested for review on PRs.
|
||||
# Format: path @username
|
||||
|
||||
* @psmattas
|
||||
@@ -0,0 +1,71 @@
|
||||
# Contributing to Outpost
|
||||
|
||||
Thank you for contributing. Please read this guide before opening issues or PRs.
|
||||
|
||||
Outpost is early alpha (`0.0.x`) — expect the codebase and conventions here to shift as Phase 1 (see [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)) settles. If something in this guide is stale, flag it.
|
||||
|
||||
---
|
||||
|
||||
## Branching
|
||||
|
||||
Branch from `main` using `type/short-description`:
|
||||
|
||||
```bash
|
||||
git checkout -b feature/document-permissions
|
||||
git checkout -b fix/sidebar-context-menu
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Commit Messages
|
||||
|
||||
Follow the Conventional Commits standard: `type(scope): message`.
|
||||
|
||||
| Type | Description |
|
||||
| :--- | :--- |
|
||||
| `feat` | New feature |
|
||||
| `fix` | Bug fix |
|
||||
| `docs` | Documentation |
|
||||
| `style` | Formatting |
|
||||
| `refactor` | Refactor |
|
||||
| `perf` | Performance |
|
||||
| `test` | Tests |
|
||||
| `build` | Build system |
|
||||
| `ci` | CI/CD config |
|
||||
| `chore` | Maintenance |
|
||||
|
||||
**Examples:**
|
||||
- `feat(collections): add document right-click context menu`
|
||||
- `fix(reader): correct off-main AppKit calls in save action`
|
||||
|
||||
---
|
||||
|
||||
## Pull Requests
|
||||
|
||||
- Link the related issue in your PR description, if any
|
||||
- Keep PRs focused — one feature or fix per PR
|
||||
- Self-review before requesting review
|
||||
- Run the tests that apply to what you touched (see below) and confirm the app still launches and behaves correctly in Xcode
|
||||
|
||||
### Testing
|
||||
|
||||
- **`OutlineKit`** (the REST client package) has real unit test coverage:
|
||||
```bash
|
||||
cd OutlineKit && swift test
|
||||
```
|
||||
- **The `Outpost` app target** has no meaningful CLI build path — `xcodebuild` from the command line is not a reliable way to verify it in this project's current setup. Build and run through Xcode, and manually verify the feature you changed (and anything obviously adjacent) before opening a PR.
|
||||
|
||||
---
|
||||
|
||||
## Labels
|
||||
|
||||
Issues and PRs use two label prefixes:
|
||||
|
||||
- `type:` — what kind of change/issue this is (`type: bug`, `type: docs`, `type: security`, ...)
|
||||
- `priority:` — how urgent it is (used mainly for security reports)
|
||||
|
||||
---
|
||||
|
||||
## Questions
|
||||
|
||||
Open an issue — this is a single-repo project, there's no separate issue tracker to route to.
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
# Security Policy
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
If you discover a security vulnerability in Outpost, please do **not**
|
||||
open a public issue.
|
||||
|
||||
Report it privately to: **security@psmattas.com**
|
||||
|
||||
Include:
|
||||
- A description of the vulnerability
|
||||
- Steps to reproduce
|
||||
- Potential impact
|
||||
- Any suggested fixes if available
|
||||
|
||||
We will acknowledge receipt within 48 hours and aim to release a fix
|
||||
within 14 days depending on severity.
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Outpost is in early alpha (`0.0.x`) — there's no stable release line
|
||||
yet. Only the most recent tagged release receives fixes; please make
|
||||
sure you're on the latest alpha before reporting.
|
||||
|
||||
| Version | Supported |
|
||||
| :--- | :---: |
|
||||
| Latest tagged release | ✅ |
|
||||
| Older releases | ❌ |
|
||||
|
||||
## Scope
|
||||
|
||||
Outpost is a client application that talks to a self-hosted Outline
|
||||
instance you control — it doesn't run any server infrastructure of its
|
||||
own. Vulnerabilities in Outline itself belong to
|
||||
[outline/outline](https://github.com/outline/outline), not this repo.
|
||||
API tokens are stored in the system Keychain only (never `UserDefaults`,
|
||||
never logged) — see [`CLAUDE.md`](CLAUDE.md) for the relevant
|
||||
conventions if you're reviewing that code path.
|
||||
@@ -0,0 +1,91 @@
|
||||
# Outpost Setup Guide
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- macOS with a recent Xcode (Xcode 16 or later)
|
||||
- A self-hosted Outline instance (or getoutline.com) and a personal API
|
||||
key — Settings → API Keys on that instance. Outpost only ever talks
|
||||
to Outline's public REST/WebSocket API; it doesn't vendor or run any
|
||||
part of Outline's server.
|
||||
|
||||
## 1. Clone with submodules
|
||||
|
||||
The vendored OpenAPI reference (`docs/reference/outline-openapi`) is a
|
||||
git submodule.
|
||||
|
||||
```bash
|
||||
git clone --recurse-submodules <repo-url>
|
||||
# or, if you already cloned without it:
|
||||
git submodule update --init --recursive
|
||||
```
|
||||
|
||||
To pull that submodule up to whatever's newest upstream:
|
||||
|
||||
```bash
|
||||
git submodule update --remote docs/reference/outline-openapi
|
||||
```
|
||||
|
||||
## 2. Build and test `OutlineKit`
|
||||
|
||||
`OutlineKit` is a standalone Swift package (the REST client layer) and
|
||||
the only part of this repo with a reliable command-line build/test path.
|
||||
|
||||
```bash
|
||||
cd OutlineKit
|
||||
swift build
|
||||
swift test
|
||||
```
|
||||
|
||||
## 3. Open the app in Xcode
|
||||
|
||||
```bash
|
||||
open Outpost.xcodeproj
|
||||
```
|
||||
|
||||
- Select the **Outpost** scheme.
|
||||
- In **Signing & Capabilities**, pick your own team. A free personal
|
||||
Apple ID team works fine for building and running locally — it just
|
||||
means the app isn't notarized, so distributed builds trigger
|
||||
Gatekeeper's "unidentified developer" warning on other machines (see
|
||||
`scripts/package-dmg.sh`, which ships a README explaining the bypass).
|
||||
- Run. There's no way to build the app target reliably from the CLI in
|
||||
this project's current setup — use Xcode.
|
||||
|
||||
## 4. Sign in
|
||||
|
||||
On first launch, enter your Outline instance's URL and the API key
|
||||
from step 0. The token is stored in the system Keychain only.
|
||||
|
||||
## 5. Packaging a release build
|
||||
|
||||
After archiving in Xcode (Product → Archive → Distribute App → Copy
|
||||
App), package it into a DMG:
|
||||
|
||||
```bash
|
||||
./scripts/package-dmg.sh /path/to/exported/Outpost.app
|
||||
```
|
||||
|
||||
This also prints a Markdown changelog (grouped by commit type, since
|
||||
the last git tag) for pasting into release notes.
|
||||
|
||||
## Where to go next
|
||||
|
||||
- [`CLAUDE.md`](CLAUDE.md) — project conventions, phased build order, what's in/out of scope right now.
|
||||
- [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) — deeper technical rationale (API surface, the realtime collaboration transport, the CRDT engine, known risk areas).
|
||||
- [`CONTRIBUTING.md`](CONTRIBUTING.md) — branching, commit conventions, PR expectations.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### `swift build`/`swift test` fails in `OutlineKit`
|
||||
Make sure you're running it from inside the `OutlineKit/` directory,
|
||||
not the repo root — it's a separate Swift package, not part of the
|
||||
Xcode project's own build.
|
||||
|
||||
### Submodule directory is empty
|
||||
You cloned without `--recurse-submodules`. Run
|
||||
`git submodule update --init --recursive` from the repo root.
|
||||
|
||||
### App builds but sign-in fails
|
||||
Double-check the server URL (including `https://`) and that the API
|
||||
key hasn't been revoked on the Outline instance's Settings → API Keys
|
||||
page.
|
||||
Reference in New Issue
Block a user