Skip to content

Add nextcloud-php-app skill: from an empty directory to a released Nextcloud PHP app - #5

Merged
oleksandr-nc merged 17 commits into
mainfrom
feat/php-app-skill
Aug 21, 2026
Merged

oleksandr-nc merged 17 commits into
mainfrom
feat/php-app-skill

Conversation

@oleksandr-nc

@oleksandr-nc oleksandr-nc commented Aug 11, 2026 •

Copy link
Copy Markdown
Collaborator

A complete guide to building Nextcloud PHP apps, from an empty directory to a release tarball, with a runnable reference app and browser verification. Everything in it was executed against live Nextcloud 33, 34 and 35 instances, and then tested by four fresh agents who had only the guide: the last two built complete apps (a reading list, a team standup log) in 11 and 12 minutes each, all requirements green, and their findings are folded back in.

What is here

  • skills/nextcloud-php-app/: a seven-stage runbook (scaffold, browser, data, settings, Vue + Vite, PHPUnit + Psalm + php-cs-fixer, package and release) and a Playwright runbook.
  • assets/minimal_php_app/: an installable app that carries every stage: manifest, IBootstrap, attribute routes, template plus page script, navigation, migration + entity + QBMapper, admin settings with a full round trip (initial state out, admin-only PUT back), a plain-JavaScript frontend that works without any build and a Vue frontend behind the same template and the same tests, two PHPUnit suites (mocked controllers; real-database mapper), Psalm and php-cs-fixer configuration, a 7-test Playwright suite that passes against both frontends and on all three Nextcloud versions, and make appstore.
  • rename.sh: turns a copy into your own app, validates its inputs first and refuses to finish unless the result is clean.
  • tests/verify.py gained a slow check that installs the reference app and asserts what the runbook promises; CI gained a job that renames, schema-checks, builds, unit-tests, analyses and packages the reference app on every push.

What the agent rounds and the review changed

Rounds 1 and 2 (earlier): migrations run on re-enable, not on version bump; the migration ledger; the rename script instead of a prose recipe.

Rounds 3 and 4: the reference migration runs on the very first enable, so decide the first table before enabling; a NOT NULL column with empty default cannot be added to an existing table; the settings stage now consumes the initial state it provides; two Vite entries; NcCheckboxRadioSwitch swallows role clicks; unique indexes and REASON_UNIQUE_CONSTRAINT_VIOLATION; second users need a policy-compliant password; the Vue-first order is explicitly fine.

Multi-version testing: Nextcloud 33 renders the app menu inline (links), 34+ as a popover (menuitem); the first-run wizard modal intercepts clicks on fresh instances; both handled in the reference suite.

An adversarial review pass found no blockers and 31 corrections, all applied: the identifier limit is 63 not 30, rename.sh now survives &, |, \ and names containing "minimal", validates the namespace, and never edits itself; nextcloud/ocp is pinned to the lowest supported branch; migration ordering, the migrations:execute guard caveat and several attributions were corrected.

Two apps built by the agent rounds are left installed on the dev instance (readinglist, standupnotes) for anyone who wants to look; the reports are in /workspace/notes/nextcloud-skills/.

… UI tests

Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
…fication after agent testing

Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
…igration ledger

Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
… same template and browser tests

Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
… app

Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
… findings into the php-app skill

Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
…d it in CI

Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
…ent what the third agent round found

Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
…, second users and the Vue-first path

Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
…ardening, 63-char names, NC33 OCP surface, stale claims

Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
@oleksandr-nc
oleksandr-nc marked this pull request as ready for review August 18, 2026 10:43
@oleksandr-nc oleksandr-nc changed the title Add nextcloud-php-app skill: reference app and Playwright UI tests Add nextcloud-php-app skill: from an empty directory to a released Nextcloud PHP app Aug 18, 2026
…process narrative from the runbooks

Signed-off-by: Oleksander Piskun <oleksandr2088@icloud.com>
@oleksandr-nc
oleksandr-nc merged commit 64a856c into main Aug 21, 2026
3 checks passed
@oleksandr-nc
oleksandr-nc deleted the feat/php-app-skill branch August 21, 2026 09:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant