Skip to content

feat(applications): give applications a technical name - #43

Open
rubenvdlinde wants to merge 3 commits into
stack/n4-overview-extrasfrom
stack/n5-application-technical-names
Open

rubenvdlinde wants to merge 3 commits into
stack/n4-overview-extrasfrom
stack/n5-application-technical-names

Conversation

@rubenvdlinde

@rubenvdlinde rubenvdlinde commented Oct 15, 2026 •

Copy link
Copy Markdown
Collaborator

Rebuild of #29 on application pages (nextcloud#3075, see #13). Stacked on #42.

What changes

An application can get a technical name, so it opens at a readable address like /apps/tables/app/intake instead of /apps/tables/app/28.

  • Migration: tables_contexts_context gets a nullable technical_name (Version2400Date20261015120000, dated after the page model's migration). The app version moves to 2.4.0-dev.3 so installs run it.
  • Rules: lowercase letters, numbers and underscores, starting with a letter (the rule of menu items and pages), unique per owner. A malformed or taken name returns a 400. On update, an empty name removes it and leaving it out keeps it.
  • Address: /apps/tables/app/{name} opens the application. The user's own application wins over one shared with them under the same name. Because names are only unique per owner, applications of others are linked by id, both in the app navigation and on the overview. An unknown name opens the Tables start page.
  • Dialogs: the create and edit application dialogs take an optional technical name.
  • Export and import: the technical name travels with an exported scheme.
  • Menu links: a link in the application menu opens in a new tab (part of feat(applications): give applications a technical name #29's diff to the shell).
  • API: technicalName is added to the context response and to the create, update and import scheme endpoints (OpenAPI and TS types regenerated).

Carried over from #29, and what changed because of pages

Tests

Nextcloud 34 container (PostgreSQL 16), one file per call:

  • tests/unit/Db/ContextMapperTechnicalNameTest.php (new, real DB): OK (4 tests, 8 assertions)
  • tests/unit/Controller/PageControllerTest.php (new): OK (4 tests, 7 assertions)
  • tests/unit/Service/ContextServiceTest.php: OK (43 tests, 129 assertions) (malformed and taken names, blank clears, absent keeps, create stores, navigation links by name only for the owner, import passes the scheme's name)
  • tests/unit/Model/ContextSchemeTest.php: OK (14 tests, 36 assertions); ContextControllerTest, ContextMapperTest, ContextSchemeServiceTest OK.
  • Playwright at 1600 x 1000, --timeout=120000: application.spec.ts with the new "An application with a technical name is opened at its readable address", context-menu.spec.ts, context-navigation.spec.ts: 15 passed. context.spec.ts (create and edit dialogs): 7 passed.
  • composer cs:check clean, psalm No errors found!, composer openapi regenerated, npm run lint 0 errors (1 inherited warning in store.js), stylelint clean.

Prepared in the Conduction fork for porting upstream by @remko48. Prepared with Claude Code.

An application can get a technical name, so it opens at a readable
address like /apps/tables/app/intake instead of /apps/tables/app/28.

- Migration: tables_contexts_context gets a nullable technical_name.
- Rules: lowercase letters, numbers and underscores, starting with a
  letter (the rule of menu items and pages), unique per owner. A
  malformed or taken name is a 400. On update, an empty name removes it
  and leaving it out keeps it.
- Address: /apps/tables/app/{name} opens the application. The user's own
  application wins over one shared with them under the same name.
  Because names are only unique per owner, applications of others are
  linked by id, in the app navigation and on the overview. An unknown
  name opens the Tables start page.
- Dialogs: the create and edit application dialogs take an optional
  technical name.
- Export and import: the technical name travels with a scheme.
- A link in the application menu opens in a new tab.

The app version moves to 2.4.0-dev.3 so installs run the migration.

Assisted-by: ClaudeCode:claude-opus-5-5
Instances on the previous application technical names branch were already on 2.4.0-dev.3 and need the bump to run the page name migrations.

Assisted-by: ClaudeCode:claude-opus-5-5
@rubenvdlinde

Copy link
Copy Markdown
Collaborator Author

Superseded by #56 (rebuilt on the nextcloud#3100 model, see #13).

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