Skip to content

Commit 4a0d18f

Browse files
sjungwon03claude
andcommitted
chore: establish repository baseline
Adopt the repository conventions used in Theorvane/openscene, adapted to LabFox. Branch strategy: - `dev` becomes the integration branch and the target of every contributor PR - `main` holds releases only, promoted through a separate reviewed release PR - Update AGENTS.md, CONTRIBUTING.md, README.md and .agents/docs/workflow.md accordingly Community health files: - SECURITY.md covering GitLab token handling, self-hosted instance hostnames, and the scope of a credential-carrying client - SUPPORT.md separating what maintainers can and cannot help with - CODE_OF_CONDUCT.md (Contributor Covenant 2.1) GitHub configuration: - Replace the markdown issue templates with YAML issue forms, both leading with a token and hostname redaction warning - Disable blank issues and route security and support through contact links - Expand the pull request template with DCO, license, layout and theme checks CI: - Add .github/workflows/ci.yml - A language-policy job enforces the English-only rule on every tracked file - The Flutter quality gate is gated on a pubspec.yaml existing, so CI is green today and self-activates when M0 lands the scaffolding Also add a Flutter .gitignore and document the label taxonomy. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
1 parent 6c57cf1 commit 4a0d18f

15 files changed

Lines changed: 855 additions & 86 deletions

File tree

‎.agents/docs/workflow.md‎

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,33 @@ This is a public repository, so **never leave the personal instance address in d
2626

2727
---
2828

29+
## Branch model
30+
31+
```
32+
feature branch ──PR──> dev ──release PR──> main
33+
```
34+
35+
| Branch | Role |
36+
|---|---|
37+
| `dev` | Default branch. Integration target. **Every contributor PR goes here.** |
38+
| `main` | Releases only. Updated through a separate reviewed `dev` → `main` release PR. |
39+
40+
Rules:
41+
42+
- Branch from `dev`, open the PR into `dev`.
43+
- Never commit directly to `dev` or `main`.
44+
- Never open a PR against `main`. Promoting `dev` to `main` is a maintainer decision and gets its
45+
own reviewed release PR.
46+
- Rebase or merge `dev` into your branch to resolve conflicts. Do not rewrite published history.
47+
48+
---
49+
2950
## Overall Flow
3051

3152
```
3253
Create Issue
3354
↓
34-
Create branch (branched from main)
55+
Create branch (branched from dev)
3556
↓
3657
Commit (with Signed-off-by)
3758
↓
@@ -46,7 +67,7 @@ CI passes + Review
4667
Merge ← done by a maintainer
4768
```
4869

49-
Never commit or push directly to `main`.
70+
Never commit or push directly to `dev` or `main`.
5071

5172
---
5273

@@ -70,14 +91,21 @@ gh issue view 12
7091

7192
### Labels
7293

73-
| Label | Purpose |
94+
Structured prefixes so filters stay useful as the tracker grows.
95+
96+
| Prefix | Labels |
7497
|---|---|
75-
| `feat` `fix` `docs` `refactor` `test` `chore` | Type of change |
76-
| `M0` `M1` `M2` `M3` `M4` | Milestone |
77-
| `android` `ios` `desktop` | Platform-specific issues |
78-
| `api` `ui` `design-system` | Area |
79-
| `self-hosted` | Self-hosted GitLab-only problems |
80-
| `good first issue` | For new contributors |
98+
| type | `feat` `fix` `docs` `refactor` `test` `chore` |
99+
| area | `area:api` `area:ui` `area:design-system` `area:ci` `area:docs` `area:mobile` `area:desktop` `area:security` |
100+
| milestone | `M0` `M1` `M2` `M3` `M4` |
101+
| platform | `platform:android` `platform:ios` `platform:windows` `platform:macos` |
102+
| priority | `priority:critical` `priority:high` `priority:medium` `priority:low` |
103+
| size | `size:XS` `size:S` `size:M` `size:L` `size:XL` |
104+
| status | `status:needs-triage` `status:in-progress` `status:blocked` |
105+
| special | `self-hosted` `good first issue` `help wanted` `question` `duplicate` `invalid` |
106+
107+
`self-hosted` marks problems that only reproduce against a self-managed GitLab instance.
108+
Those are hard for maintainers to reproduce, so they need extra detail from the reporter.
81109

82110
---
83111

@@ -99,11 +127,11 @@ chore/35-melos-bootstrap
99127
- The slug is lowercase + hyphens. Keep it short.
100128

101129
```
102-
git switch main && git pull
130+
git switch dev && git pull
103131
git switch -c feat/12-mr-diff-viewer
104132
```
105133

106-
**Always branch from the latest `main`.** Don't stack on top of another working branch.
134+
**Always branch from the latest `dev`.** Don't stack on top of another working branch.
107135
If a dependency is unavoidable, state the prerequisite PR in the PR description.
108136

109137
---
@@ -157,13 +185,13 @@ flutter test
157185

