Skip to content

Commit 522e91c

Browse files
authored
Merge pull request #502 from ConductionNL/sync/beta-to-development-20260830084410
chore(sync): carry beta back into development
2 parents 5258512 + 140bb2a commit 522e91c

14 files changed

Lines changed: 1035 additions & 0 deletions

.forgejo/.beta-release-trigger

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
beta-doriath-clean-window
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
name: "🐛 Bug Report"
2+
description: "Iets werkt niet zoals verwacht"
3+
title: "[BUG] "
4+
labels: ["bug", "needs-triage"]
5+
assignees: []
6+
body:
7+
- type: markdown
8+
attributes:
9+
value: |
10+
## Bug Report
11+
Beschrijf het probleem zo concreet mogelijk zodat het reproduceerbaar is.
12+
13+
- type: textarea
14+
id: description
15+
attributes:
16+
label: "Beschrijving"
17+
description: "Wat gaat er mis?"
18+
placeholder: "Bij het uploaden van een PDF groter dan 10MB crasht de anonymizer."
19+
validations:
20+
required: true
21+
22+
- type: textarea
23+
id: reproduce
24+
attributes:
25+
label: "Stappen om te reproduceren"
26+
value: |
27+
1. Ga naar ...
28+
2. Doe ...
29+
3. Zie fout ...
30+
validations:
31+
required: true
32+
33+
- type: textarea
34+
id: expected
35+
attributes:
36+
label: "Verwacht gedrag"
37+
placeholder: "Het document wordt anonimiseerd en gedownload."
38+
validations:
39+
required: true
40+
41+
- type: textarea
42+
id: actual
43+
attributes:
44+
label: "Werkelijk gedrag"
45+
placeholder: "HTTP 500 na ~30 seconden, geen output."
46+
validations:
47+
required: true
48+
49+
- type: textarea
50+
id: environment
51+
attributes:
52+
label: "Omgeving"
53+
value: |
54+
- Namespace/omgeving:
55+
- Versie/image tag:
56+
- Browser (indien van toepassing):
57+
validations:
58+
required: false
59+
60+
- type: textarea
61+
id: logs
62+
attributes:
63+
label: "Logs / Screenshots"
64+
description: "Plak relevante logs of voeg screenshots toe"
65+
render: shell
66+
validations:
67+
required: false
68+
69+
- type: textarea
70+
id: acceptance-criteria
71+
attributes:
72+
label: "Acceptatiecriteria (fix)"
73+
value: |
74+
- [ ] Bug is niet meer reproduceerbaar
75+
- [ ] Regressietest toegevoegd
76+
- [ ] Fix getest in acceptatieomgeving
77+
- [ ] Geen nieuwe security findings
78+
- [ ] Code gereviewd (4-eyes)
79+
validations:
80+
required: true
81+
82+
- type: dropdown
83+
id: severity
84+
attributes:
85+
label: "Severity"
86+
options:
87+
- "🔴 Critical — productie ligt plat"
88+
- "🟠 High — grote impact, workaround aanwezig"
89+
- "🟡 Medium — beperkte impact"
90+
- "🟢 Low — cosmetic / minor"
91+
validations:
92+
required: true
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
name: "✨ Feature request"
2+
description: "Suggest a feature or improvement. Fields below feed a draft OpenSpec proposal."
3+
title: "[FEATURE] "
4+
labels: ["enhancement", "feature", "needs-triage"]
5+
type: "Feature"
6+
body:
7+
- type: markdown
8+
attributes:
9+
value: |
10+
## Suggest a feature
11+
12+
Thanks for telling us what you need. **Triage happens within 24 hours.**
13+
14+
The fields below feed an OpenSpec proposal directly if the suggestion
15+
is accepted. The more concrete you are, the faster it ships.
16+
17+
Prefer Dutch? Vul de velden in het Nederlands in — that's fine, we triage in both.
18+
19+
- type: textarea
20+
id: problem
21+
attributes:
22+
label: "Problem"
23+
description: "What can't you do today? What's the friction? Write it from your perspective — one or two sentences is plenty."
24+
placeholder: "I want to filter contacts by last interaction date but the list view doesn't support it. I end up exporting to CSV and sorting in a spreadsheet."
25+
validations:
26+
required: true
27+
28+
- type: textarea
29+
id: proposed-solution
30+
attributes:
31+
label: "Proposed solution"
32+
description: "How would you like it to work? Sketches, links, references welcome. \"I'm not sure\" is also a valid answer — we'll figure it out together."
33+
placeholder: "A date-range filter in the contacts list sidebar, defaulting to last 30 days, persisted per user."
34+
validations:
35+
required: true
36+
37+
- type: textarea
38+
id: who-benefits
39+
attributes:
40+
label: "Who benefits"
41+
description: "Which user role or workflow does this serve? Be specific."
42+
placeholder: "Account managers tracking client engagement, especially before renewal conversations."
43+
validations:
44+
required: true
45+
46+
- type: dropdown
47+
id: priority-to-you
48+
attributes:
49+
label: "How important is this to you?"
50+
description: "Honest self-assessment. Helps us prioritise."
51+
options:
52+
- "Nice to have"
53+
- "Would use weekly"
54+
- "Would use daily"
55+
- "Blocking me right now"
56+
validations:
57+
required: true
58+
59+
- type: textarea
60+
id: context
61+
attributes:
62+
label: "Anything else?"
63+
description: "Edge cases, alternatives you've considered, things to avoid, related capabilities, anything that didn't fit in the boxes above."
64+
placeholder: "Out of scope: per-team default filter (could be later). Avoid: hiding the filter behind a settings page — needs to be one click from the list."
65+
66+
- type: markdown
67+
attributes:
68+
value: |
69+
### Context
70+
71+
The fields below are auto-filled when you suggest a feature from inside
72+
the app. They capture where you were when the idea hit so we can scope
73+
the spec without a second round of questions.
74+
75+
**We show them to you here on purpose**: you can see exactly what we
76+
send and edit or clear any field before you submit. Leave them blank if
77+
you're filing directly from GitHub — we'll still triage it.
78+
79+
- type: input
80+
id: app
81+
attributes:
82+
label: "App"
83+
description: "Auto-filled by the in-product modal. The Nextcloud app you were using."
84+
placeholder: "pipelinq"
85+
86+
- type: input
87+
id: page
88+
attributes:
89+
label: "Page"
90+
description: "Auto-filled. The manifest page id + route you were on when you opened the modal."
91+
placeholder: "clients-detail (/clients/abc-123)"
92+
93+
- type: input
94+
id: surface
95+
attributes:
96+
label: "Modal or widget"
97+
description: "Auto-filled. Any modal, dialog, dashboard widget, or sidebar tab open at the moment the modal launched. Helps us pinpoint UI-attached suggestions."
98+
placeholder: "edit-client-modal · or · dashboard widget: open-leads"
99+
100+
- type: input
101+
id: object
102+
attributes:
103+
label: "Object in focus"
104+
description: "Auto-filled. The OpenRegister register + schema + UUID the page was viewing, if any. Lets us trace the suggestion to a real data shape."
105+
placeholder: "pipelinq · Client · 2f9d-…-abc"
106+
107+
- type: input
108+
id: spec-ref
109+
attributes:
110+
label: "Related capability"
111+
description: "Auto-filled if the page or widget declares a `specRef`. Connects the suggestion to the existing OpenSpec for that capability."
112+
placeholder: "client-management"
113+
114+
- type: markdown
115+
attributes:
116+
value: |
117+
---
118+
119+
### What happens next
120+
121+
1. **Within 24 hours**: a maintainer reads this and replies with one of `ready-to-build`, `needs-design`, `parking-lot`, or `wont-build` (with a reason).
122+
2. **If `ready-to-build`**: an OpenSpec proposal is auto-drafted from these fields. Hydra picks it up and opens a draft PR within days.
123+
3. **When it ships**: you're credited on the spec, you get a `Co-Authored-By:` trailer on the merge commit, and you appear on the app's contributors page.
124+
125+
Read the full flow at the [Users are the moat](https://docs.conduction.nl/strategy/users-are-the-moat) strategy doc.
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
name: "⚙️ Technische Taak"
2+
description: "Infra, refactor, technische schuld of ops-werk"
3+
title: "[TECH] "
4+
labels: ["technical", "needs-refinement"]
5+
assignees: []
6+
body:
7+
- type: markdown
8+
attributes:
9+
value: |
10+
## Technische Taak
11+
Gebruik dit template voor infra-wijzigingen, refactoring, technische schuld of operationeel werk zonder directe gebruikerswaarde.
12+
13+
- type: textarea
14+
id: description
15+
attributes:
16+
label: "Beschrijving"
17+
description: "Wat moet er gedaan worden en waarom?"
18+
placeholder: "Migreer de WOO-platform PVC's naar S3 primary storage op Fuga Cloud."
19+
validations:
20+
required: true
21+
22+
- type: textarea
23+
id: motivation
24+
attributes:
25+
label: "Motivatie / Aanleiding"
26+
description: "Welk probleem lost dit op? Waarom nu?"
27+
placeholder: "Huidige lokale PVC's lopen vol en zijn niet HA. Zie ook issue #123."
28+
validations:
29+
required: false
30+
31+
- type: textarea
32+
id: approach
33+
attributes:
34+
label: "Aanpak (globaal)"
35+
description: "Hoe gaan we dit oplossen? Welke keuzes zijn al gemaakt?"
36+
placeholder: |
37+
1. Backup bestaande data
38+
2. S3 bucket aanmaken op Fuga Cloud
39+
3. Nextcloud occ storage:update uitvoeren
40+
4. Smoke test per namespace
41+
validations:
42+
required: false
43+
44+
- type: textarea
45+
id: acceptance-criteria
46+
attributes:
47+
label: "Acceptatiecriteria"
48+
value: |
49+
- [ ] Taak uitvoerbaar via Ansible/Terraform (geen handmatige stappen)
50+
- [ ] Gedocumenteerd in runbook of ADR
51+
- [ ] Getest in acceptatieomgeving vóór productie
52+
- [ ] Rollback-procedure beschreven
53+
- [ ] Geen downtime buiten afgesproken window
54+
- [ ] Gereviewd (4-eyes)
55+
- [ ] Geen nieuwe security findings
56+
validations:
57+
required: true
58+
59+
- type: textarea
60+
id: risks
61+
attributes:
62+
label: "Risico's / Afhankelijkheden"
63+
placeholder: "Afhankelijk van beschikbaarheid acceptatieomgeving. Risico: dataverlies bij fout in migratiescript."
64+
validations:
65+
required: false
66+
67+
- type: dropdown
68+
id: category
69+
attributes:
70+
label: "Categorie"
71+
options:
72+
- "Infra / ops"
73+
- "Refactor"
74+
- "Technische schuld"
75+
- "Security"
76+
- "Performance"
77+
- "CI/CD"
78+
- "Documentatie"
79+
validations:
80+
required: true
81+
82+
- type: dropdown
83+
id: priority
84+
attributes:
85+
label: "Prioriteit"
86+
options:
87+
- "🔴 Critical"
88+
- "🟠 High"
89+
- "🟡 Medium"
90+
- "🟢 Low"
91+
validations:
92+
required: true
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
name: "✨ User Story"
2+
description: "Nieuwe functionaliteit vanuit gebruikersperspectief"
3+
title: "Als [rol] wil ik [actie] zodat [waarde]"
4+
labels: ["user-story", "needs-refinement"]
5+
assignees: []
6+
body:
7+
- type: markdown
8+
attributes:
9+
value: |
10+
## User Story
11+
Beschrijf de gewenste functionaliteit vanuit het perspectief van de gebruiker.
12+
13+
- type: textarea
14+
id: story
15+
attributes:
16+
label: "Story"
17+
description: "Als [rol] wil ik [actie] zodat [waarde]"
18+
placeholder: "Als gemeentemedewerker wil ik een document kunnen anonimiseren zodat ik het veilig kan delen."
19+
validations:
20+
required: true
21+
22+
- type: textarea
23+
id: context
24+
attributes:
25+
label: "Context / Achtergrond"
26+
description: "Waarom is dit nodig? Wat is de aanleiding?"
27+
placeholder: "WOO-verzoeken vereisen anonimisering vóór publicatie..."
28+
validations:
29+
required: false
30+
31+
- type: textarea
32+
id: acceptance-criteria
33+
attributes:
34+
label: "Acceptatiecriteria"
35+
description: "Definition of Done — vink af wat van toepassing is"
36+
value: |
37+
- [ ] Functionaliteit werkt zoals beschreven in de story
38+
- [ ] Er zijn unit tests aanwezig
39+
- [ ] Er zijn integratietests aanwezig
40+
- [ ] Documentatie is bijgewerkt
41+
- [ ] Code is gereviewd (4-eyes)
42+
- [ ] Geen nieuwe security findings (SAST/Trivy)
43+
- [ ] Getest in acceptatieomgeving
44+
validations:
45+
required: true
46+
47+
- type: textarea
48+
id: out-of-scope
49+
attributes:
50+
label: "Buiten scope"
51+
description: "Wat doen we expliciet NIET in dit issue?"
52+
placeholder: "Geen bulk-verwerking, geen UI-wijzigingen."
53+
validations:
54+
required: false
55+
56+
- type: dropdown
57+
id: priority
58+
attributes:
59+
label: "Prioriteit"
60+
options:
61+
- "🔴 Critical"
62+
- "🟠 High"
63+
- "🟡 Medium"
64+
- "🟢 Low"
65+
validations:
66+
required: true
67+
68+
- type: input
69+
id: story-points
70+
attributes:
71+
label: "Story points (optioneel)"
72+
placeholder: "3"
73+
validations:
74+
required: false

0 commit comments

Comments
 (0)