Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
4dafab6
Merge pull request #5 from ConductionNL/beta
WilcoLouwerse Mar 24, 2026
d983a9f
Merge pull request #13 from ConductionNL/beta
WilcoLouwerse Apr 2, 2026
02315e7
chore: update SBOM
github-actions[bot] Apr 2, 2026
d87a5c3
fix: EUPL licence tag, SPDX headers, getRequestToken, readonly constr…
rubenvdlinde Apr 13, 2026
84480a2
revert: keep agpl in info.xml (Nextcloud app store requirement)
rubenvdlinde Apr 13, 2026
a779520
Merge branch 'main' into development
WilcoLouwerse Apr 16, 2026
3d231df
fix: backport gitignore typo fix, deduplication, and add @nextcloud/a…
WilcoLouwerse Apr 16, 2026
6dcdd0d
chore: replace schemas/conduction symlink with schemas directory symlink
WilcoLouwerse Apr 16, 2026
2f788c3
chore(sbom): remove per-app SBOM workflow + checked-in SBOM (release-…
rubenvdlinde May 1, 2026
e618b46
chore: add .github/CODEOWNERS for auto-review-request (#25)
rubenvdlinde May 3, 2026
0d95a46
feat: add example dashboard widget + splitChunks bundling pattern (#26)
rubenvdlinde May 5, 2026
c6c9453
feat(openspec): add template-manifest-v1 change
rubenvdlinde May 9, 2026
a980d6e
feat: ship src/manifest.json + customComponents registry + validator
rubenvdlinde May 9, 2026
b60af2f
feat: rewrite main.js + App.vue to mount-survivable Tier-4 bootstrap
rubenvdlinde May 9, 2026
209224e
chore: bump nextcloud-vue + router, add axios alias + manifest-first …
rubenvdlinde May 9, 2026
3878110
Merge pull request #27 from ConductionNL/feature/template-manifest-v1
rubenvdlinde May 10, 2026
034301e
feat: add sass + sass-loader to devDeps + replace info.xml marketing …
rubenvdlinde May 11, 2026
4601d2c
Merge pull request #28 from ConductionNL/fix/scss-support-and-cleaner…
rubenvdlinde May 11, 2026
442115a
fix(deps): regenerate package-lock.json to sync with pinia transitive…
rubenvdlinde May 11, 2026
8edce5e
Merge pull request #29 from ConductionNL/chore/quality-fixes-post-pr28
rubenvdlinde May 11, 2026
1ab445d
chore(ci): spec-validation gate — json-strict + manifest + register c…
rubenvdlinde May 12, 2026
93f2020
feat: adopt the Features & Roadmap menu (template ships it) (#33)
rubenvdlinde May 12, 2026
c622aa4
feat(mcp): ship example IMcpToolProvider + widget wiring in the templ…
rubenvdlinde May 12, 2026
12e88e1
chore(ux): Settings menu opens NcAppSettingsDialog (action: user-sett…
rubenvdlinde May 12, 2026
5a1cae3
chore(deps): bump @conduction/nextcloud-vue to ^1.0.0-beta.40
rubenvdlinde May 12, 2026
7f6851d
Merge pull request #35 from ConductionNL/chore/bump-nc-vue-beta40
rubenvdlinde May 12, 2026
0dff2f5
feat(template): ship a default Docusaurus docs site + journeydoc scaf…
rubenvdlinde May 13, 2026
20d02c5
fix: load shared webpack chunks before main/settings entries (silent …
rubenvdlinde May 13, 2026
716122a
ci(docs): revert deploy source to documentation branch (docs CI separ…
rubenvdlinde May 13, 2026
c852e1e
chore(security): require 24h cooldown on npm packages (#39)
rubenvdlinde May 17, 2026
6efbcae
feat(docs): AI-crawler-friendly defaults in the template scaffold
rubenvdlinde May 18, 2026
4181f67
WIP: pre-codeberg-migration sweep 2026-05-28 (80 files)
May 28, 2026
9b5b6e0
docs: add Codeberg migration banner
rubenvdlinde May 29, 2026
3b0197f
chore(community-sync): create CODE_OF_CONDUCT.md from Conduction/.github
May 29, 2026
1ff414d
chore(community-sync): create CONTRIBUTING.md from Conduction/.github
May 29, 2026
8316849
chore(community-sync): create SECURITY.md from Conduction/.github
May 29, 2026
e03a31b
chore(community-sync): create SUPPORT.md from Conduction/.github
May 29, 2026
8200fa6
chore(community-sync): create .forgejo/issue_template/bug-report.yml …
May 29, 2026
eaf0144
chore(community-sync): create .forgejo/issue_template/feature-request…
May 29, 2026
593d3a3
chore(community-sync): create .forgejo/issue_template/technical-task.…
May 29, 2026
2c6e74f
chore(community-sync): create .forgejo/issue_template/user-story.yml …
May 29, 2026
4dbd06c
chore: retarget GitHub URLs to Codeberg in app metadata
rubenvdlinde May 29, 2026
d93d9c1
docs: retarget README GitHub links and badges to Codeberg
rubenvdlinde May 29, 2026
8e74d4b
docs: retarget Docusaurus GitHub links to Codeberg and relabel navbar
rubenvdlinde May 29, 2026
8167a1f
chore: retarget nextcloud-vue manifest schema URL to Codeberg
rubenvdlinde May 29, 2026
454f008
chore(workflows): add Forgejo Actions documentation.yml
May 29, 2026
80698f0
chore: retarget remaining GitHub references to Codeberg
rubenvdlinde May 29, 2026
111ed24
chore: rename openbuilt → openbuild references
rubenvdlinde May 29, 2026
595c915
chore: rename mydash → launchpad references
rubenvdlinde May 30, 2026
2faecd1
fix(SettingsService): use importFromFilePath with SERVERROOT-relative…
rubenvdlinde Jun 1, 2026
bff9cf5
Merge origin/main into feat/docs-ai-baseline
rubenvdlinde Jun 1, 2026
ca77a58
Merge pull request 'feat(template): land manifest-first modernisation…
Jun 1, 2026
7c36b75
ci(docs): split build+gated-deploy, short reusable ref, secrets inherit
Jun 3, 2026
dcd18f1
Fixed template
remko48 Jun 10, 2026
cbedde2
more fixes
remko48 Jun 11, 2026
c91700e
fix
remko48 Jun 11, 2026
7c2f239
fix(nav): point the Documentation link at the Conduction academy
rubenvdlinde Jun 13, 2026
0d6d077
Merge pull request 'Template: Documentation link to the Conduction ac…
Jun 13, 2026
0b18d9f
fix(icons): use explicit white fill for NC theming favicon compatibility
rubenvdlinde Jun 14, 2026
520a972
Merge pull request 'fix(icons): use explicit white fill for NC themin…
Jun 14, 2026
cccbc30
docs(openspec): add apphost-tutorial-overwrite change (three-layer te…
rubenvdlinde Jun 21, 2026
58d8140
chore: rename remaining mydash references to launchpad
rubenvdlinde Jun 25, 2026
c55ead4
chore(deps): bump @conduction/nextcloud-vue to ^1.0.0-beta.144
rubenvdlinde Jul 1, 2026
a93b683
feat(widgets): scaffold ships zero custom widgets — example becomes a…
rubenvdlinde Jul 5, 2026
a7e0793
refactor(dashboard-widget): modernize native ExampleWidget onto the C…
rubenvdlinde Jul 5, 2026
93c30aa
build(deps): bump @conduction/nextcloud-vue to ^1.0.0-beta.154
rubenvdlinde Jul 5, 2026
4a41ffe
docs: describe the manifest-driven widget example instead of the dele…
rubenvdlinde Jul 5, 2026
bb2f4c8
chore(lint): whitelist the @spec jsdoc tag and cover all CLI validato…
rubenvdlinde Jul 5, 2026
045289b
build(deps): lock @conduction/nextcloud-vue at 1.0.0-beta.154
rubenvdlinde Jul 6, 2026
bbe53e6
Merge pull request 'feat(widgets): scaffold ships zero custom widgets…
Jul 6, 2026
b78e43b
Merge remote-tracking branch 'origin/main' into HEAD
rubenvdlinde Jul 10, 2026
79883f8
Merge pull request 'nextcloud-app-template: rename remaining mydash r…
Jul 10, 2026
16febac
chore: absorbeer GitHub-archiverings-banner-commit in de historie
MWest2020 Jul 16, 2026
a54c775
ci: bound the remaining unbounded CI jobs on main (#111)
rubenvdlinde Aug 3, 2026
e71b732
ci: rename branch-protection caller job id `check` -> `branch-protect…
rubenvdlinde Aug 25, 2026
ede3e5c
chore(sync): carry main back into beta
github-actions[bot] Aug 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 92 additions & 0 deletions .forgejo/issue_template/bug-report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
name: "🐛 Bug Report"
description: "Iets werkt niet zoals verwacht"
title: "[BUG] "
labels: ["bug", "needs-triage"]
assignees: []
body:
- type: markdown
attributes:
value: |
## Bug Report
Beschrijf het probleem zo concreet mogelijk zodat het reproduceerbaar is.

- type: textarea
id: description
attributes:
label: "Beschrijving"
description: "Wat gaat er mis?"
placeholder: "Bij het uploaden van een PDF groter dan 10MB crasht de anonymizer."
validations:
required: true

- type: textarea
id: reproduce
attributes:
label: "Stappen om te reproduceren"
value: |
1. Ga naar ...
2. Doe ...
3. Zie fout ...
validations:
required: true

- type: textarea
id: expected
attributes:
label: "Verwacht gedrag"
placeholder: "Het document wordt anonimiseerd en gedownload."
validations:
required: true

- type: textarea
id: actual
attributes:
label: "Werkelijk gedrag"
placeholder: "HTTP 500 na ~30 seconden, geen output."
validations:
required: true

- type: textarea
id: environment
attributes:
label: "Omgeving"
value: |
- Namespace/omgeving:
- Versie/image tag:
- Browser (indien van toepassing):
validations:
required: false

- type: textarea
id: logs
attributes:
label: "Logs / Screenshots"
description: "Plak relevante logs of voeg screenshots toe"
render: shell
validations:
required: false

- type: textarea
id: acceptance-criteria
attributes:
label: "Acceptatiecriteria (fix)"
value: |
- [ ] Bug is niet meer reproduceerbaar
- [ ] Regressietest toegevoegd
- [ ] Fix getest in acceptatieomgeving
- [ ] Geen nieuwe security findings
- [ ] Code gereviewd (4-eyes)
validations:
required: true

- type: dropdown
id: severity
attributes:
label: "Severity"
options:
- "🔴 Critical — productie ligt plat"
- "🟠 High — grote impact, workaround aanwezig"
- "🟡 Medium — beperkte impact"
- "🟢 Low — cosmetic / minor"
validations:
required: true
125 changes: 125 additions & 0 deletions .forgejo/issue_template/feature-request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
name: "✨ Feature request"
description: "Suggest a feature or improvement. Fields below feed a draft OpenSpec proposal."
title: "[FEATURE] "
labels: ["enhancement", "feature", "needs-triage"]
type: "Feature"
body:
- type: markdown
attributes:
value: |
## Suggest a feature

Thanks for telling us what you need. **Triage happens within 24 hours.**

The fields below feed an OpenSpec proposal directly if the suggestion
is accepted. The more concrete you are, the faster it ships.

Prefer Dutch? Vul de velden in het Nederlands in — that's fine, we triage in both.

- type: textarea
id: problem
attributes:
label: "Problem"
description: "What can't you do today? What's the friction? Write it from your perspective — one or two sentences is plenty."
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."
validations:
required: true

- type: textarea
id: proposed-solution
attributes:
label: "Proposed solution"
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."
placeholder: "A date-range filter in the contacts list sidebar, defaulting to last 30 days, persisted per user."
validations:
required: true

- type: textarea
id: who-benefits
attributes:
label: "Who benefits"
description: "Which user role or workflow does this serve? Be specific."
placeholder: "Account managers tracking client engagement, especially before renewal conversations."
validations:
required: true

- type: dropdown
id: priority-to-you
attributes:
label: "How important is this to you?"
description: "Honest self-assessment. Helps us prioritise."
options:
- "Nice to have"
- "Would use weekly"
- "Would use daily"
- "Blocking me right now"
validations:
required: true

- type: textarea
id: context
attributes:
label: "Anything else?"
description: "Edge cases, alternatives you've considered, things to avoid, related capabilities, anything that didn't fit in the boxes above."
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."

- type: markdown
attributes:
value: |
### Context

The fields below are auto-filled when you suggest a feature from inside
the app. They capture where you were when the idea hit so we can scope
the spec without a second round of questions.

**We show them to you here on purpose**: you can see exactly what we
send and edit or clear any field before you submit. Leave them blank if
you're filing directly from GitHub — we'll still triage it.

- type: input
id: app
attributes:
label: "App"
description: "Auto-filled by the in-product modal. The Nextcloud app you were using."
placeholder: "pipelinq"

- type: input
id: page
attributes:
label: "Page"
description: "Auto-filled. The manifest page id + route you were on when you opened the modal."
placeholder: "clients-detail (/clients/abc-123)"

- type: input
id: surface
attributes:
label: "Modal or widget"
description: "Auto-filled. Any modal, dialog, dashboard widget, or sidebar tab open at the moment the modal launched. Helps us pinpoint UI-attached suggestions."
placeholder: "edit-client-modal · or · dashboard widget: open-leads"

- type: input
id: object
attributes:
label: "Object in focus"
description: "Auto-filled. The OpenRegister register + schema + UUID the page was viewing, if any. Lets us trace the suggestion to a real data shape."
placeholder: "pipelinq · Client · 2f9d-…-abc"

- type: input
id: spec-ref
attributes:
label: "Related capability"
description: "Auto-filled if the page or widget declares a `specRef`. Connects the suggestion to the existing OpenSpec for that capability."
placeholder: "client-management"

- type: markdown
attributes:
value: |
---

### What happens next

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).
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.
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.

Read the full flow at the [Users are the moat](https://docs.conduction.nl/strategy/users-are-the-moat) strategy doc.
92 changes: 92 additions & 0 deletions .forgejo/issue_template/technical-task.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
name: "⚙️ Technische Taak"
description: "Infra, refactor, technische schuld of ops-werk"
title: "[TECH] "
labels: ["technical", "needs-refinement"]
assignees: []
body:
- type: markdown
attributes:
value: |
## Technische Taak
Gebruik dit template voor infra-wijzigingen, refactoring, technische schuld of operationeel werk zonder directe gebruikerswaarde.

- type: textarea
id: description
attributes:
label: "Beschrijving"
description: "Wat moet er gedaan worden en waarom?"
placeholder: "Migreer de WOO-platform PVC's naar S3 primary storage op Fuga Cloud."
validations:
required: true

- type: textarea
id: motivation
attributes:
label: "Motivatie / Aanleiding"
description: "Welk probleem lost dit op? Waarom nu?"
placeholder: "Huidige lokale PVC's lopen vol en zijn niet HA. Zie ook issue #123."
validations:
required: false

- type: textarea
id: approach
attributes:
label: "Aanpak (globaal)"
description: "Hoe gaan we dit oplossen? Welke keuzes zijn al gemaakt?"
placeholder: |
1. Backup bestaande data
2. S3 bucket aanmaken op Fuga Cloud
3. Nextcloud occ storage:update uitvoeren
4. Smoke test per namespace
validations:
required: false

- type: textarea
id: acceptance-criteria
attributes:
label: "Acceptatiecriteria"
value: |
- [ ] Taak uitvoerbaar via Ansible/Terraform (geen handmatige stappen)
- [ ] Gedocumenteerd in runbook of ADR
- [ ] Getest in acceptatieomgeving vóór productie
- [ ] Rollback-procedure beschreven
- [ ] Geen downtime buiten afgesproken window
- [ ] Gereviewd (4-eyes)
- [ ] Geen nieuwe security findings
validations:
required: true

- type: textarea
id: risks
attributes:
label: "Risico's / Afhankelijkheden"
placeholder: "Afhankelijk van beschikbaarheid acceptatieomgeving. Risico: dataverlies bij fout in migratiescript."
validations:
required: false

- type: dropdown
id: category
attributes:
label: "Categorie"
options:
- "Infra / ops"
- "Refactor"
- "Technische schuld"
- "Security"
- "Performance"
- "CI/CD"
- "Documentatie"
validations:
required: true

- type: dropdown
id: priority
attributes:
label: "Prioriteit"
options:
- "🔴 Critical"
- "🟠 High"
- "🟡 Medium"
- "🟢 Low"
validations:
required: true
74 changes: 74 additions & 0 deletions .forgejo/issue_template/user-story.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: "✨ User Story"
description: "Nieuwe functionaliteit vanuit gebruikersperspectief"
title: "Als [rol] wil ik [actie] zodat [waarde]"
labels: ["user-story", "needs-refinement"]
assignees: []
body:
- type: markdown
attributes:
value: |
## User Story
Beschrijf de gewenste functionaliteit vanuit het perspectief van de gebruiker.

- type: textarea
id: story
attributes:
label: "Story"
description: "Als [rol] wil ik [actie] zodat [waarde]"
placeholder: "Als gemeentemedewerker wil ik een document kunnen anonimiseren zodat ik het veilig kan delen."
validations:
required: true

- type: textarea
id: context
attributes:
label: "Context / Achtergrond"
description: "Waarom is dit nodig? Wat is de aanleiding?"
placeholder: "WOO-verzoeken vereisen anonimisering vóór publicatie..."
validations:
required: false

- type: textarea
id: acceptance-criteria
attributes:
label: "Acceptatiecriteria"
description: "Definition of Done — vink af wat van toepassing is"
value: |
- [ ] Functionaliteit werkt zoals beschreven in de story
- [ ] Er zijn unit tests aanwezig
- [ ] Er zijn integratietests aanwezig
- [ ] Documentatie is bijgewerkt
- [ ] Code is gereviewd (4-eyes)
- [ ] Geen nieuwe security findings (SAST/Trivy)
- [ ] Getest in acceptatieomgeving
validations:
required: true

- type: textarea
id: out-of-scope
attributes:
label: "Buiten scope"
description: "Wat doen we expliciet NIET in dit issue?"
placeholder: "Geen bulk-verwerking, geen UI-wijzigingen."
validations:
required: false

- type: dropdown
id: priority
attributes:
label: "Prioriteit"
options:
- "🔴 Critical"
- "🟠 High"
- "🟡 Medium"
- "🟢 Low"
validations:
required: true

- type: input
id: story-points
attributes:
label: "Story points (optioneel)"
placeholder: "3"
validations:
required: false
Loading
Loading