158186
```
159187
git push -u origin feat/12-mr-diff-viewer
160-
gh pr create --fill --base main
188+
gh pr create --fill --base dev
161189
```
162190

163191
Start as a Draft:
164192

165193
```
166-
gh pr create --draft --fill --base main
194+
gh pr create --draft --fill --base dev
167195
gh pr ready 42
168196
```
169197

@@ -203,7 +231,8 @@ What agents may do without confirmation:
203231

204232
**What they do not do:**
205233

206-
- ❌ Push directly to `main`
234+
- ❌ Push directly to `dev` or `main`
235+
- ❌ Open a PR against `main` (release promotion is a maintainer decision)
207236
- ❌ Force push (both `--force` and `--force-with-lease`)
208237
- ❌ **Merge PRs** — a maintainer does that
209238
- ❌ Delete Issues / PRs / branches

‎.github/ISSUE_TEMPLATE/bug.md‎

Lines changed: 0 additions & 28 deletions
This file was deleted.
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
name: Bug report
2+
description: Report something in LabFox that does not work as expected
3+
title: "fix: "
4+
labels: [bug]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
## ⚠️ Read this before you paste anything
10+
11+
LabFox talks to GitLab with **Personal Access Tokens (`glpat-...`)**, OAuth access/refresh
12+
tokens, and often against **self-hosted instances on private hostnames**. Job logs, diffs and
13+
API responses copied out of the app frequently contain secrets and employer-confidential code.
14+
15+
**Never paste into this issue:**
16+
17+
- Tokens of any kind (`glpat-...`, OAuth access/refresh tokens, CI job tokens, cookies)
18+
- `Authorization`, `Private-Token` or `Job-Token` headers
19+
- Self-hosted instance hostnames, internal URLs, IP addresses or project paths
20+
- Private or employer-confidential source code, diffs or raw job logs
21+
- Exploit details or proof-of-concept material
22+
23+
**Redact before pasting.** Replace secrets with `<REDACTED>` and hostnames with
24+
`gitlab.example.com`. A public issue cannot be un-published.
25+
26+
🔒 If you think you found a **security vulnerability**, do **not** open an issue here.
27+
Follow [SECURITY.md](https://github.com/labfox-app/labfox/blob/dev/SECURITY.md) instead.
28+
29+
- type: textarea
30+
id: what-happened
31+
attributes:
32+
label: What happened
33+
description: Describe the observed behavior. What did LabFox actually do?
34+
placeholder: |
35+
Opening a merge request from the to-do inbox shows an empty diff pane instead of the file list.
36+
validations:
37+
required: true
38+
39+
- type: textarea
40+
id: steps
41+
attributes:
42+
label: Steps to reproduce
43+
description: Give the minimal numbered steps someone else can follow to see the same result.
44+
placeholder: |
45+
1. Sign in to gitlab.example.com with a PAT
46+
2. Open the to-do inbox
47+
3. Tap a merge request entry
48+
4. Observe the diff pane
49+
validations:
50+
required: true
51+
52+
- type: textarea
53+
id: expected
54+
attributes:
55+
label: Expected behavior
56+
description: What did you expect to happen instead?
57+
placeholder: |
58+
The diff pane should list the changed files and render the unified diff.
59+
validations:
60+
required: true
61+
62+
- type: dropdown
63+
id: platform
64+
attributes:
65+
label: Platform
66+
description: Where did you see this? Open one issue per platform if it differs.
67+
options:
68+
- Android
69+
- iOS
70+
- Windows
71+
- macOS
72+
validations:
73+
required: true
74+
75+
- type: dropdown
76+
id: instance-type
77+
attributes:
78+
label: GitLab instance type
79+
description: Which kind of GitLab instance were you connected to?
80+
options:
81+
- GitLab.com
82+
- Self-hosted (GitLab CE)
83+
- Self-hosted (GitLab EE)
84+
validations:
85+
required: true
86+
87+
- type: input
88+
id: gitlab-version
89+
attributes:
90+
label: GitLab version
91+
description: >-
92+
Version of the GitLab instance, if you know it. Leave this empty if the version itself is
93+
sensitive information for your organization. Do not enter the hostname here.
94+
placeholder: "17.4.1"
95+
validations:
96+
required: false
97+
98+
- type: input
99+
id: labfox-version
100+
attributes:
101+
label: LabFox version or commit SHA
102+
description: >-
103+
The app version you are running, or the commit SHA you built from. LabFox is
104+
pre-scaffolding, so a commit SHA is expected for now.
105+
placeholder: "0.1.0 or a1b2c3d"
106+
validations:
107+
required: true
108+
109+
- type: textarea
110+
id: logs
111+
attributes:
112+
label: Logs and screenshots
113+
description: >-
114+
Optional. Stack traces, redacted job logs or screenshots that help. ⚠️ Redact first —
115+
strip every token, `Authorization` header, instance hostname, internal URL and any
116+
confidential source code. Blur the same things out of screenshots.
117+
placeholder: |
118+
[ERROR] GET https://gitlab.example.com/api/v4/projects/<REDACTED>/merge_requests/12/changes -> 401
119+
Authorization: Bearer <REDACTED>
120+
render: shell
121+
validations:
122+
required: false
123+
124+
- type: checkboxes
125+
id: confirmation
126+
attributes:
127+
label: Before submitting
128+
options:
129+
- label: I searched the existing issues and this is not a duplicate.
130+
required: true
131+
- label: >-
132+
I removed every token, `Authorization` header, instance hostname, internal URL,
133+
credential and confidential piece of data from this report.
134+
required: true
135+
- label: This report is written in English.
136+
required: true

‎.github/ISSUE_TEMPLATE/config.yml‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
blank_issues_enabled: false
2+
contact_links:
3+
- name: Security reports
4+
url: https://github.com/labfox-app/labfox/blob/dev/SECURITY.md
5+
about: >-
6+
Report vulnerabilities privately. Never publish tokens, instance hostnames, or exploit
7+
material in a public issue.
8+
- name: Support and setup
9+
url: https://github.com/labfox-app/labfox/blob/dev/SUPPORT.md
10+
about: >-
11+
Questions about installing, signing in, or connecting to a self-hosted GitLab instance.
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
name: Feature request
2+
description: Suggest a capability that strengthens the core LabFox review flow
3+
title: "feat: "
4+
labels: []
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
## ⚠️ Read this before you paste anything
10+
11+
Do **not** include tokens (`glpat-...`, OAuth access/refresh tokens), `Authorization` or
12+
`Private-Token` headers, self-hosted instance hostnames, internal URLs, private or
13+
employer-confidential source code, or exploit details. **Redact before pasting** —
14+
use `<REDACTED>` and `gitlab.example.com`.
15+
16+
🔒 Security vulnerabilities do not belong in a public issue. Follow
17+
[SECURITY.md](https://github.com/labfox-app/labfox/blob/dev/SECURITY.md) instead.
18+
19+
- type: markdown
20+
attributes:
21+
value: |
22+
## What LabFox is trying to be
23+
24+
LabFox deliberately does **not** port every GitLab web feature. It is a focused client for
25+
one core flow:
26+
27+
```
28+
check notifications → review Issue/MR → read diff and review
29+
→ check pipeline status → read job log → Approve / Merge / Retry
30+
```
31+
32+
A request is far more likely to be accepted when it makes a step of that flow faster,
33+
clearer or possible on a phone.
34+
35+
### Explicitly out of 1.0 scope
36+
37+
Requests for the following will be **closed**:
38+
39+
Wiki · Packages · Container Registry · Infrastructure · Kubernetes ·
40+
Security Dashboard · Analytics · Admin Area · Runner Administration · AI features
41+
42+
- type: textarea
43+
id: problem
44+
attributes:
45+
label: What problem are you trying to solve
46+
description: >-
47+
Describe the problem, not the solution. What are you doing today, and where does it break
48+
down or slow you down?
49+
placeholder: |
50+
When a pipeline fails I cannot tell which job failed without leaving the MR screen, so on
51+
mobile I end up opening the GitLab web UI anyway.
52+
validations:
53+
required: true
54+
55+
- type: textarea
56+
id: core-flow
57+
attributes:
58+
label: How does this fit the core flow
59+
description: >-
60+
Which step of "notifications → review Issue/MR → diff and review → pipeline status →
61+
job log → Approve/Merge/Retry" does this serve, and how?
62+
placeholder: |
63+
It shortens the "check pipeline status → read job log" step: the failing job becomes
64+
reachable in one tap from the MR screen instead of three.
65+
validations:
66+
required: true
67+
68+
- type: textarea
69+
id: proposal
70+
attributes:
71+
label: Proposed solution
72+
description: Optional. If you already have a concrete idea, sketch it here.
73+
placeholder: |
74+
Show a compact pipeline strip on the MR screen with the failing job highlighted and tappable.
75+
validations:
76+
required: false
77+
78+
- type: dropdown
79+
id: platforms
80+
attributes:
81+
label: Which platforms does this matter for
82+
description: Optional. Select every platform where this would make a difference.
83+
multiple: true
84+
options:
85+
- Android
86+
- iOS
87+
- Windows
88+
- macOS
89+
- All
90+
validations:
91+
required: false
92+
93+
- type: checkboxes
94+
id: confirmation
95+
attributes:
96+
label: Before submitting
97+
options:
98+
- label: >-
99+
I read the 1.0 scope above, my request is not in the out-of-scope list, and I searched
100+
the existing issues for a duplicate.
101+
required: true
102+
- label: >-
103+
This request is written in English and contains no tokens, instance hostnames or
104+
confidential data.
105+
required: true

0 commit comments

Comments
 (0)