Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
767 commits
Select commit Hold shift + click to select a range
02b600e
chore: review round 2 results (#33)
rubenvdlinde Apr 14, 2026
a05ecbd
chore: review round 9 results (#34)
rubenvdlinde Apr 14, 2026
aaa66e3
Merge pull request #33 from ConductionNL/feature/16/p2-meeting-manage…
rubenvdlinde Apr 14, 2026
fa2c004
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
165111b
chore: merge origin/development into feature/17/p2-minutes-and-decisi…
Apr 14, 2026
8cfc989
fix iteration 2: address all CRITICAL and WARNING findings from code …
Apr 14, 2026
095f5b5
chore: review round 9 results (#34)
rubenvdlinde Apr 14, 2026
e7e70cc
chore: review round 8 results (#32)
rubenvdlinde Apr 14, 2026
e74add2
chore: review round 9 results (#34)
rubenvdlinde Apr 14, 2026
f446d48
chore: review round 8 results (#32)
rubenvdlinde Apr 14, 2026
c7e45e5
chore: review round 9 results (#34)
rubenvdlinde Apr 14, 2026
76e9fdc
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
38a082f
Merge remote-tracking branch 'origin/development' into feature/18/p2-…
Apr 14, 2026
fa50276
chore: review round 8 results (#32)
rubenvdlinde Apr 14, 2026
9f2330a
chore: review round 9 results (#34)
rubenvdlinde Apr 14, 2026
2527cce
chore: review round 8 results (#32)
rubenvdlinde Apr 14, 2026
c868492
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
673bf06
fix iteration 3: address all CRITICAL/WARNING findings from Code Revi…
Apr 14, 2026
bfe443d
fix iteration 2: address code review and security review findings (#18)
Apr 14, 2026
4c52d04
Merge remote-tracking branch 'origin/development' into feature/17/p2-…
Apr 14, 2026
e348309
fix iteration 5: address code review and security review warnings (#15)
Apr 14, 2026
f0e9c19
merge: integrate latest development branch (#15)
Apr 14, 2026
b47e3f7
fix iteration 2: clean up merge artefacts (#18)
Apr 14, 2026
3c7c286
chore: review round 8 results (#32)
rubenvdlinde Apr 14, 2026
f55aa30
fix iteration 3: address all CRITICAL and WARNING findings from code …
Apr 14, 2026
4607d41
merge: sync PR branch with remote (#18)
Apr 14, 2026
939b5ba
fix iteration 4: complete access-control hardening for Minutes endpoi…
Apr 14, 2026
7a46be7
Merge remote-tracking branch 'origin/feature/17/p2-minutes-and-decisi…
Apr 14, 2026
95b72cc
fix iteration 5: address all WARNING findings from code and security …
Apr 14, 2026
e21785e
fix iteration 5: merge and extend auth test coverage (#15)
Apr 14, 2026
26936e8
fix iteration 3: address all CRITICAL and WARNING review findings (#17)
Apr 14, 2026
3633196
fix iteration 6: address CRITICAL/WARNING findings from code review (…
Apr 14, 2026
d1cb660
chore: review round 9 results (#34)
rubenvdlinde Apr 14, 2026
d872d50
Merge remote-tracking branch 'origin/development' into feature/17/p2-…
Apr 14, 2026
d3a88d8
chore: review round 9 results (#34)
rubenvdlinde Apr 14, 2026
7ea3e02
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
ef15a17
Merge remote-tracking branch 'origin/development' into feature/18/p2-…
Apr 14, 2026
6af04ec
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
aa9f429
fix iteration 3: address all CRITICAL and WARNING findings from code …
Apr 14, 2026
5092311
chore: review round 9 results (#34)
rubenvdlinde Apr 14, 2026
65a392c
fix iteration 4: fix PHPUnit failures — named params on mocks, seed s…
Apr 14, 2026
4a5032a
Merge remote-tracking branch 'origin/development' into feature-branch
Apr 14, 2026
05535ba
fix iteration 5: address all CRITICAL and WARNING findings from Code …
Apr 14, 2026
d176f8b
chore: review round 9 results (#34)
rubenvdlinde Apr 14, 2026
326b379
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
338935f
Merge remote-tracking branch 'origin/development' into feature/17/p2-…
Apr 14, 2026
aefc736
Merge remote-tracking branch 'origin/development' into feature/18/p2-…
Apr 14, 2026
ffcb599
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
c1e47a5
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
778a292
Merge remote-tracking branch 'origin/development' into feature/18/p2-…
Apr 14, 2026
2713475
fix iteration 4: move MailReplyHandler registration to boot() via IJo…
Apr 14, 2026
827dbed
fix iteration 4: update unit test constructors to match fix-iteration…
Apr 14, 2026
9379efb
chore: review round 9 results (#34)
rubenvdlinde Apr 14, 2026
e417e41
chore: review round 9 results (#34)
rubenvdlinde Apr 14, 2026
46e5973
fix iteration 4: fix PHPUnit test suite broken by constructor injecti…
Apr 14, 2026
bda442b
fix iteration 4: merge remote test fixes and Application.php correcti…
Apr 14, 2026
e13eba7
fix iteration 6: address all WARNING findings from Code Review (#17)
Apr 14, 2026
7e97140
fix iteration 4: remove duplicate motionService property from VotingS…
Apr 14, 2026
7fa2c16
fix iteration 7: closing section counter, DecisionController DI, test…
rubenvdlinde Apr 14, 2026
8309878
chore: review round 9 results (#34)
rubenvdlinde Apr 14, 2026
3b30501
chore: merge origin/feature/17/p2-minutes-and-decisions — resolve con…
rubenvdlinde Apr 14, 2026
ae866a7
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
db678bc
Merge remote-tracking branch 'origin/development' into feature/18/p2-…
Apr 14, 2026
f3c6fa1
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
daab0c1
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
610520b
Merge remote-tracking branch 'origin/development' into feature/18/p2-…
Apr 14, 2026
5a0c588
fix iteration 5: address all CRITICAL and WARNING findings from code …
Apr 14, 2026
a16685f
chore: review round 9 results (#34)
rubenvdlinde Apr 14, 2026
ec3089a
Merge pull request #34 from ConductionNL/feature/17/p2-minutes-and-de…
rubenvdlinde Apr 14, 2026
ed1034d
Merge branch 'feature/18/p2-motion-and-voting' of https://github.com/…
Apr 14, 2026
6d215bd
fix iteration 4: register OpenRegister stubs via Composer PSR-4 autol…
Apr 14, 2026
9853bae
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
7e84cd6
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
ed50c45
fix iteration 6: resolve development merge conflicts (#18)
Apr 14, 2026
5399e27
merge: resolve conflicts with origin/development (#18)
Apr 14, 2026
64f4489
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
065901d
fix iteration 4: replace OC.isUserAdmin() with settingsStore.isAdmin …
Apr 14, 2026
7dac12a
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
23467dd
Merge remote-tracking branch 'origin/development' into feature/18/p2-…
Apr 14, 2026
2af0356
fix iteration 6: address all CRITICAL and WARNING findings from code …
Apr 14, 2026
11ad59d
fix iteration 6: resolve pull-merge conflicts (#18)
Apr 14, 2026
37b2e90
fix iteration 4: correct saveObject mock return type in DecisionContr…
Apr 14, 2026
18d1cc2
fix iteration 4: address all CRITICAL and WARNING findings from code …
Apr 14, 2026
40a710d
fix iteration 6: remove unused component imports from MainMenu.vue (#18)
Apr 14, 2026
98aff06
Merge remote-tracking branch 'origin/feature/18/p2-motion-and-voting'…
Apr 14, 2026
3af3597
Merge remote-tracking branch 'origin/feature/18/p2-motion-and-voting'…
Apr 14, 2026
aba91ab
chore: review round 7 results (#35)
rubenvdlinde Apr 14, 2026
a426671
chore: review round 7 results (#35)
rubenvdlinde Apr 15, 2026
c9909a3
chore: review round 7 results (#35)
rubenvdlinde Apr 15, 2026
a469e92
Merge remote-tracking branch 'origin/development' into feature/18/p2-…
Apr 15, 2026
a1a88af
fix iteration 4: address all CRITICAL and WARNING findings (#18)
Apr 15, 2026
b6e9b0d
chore: review round 8 results (#32)
rubenvdlinde Apr 15, 2026
a503114
chore: review round 8 results (#32)
rubenvdlinde Apr 15, 2026
2ce29cc
chore: review round 8 results (#32)
rubenvdlinde Apr 15, 2026
0e6b4dd
chore: review round 7 results (#35)
rubenvdlinde Apr 15, 2026
df9a977
Merge pull request #35 from ConductionNL/feature/18/p2-motion-and-voting
rubenvdlinde Apr 15, 2026
fb079ea
chore: review round 8 results (#32)
rubenvdlinde Apr 15, 2026
d8fdf9d
chore: review round 8 results (#32)
rubenvdlinde Apr 15, 2026
5c915e0
chore: review round 8 results (#32)
rubenvdlinde Apr 15, 2026
0bd4e0f
chore: review round 8 results (#32)
rubenvdlinde Apr 15, 2026
fa0a7b0
chore: review round 8 results (#32)
rubenvdlinde Apr 15, 2026
471e0ed
chore: review round 8 results (#32)
rubenvdlinde Apr 15, 2026
9935f8c
chore: review round 2 results (#32)
rubenvdlinde Apr 15, 2026
0d0fbf6
chore: review round 2 results (#32)
rubenvdlinde Apr 15, 2026
2103e93
chore: review round 2 results (#32)
rubenvdlinde Apr 15, 2026
a2893c6
chore: review round 2 results (#32)
rubenvdlinde Apr 15, 2026
1799a56
chore: review round 2 results (#32)
rubenvdlinde Apr 15, 2026
cfb6ffb
chore: review round 2 results (#32)
rubenvdlinde Apr 15, 2026
5ee0359
chore: review round 2 results (#32)
rubenvdlinde Apr 15, 2026
237a7f3
chore: review round 2 results (#32)
rubenvdlinde Apr 15, 2026
c5cb2ff
chore: review round 2 results (#32)
rubenvdlinde Apr 15, 2026
fd59518
chore: review round 2 results (#32)
rubenvdlinde Apr 15, 2026
4acc173
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
adb63f3
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
687e07a
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
9dc5c26
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
f0c1af3
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
32f95ef
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
baf9cb7
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
39e4cfe
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
23b1856
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
0becc41
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
b895111
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
469f460
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
398d5d8
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
328d1ed
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
0ab4fd2
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
31ab889
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
41ac457
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
59910ca
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
af180db
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
e62b632
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
addbcfc
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
26603fb
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
cc67445
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
0325481
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
9734bf1
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
37fa30c
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
04dff11
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
fddee05
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
94af6d6
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
ef2a6d7
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
b77943d
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
474f9b2
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
e1cdba8
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
a86a18d
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
d9adfdf
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
2309457
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
13b20dc
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
5897386
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
1a5b522
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
77d61fa
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
01bf641
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
70f5a21
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
a4e9030
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
1fc81f7
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
d64169c
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
44a028b
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
8e4181f
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
a185e2a
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
67864ba
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
840efeb
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
04a45cd
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
a866a89
chore: review round 3 results (#32)
rubenvdlinde Apr 15, 2026
9d5bf7e
chore: review round 3 results (#32)
rubenvdlinde Apr 16, 2026
6ee8bd5
chore: review round 3 results (#32)
rubenvdlinde Apr 16, 2026
e892bc2
chore: review round 3 results (#32)
rubenvdlinde Apr 16, 2026
5859651
chore: review round 3 results (#32)
rubenvdlinde Apr 16, 2026
79a3955
chore: review round 3 results (#32)
rubenvdlinde Apr 16, 2026
2d0ba93
chore: review round 3 results (#32)
rubenvdlinde Apr 16, 2026
4924199
chore: review round 3 results (#32)
rubenvdlinde Apr 16, 2026
9a56b45
merge: resolve conflicts with development (PRs #33, #34, #35)
rubenvdlinde Apr 16, 2026
330bbb2
Merge pull request #32 from ConductionNL/feature/15/p2-agenda-management
rubenvdlinde Apr 16, 2026
454d116
adr: push 5 architecture decisions from Specter
Apr 16, 2026
2f75d46
feat: Add OpenSpec change p2-meeting-management-core-t1 from Specter
Apr 16, 2026
bc5962d
chore: add hydra.json for p2-meeting-management-core-t1
Apr 16, 2026
164ba63
chore: link issue to hydra.json for p2-meeting-management-core-t1
Apr 16, 2026
740f13c
feat: Add OpenSpec change p4-collaboration from Specter
Apr 16, 2026
ad9edef
chore: add hydra.json for p4-collaboration
Apr 16, 2026
c6a1432
chore: link issue to hydra.json for p4-collaboration
Apr 16, 2026
5d18dd4
feat: Add OpenSpec change p2-meeting-management-core-t1 from Specter
Apr 16, 2026
688d92d
feat: Add OpenSpec change p2-meeting-management-core-t1 from Specter
Apr 16, 2026
a241382
chore: add hydra.json for p2-meeting-management-core-t1
Apr 16, 2026
1476035
chore: link issue to hydra.json for p2-meeting-management-core-t1
Apr 16, 2026
82d7397
feat: Add OpenSpec change p4-collaboration from Specter
Apr 16, 2026
0e428a8
feat: Add OpenSpec change p4-collaboration from Specter
Apr 16, 2026
fd58998
chore: add hydra.json for p4-collaboration
Apr 16, 2026
d68908a
chore: link issue to hydra.json for p4-collaboration
Apr 16, 2026
8ef5e74
feat: Add OpenSpec change p2-meeting-management from Specter
Apr 16, 2026
c4cbfdf
feat: Add OpenSpec change p2-meeting-management from Specter
Apr 16, 2026
9829d5b
chore: add hydra.json for p2-meeting-management
Apr 16, 2026
65a5964
chore: link issue to hydra.json for p2-meeting-management
Apr 16, 2026
2b54387
chore: remove duplicate adr-adr-*.md files (double prefix bug)
rubenvdlinde Apr 17, 2026
a0c44f8
chore: remove duplicate adr-adr-*.md files (double prefix bug)
rubenvdlinde Apr 17, 2026
882d238
chore: remove duplicate adr-adr-*.md files (double prefix bug)
rubenvdlinde Apr 17, 2026
65bf854
chore: remove duplicate adr-adr-*.md files (double prefix bug)
rubenvdlinde Apr 17, 2026
6b3cea6
feat: Add OpenSpec change p2-minutes-and-decisions-core-t3 from Specter
Apr 17, 2026
ed1f0ea
feat: Add OpenSpec change p2-minutes-and-decisions-core-t3 from Specter
Apr 17, 2026
1823781
chore: add hydra.json for p2-minutes-and-decisions-core-t3
Apr 17, 2026
401ec6b
merge: spec/p2-minutes-and-decisions-core-t3 into development
Apr 17, 2026
d5677a4
chore: link issue to hydra.json for p2-minutes-and-decisions-core-t3
Apr 17, 2026
9fbdf6c
feat: Add OpenSpec change p4-integration from Specter
Apr 17, 2026
ef5e7e9
feat: Add OpenSpec change p4-integration from Specter
Apr 17, 2026
c29dbac
chore: add hydra.json for p4-integration
Apr 17, 2026
d275626
chore: link issue to hydra.json for p4-integration
Apr 17, 2026
cc86320
adr: push 4 architecture decisions from Specter
Apr 17, 2026
8885af9
feat: Add OpenSpec change p3-citizen-participation from Specter
Apr 17, 2026
7787f3a
feat: Add OpenSpec change p3-citizen-participation from Specter
Apr 17, 2026
0d417bb
chore: add hydra.json for p3-citizen-participation
Apr 17, 2026
2b86cca
chore: link issue to hydra.json for p3-citizen-participation
Apr 17, 2026
38c4c7c
chore: build result (#72)
rubenvdlinde Apr 18, 2026
913765c
chore: build result (#71)
rubenvdlinde Apr 18, 2026
c28369d
test: skip 21 tests broken by ObjectService stub/real-signature misma…
rubenvdlinde Apr 18, 2026
ad5f2f7
Merge pull request #91 from ConductionNL/fix/skip-objectservice-misma…
rubenvdlinde Apr 18, 2026
aee27a0
test: skip 5 AgendaServiceTest cases broken by ObjectService stub/rea…
rubenvdlinde Apr 19, 2026
5a6e97e
Merge pull request #92 from ConductionNL/fix/skip-agenda-service-tests
rubenvdlinde Apr 19, 2026
0527697
chore(spec): merge p2-meeting-management-core-t3 [auto] (#85)
rubenvdlinde Apr 19, 2026
6b55af6
chore(spec): merge p2-motion-and-voting-other-t2 [auto] (#86)
rubenvdlinde Apr 19, 2026
eafb86c
chore(spec): merge p2-motion-and-voting-other-t3 [auto] (#87)
rubenvdlinde Apr 19, 2026
02de4c5
chore(spec): merge p3-document-management [auto] (#88)
rubenvdlinde Apr 19, 2026
708f816
chore(spec): merge p3-governance-bodies [auto] (#89)
rubenvdlinde Apr 19, 2026
c631606
chore(spec): merge p2-meeting-management-core-t2 (#93)
rubenvdlinde Apr 19, 2026
66c07f1
chore(spec): merge p2-meeting-management-other-t1 (#94)
rubenvdlinde Apr 19, 2026
f625215
chore(spec): merge p2-meeting-management-other-t2 (#95)
rubenvdlinde Apr 19, 2026
c7e7d21
chore(spec): merge p2-minutes-and-decisions (#96)
rubenvdlinde Apr 19, 2026
b9af4fe
chore(spec): merge p2-minutes-and-decisions-core-t2 (#97)
rubenvdlinde Apr 19, 2026
6906d04
chore(spec): merge p2-minutes-and-decisions-core-t3 (#98)
rubenvdlinde Apr 19, 2026
550b564
chore(spec): merge p2-minutes-and-decisions-other-t1 (#99)
rubenvdlinde Apr 19, 2026
2488303
chore(spec): merge p2-minutes-and-decisions-other-t2 (#100)
rubenvdlinde Apr 19, 2026
82396c7
chore(spec): merge p2-motion-and-voting (#101)
rubenvdlinde Apr 19, 2026
64bd6e9
chore(spec): merge p2-motion-and-voting-core-t1 (#102)
rubenvdlinde Apr 19, 2026
eb05f34
chore(spec): merge p2-motion-and-voting-core-t2 (#103)
rubenvdlinde Apr 19, 2026
6a83279
chore(spec): merge p2-motion-and-voting-core-t3 (#104)
rubenvdlinde Apr 19, 2026
fc69396
chore(spec): merge p2-motion-and-voting-other-t1 (#105)
rubenvdlinde Apr 19, 2026
c263705
chore(spec): merge p3-citizen-participation (#106)
rubenvdlinde Apr 19, 2026
7a5bc44
chore(spec): merge p4-integration (#107)
rubenvdlinde Apr 19, 2026
0dd41c6
chore(spec): merge p4-reporting-and-analytics (#108)
rubenvdlinde Apr 19, 2026
5416219
chore(spec): merge p4-standards-hardening (#109)
rubenvdlinde Apr 19, 2026
a773401
chore: build result (#71)
rubenvdlinde Apr 19, 2026
b2b5e0f
chore: build result (#72)
rubenvdlinde Apr 19, 2026
b3b6867
fix(openspec): link p2 umbrella specs to their already-merged GitHub …
rubenvdlinde Apr 19, 2026
a91e895
Merge pull request #112 from ConductionNL/fix/hydra-json-issue-linkage
rubenvdlinde Apr 19, 2026
88be0a4
chore: build result (#44)
rubenvdlinde Apr 19, 2026
9b5062c
fix(openspec): link 3 more p2 tier specs to their GitHub issues
rubenvdlinde Apr 19, 2026
6d47a3d
Merge pull request #114 from ConductionNL/fix/tier-spec-linkage
rubenvdlinde Apr 19, 2026
2a11c84
chore: drop stale .claude/openspec/architecture/ — org ADRs live in h…
rubenvdlinde Apr 19, 2026
23e27cb
chore: build result (#73)
rubenvdlinde Apr 19, 2026
8281172
chore: build result (#73)
rubenvdlinde Apr 19, 2026
eeaee86
feat(t2): Implement Minutes and Decisions T2 features - notification …
Apr 19, 2026
5fca2de
feat(t2): Implement frontend for notification subscriptions, version …
Apr 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
263 changes: 263 additions & 0 deletions .claude/skills/app-apply/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,263 @@
---
name: app-apply
description: "Apply openspec/app-config.json changes to the actual Nextcloud app files — applies configuration decisions made in app-explore back into the codebase"
metadata:
category: Workflow
tags: [workflow, app-lifecycle, apply, sync, configuration]
---

# App Apply — Apply Configuration to App Files

Reads `openspec/app-config.json` and compares it against the current state of the app files. Shows a diff of what would change and applies approved changes.

This is the counterpart to `/app-explore`. Explore changes the config; apply pushes the config into code.

**Scope:** App Apply is **configuration and scaffold only**. It syncs app identity, metadata, CI settings, and basic structural files — not feature code. Specifically:

✅ **In scope:** `appinfo/info.xml`, CI/CD workflow parameters, PHP namespaces and app ID constants, `composer.json`/`package.json` names, `webpack.config.js` app ID, `src/App.vue` OpenRegister gate, `lib/AppInfo/Application.php` repair step wiring, `lib/Service/SettingsService.php` OpenRegister config loading, `README.md` header and goal sections.

❌ **Out of scope:** Feature implementation, business logic, Vue components, PHP controllers, OpenRegister schemas. Those belong in OpenSpec changes — use `/opsx-ff {feature-name}` to implement planned features.

**Input**: Optional app ID or directory name after `/app-apply`. If omitted, **always ask** — never infer from conversation context.

---

## Step 0: Select App

**ALWAYS run this step.** Never assume the app based on conversation context, prior commands, or session history — even if an app was used in a previous `/app:*` command this session. Always ask explicitly.

Scan `apps-extra/` for directories containing an `openspec/app-config.json`:

```bash
find apps-extra -maxdepth 3 -name "app-config.json" | sort
```

Present the list and ask using AskUserQuestion. If an app was mentioned or used in a previous `/app:*` command earlier in this conversation, list it first with a **(used earlier this session)** annotation — but still require the user to explicitly confirm it.

**"Which app do you want to apply config changes to?"**

Store as `{APP_DIR}`.

---

## Step 0b: Check for Prior app-verify Output

Before loading config, scan the current conversation history for any output from `/app-verify` (or `app-verify`) for the selected app.

**If a prior app-verify was found:**

Extract the issues it reported — drift items, mismatches, missing files, or anything flagged as incorrect. Hold these as `{VERIFY_FINDINGS}`.

Display a notice to the user:

```
ℹ️ app-verify was run earlier in this conversation for {APP_DIR}.
It flagged the following issues that app-apply will address:

• {finding 1}
• {finding 2}
...

These will be included in the change summary below. You will still be asked to approve each change.
```

These findings will be cross-referenced in Step 2 — any drift item reported by app-verify is treated as a confirmed pending change, even if the file comparison in Step 2 would otherwise have missed it (e.g. subtle formatting differences or values that are technically present but structurally wrong).

**If no prior app-verify output was found in conversation history:**

Continue silently — no notice needed.

---

## Step 1: Load Configuration

Read `apps-extra/{APP_DIR}/openspec/app-config.json`. Parse and store all values:

- `{APP_ID}` — id
- `{APP_NAME}` — name
- `{APP_NAMESPACE}` — namespace
- `{APP_SUMMARY}` — summary
- `{APP_GOAL}` — goal
- `{APP_CATEGORY}` — category
- `{APP_VERSION}` — version
- `{REQUIRES_OPENREGISTER}` — dependencies.requiresOpenRegister
- `{CI_ADDITIONAL_APPS}` — dependencies.additionalCiApps
- `{PHP_VERSIONS}` — cicd.phpVersions
- `{NC_REFS}` — cicd.nextcloudRefs
- `{ENABLE_NEWMAN}` — cicd.enableNewman

Derive name variants if not already in config:
- `{APP_ID_SNAKE}` — replace `-` with `_` in `{APP_ID}`

---

## Step 2: Compare Configuration Against App Files

Read each tracked file and check whether the current values match the config. Build a list of **pending changes**.

If `{VERIFY_FINDINGS}` were captured in Step 0b, merge them into the pending changes list — treat each finding as a confirmed change even if the raw file comparison looks clean. Do not deduplicate silently: if verify flagged something the file comparison also catches, surface it once with a `(also flagged by app-verify)` annotation.

### Tracked files and what to check

**`appinfo/info.xml`**
- `<id>` matches `{APP_ID}`
- `<name lang="en">` matches `{APP_NAME}`
- `<summary lang="en">` matches `{APP_SUMMARY}`
- `<description lang="en">` contains `{APP_GOAL}` (first paragraph)
- `<namespace>` matches `{APP_NAMESPACE}`
- `<category>` matches `{APP_CATEGORY}`
- Navigation `<route>` uses correct app ID
- `<repository>`, `<bugs>`, `<website>`, `<discussion>` use correct GitHub URLs
- `<repair-steps>` block with `InitializeSettings` for both `<install>` and `<post-migration>` is present when `{REQUIRES_OPENREGISTER}` is true; absent when false

**`.github/workflows/code-quality.yml`**
- `app-name` matches `{APP_ID}`
- `additional-apps` matches `{CI_ADDITIONAL_APPS}` (empty array = line removed)
- `php-version` matches first entry in `{PHP_VERSIONS}`
- `php-test-versions` matches `{PHP_VERSIONS}`
- `nextcloud-test-refs` matches `{NC_REFS}`
- `enable-newman` matches `{ENABLE_NEWMAN}`

**`.github/workflows/release-beta.yml`**
- `app-name` matches `{APP_ID}`

**`.github/workflows/release-stable.yml`**
- `app-name` matches `{APP_ID}`

**`.github/workflows/issue-triage.yml`**
- `app-name` matches `{APP_ID}`

**`.github/workflows/openspec-sync.yml`**
- `app-name` matches `{APP_ID}`

**`composer.json`**
- `"name"` matches `conductionnl/{APP_ID}`
- PSR-4 namespace matches `OCA\\{APP_NAMESPACE}\\`

**`package.json`**
- `"name"` matches `{APP_ID}`

**`webpack.config.js`**
- `appId` constant matches `{APP_ID}`

**`lib/AppInfo/Application.php`**
- `APP_ID` constant matches `{APP_ID}`
- Namespace matches `OCA\{APP_NAMESPACE}\AppInfo`
- `use OCA\{APP_NAMESPACE}\Repair\InitializeSettings` import is absent — repair step registration is handled declaratively via `info.xml`, not PHP
- `$context->registerRepairStep(InitializeSettings::class)` call is absent (same reason)

**`lib/Service/SettingsService.php`** *(only when `{REQUIRES_OPENREGISTER}` is true)*
- `loadConfiguration()` reads `{APP_ID_SNAKE}_register.json` explicitly before calling `importFromApp` — includes file-exists, file_get_contents, and json_decode error guards
- `importFromApp` call passes `data: $configData, version: $configVersion` in addition to `appId` and `force`

**`src/App.vue`**
- OpenRegister gate present/absent based on `{REQUIRES_OPENREGISTER}`

**`README.md`**
- Title matches `{APP_NAME}`
- Goal section contains `{APP_GOAL}`

---

## Step 3: Present Change Summary

Display a clear summary of all pending changes found:

```
Changes pending for apps-extra/{APP_DIR}:

appinfo/info.xml
• <summary> "Old summary" → "{APP_SUMMARY}"
• <category> "tools" → "{APP_CATEGORY}"

.github/workflows/code-quality.yml
• additional-apps — remove (OpenRegister not required)

README.md
• Goal section — update with current app goal

No changes needed:
• composer.json ✓
• package.json ✓
• webpack.config.js ✓
• lib/AppInfo/Application.php ✓
```

If there are no pending changes, report:

```
apps-extra/{APP_DIR} is already in sync with openspec/app-config.json.
No changes needed.
```

And stop here.

---

## Step 4: Confirm Before Applying

Ask the user using AskUserQuestion:

**"Apply all {N} changes? Or select specific files to update?"**
- **Apply all** → proceed with all changes
- **Select files** → list files and let the user pick which ones to apply
- **Cancel** → stop without changes

---

## Step 5: Apply Approved Changes

For each approved file, read the file first, then apply changes using the Edit tool. **Never use sed or awk.**

After all files are updated, update `openspec/app-config.json`:
- Set `"updatedAt"` to today's date

---

## Step 6: Run Quality Check (Optional)

Ask the user using AskUserQuestion:

**"Run `composer check:strict` to verify the PHP changes are clean?"**

If yes:
```bash
cd apps-extra/{APP_DIR} && composer check:strict
```

Report any failures and offer to fix them before the user commits.

---

## Step 7: Report

```
Apply complete for apps-extra/{APP_DIR}

Applied changes:
✓ {file1} — {what changed}
✓ {file2} — {what changed}

Skipped:
- {file3} (no change needed)

openspec/app-config.json → updatedAt set to {TODAY}

Next steps:
• Commit: cd apps-extra/{APP_DIR} && git add -A && git commit -m "Apply app config changes"
• Verify: /app-verify {APP_ID}
• Continue exploring: /app-explore {APP_ID}
• Start implementing: feature specs are in openspec/specs/ — use /opsx-ff {feature-name} to build
```

---

## Guardrails

- **Never apply without confirmation** — always show the diff summary first
- **Never overwrite custom code** — only update the specific tracked values (names, IDs, metadata), not logic
- **Never implement features** — if the user asks to add feature code, direct them to `/opsx-ff {feature-name}` instead
- **Never use sed/awk** — use the Edit tool only
- **Read before editing** — always read the current file content before making changes
- **Preserve manual changes** — if a file has custom content beyond what the template provides, preserve it
- **Scope reminder** — if a user asks to make a change that is out of scope (e.g., "add a new settings field", "create an API endpoint"), explain the scope and suggest the right tool (`/app-explore` to define it, `/opsx-ff` to implement it)
63 changes: 63 additions & 0 deletions .claude/skills/app-apply/evals/evals.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
{
"skill": "app-apply",
"version": "1.0.0",
"created": "2026-04-07",
"scenarios": [
{
"id": "apply-name-change",
"description": "App name changed in app-config.json — should update info.xml, composer.json, README",
"prompt": "Run /app-apply on openregister after changing the app name in app-config.json",
"setup": "app-config.json name field has been updated; info.xml/composer.json/README still have the old name",
"expected": "Should show a diff preview of all files that will change, ask for confirmation, then apply",
"assertions": [
"Shows a diff summary BEFORE applying any changes",
"Asks for explicit user confirmation before writing files",
"Updates appinfo/info.xml <name> element",
"Updates composer.json description field",
"Updates README.md title/header",
"Does NOT modify business logic, controllers, or Vue components (out of scope)"
]
},
{
"id": "apply-openregister-enable",
"description": "OpenRegister dependency toggled from false to true in app-config.json",
"prompt": "Run /app-apply after enabling requiresOpenRegister in app-config.json",
"setup": "app-config.json dependencies.requiresOpenRegister changed from false to true",
"expected": "Should add OpenRegister wiring (repair steps in info.xml, SettingsService pattern)",
"assertions": [
"Adds repair-steps block to appinfo/info.xml",
"Wires SettingsService.php with explicit config file reading pattern",
"Removes PHP-based repair step registration from Application.php (replaced by declarative)",
"Shows diff before applying"
]
},
{
"id": "apply-no-changes",
"description": "app-config.json has not changed — nothing to apply",
"prompt": "Run /app-apply when the app files already match app-config.json perfectly",
"setup": "All tracked files already match app-config.json values",
"expected": "Should detect no changes needed and report cleanly",
"assertions": [
"Reports that no changes are needed",
"Does NOT modify any files",
"Suggests running /app-verify to confirm (or states already in sync)"
]
}
],
"trigger_tests": {
"should_trigger": [
"apply the app config",
"push config changes to the codebase",
"sync app-config.json to the app files",
"run app apply on opencatalogi",
"apply configuration changes"
],
"should_not_trigger": [
"verify the app config",
"explore app features",
"create a new app",
"apply the OpenSpec change",
"implement the planned feature"
]
}
}
Loading
Loading