Name no values for ui-uri-type The names are agreed between a workflow module and its cockpit user interface. VanillaBP knows none of them. Whether a page is opened as it is depends on ui-uri-path: an address starting with http:// or https:// is opened unchanged, every other path gets the proxy route in front. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CUpgqpc9KNeUtRSheAYiAg (cherry picked from commit 1829ef5f1524a69088efaa91da2fc60184128897)
Configuration: say why an adapter key of the cockpit ends a Quarkus start (1480) No Quarkus configuration mapping declares vanillabp.adapters.<id>.cockpit.*, and a key below vanillabp which no mapping declares ends the startup. Spring Boot does not check for unknown keys, so there the key is ignored. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BMPbYLKJQXaj22EoiKBWCR
Plain English for the wiki text written since 2026-09-15 Shorter sentences and common words in the pages which changed after story 1240. Headings, keys, code and links stay as they were. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BMPbYLKJQXaj22EoiKBWCR
A deployed version needs a details provider which covers it Story 1476: a user task or a process whose providers all miss the version this start deployed ends the start, as a @WorkflowTask method does. A task of a called process counts in the version of its own model. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BMPbYLKJQXaj22EoiKBWCR
The user interfaces and dev shells leave the cockpit repository Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BMPbYLKJQXaj22EoiKBWCR
Say how the cockpit treats a user task of a called process Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BMPbYLKJQXaj22EoiKBWCR
docs: the cockpit jars of 0.9.0 carry no user interface Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BMPbYLKJQXaj22EoiKBWCR
Name the snapshot repository of Maven Central for the runnable jar Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BMPbYLKJQXaj22EoiKBWCR
docs: a list is filtered by the same paths it is sorted by Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013W9gz28Fcj7ktuiY1j5hS9
docs: a sort path below details may hold a dash Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013W9gz28Fcj7ktuiY1j5hS9
docs: the paths a list is sorted by, and the limit of sort indexes Configuration names business-cockpit.mongodb.sort-indexes-per-collection. The page about columns says which paths below details can be sorted by. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013W9gz28Fcj7ktuiY1j5hS9
docs: a user task which names nobody takes the names of a later report Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013W9gz28Fcj7ktuiY1j5hS9
docs: the report which creates a user task says who sees it Organizing user tasks, Security and Migrating from version 1 now say that the assignee, the candidates and the excluded users are set by the report which creates the task, that only the cockpit changes the assignee and candidate users afterwards, and that admittedUsers is read from every report. Handing work to others means ending the task and entering it again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013W9gz28Fcj7ktuiY1j5hS9
docs: drop DetailCharacteristics from the reporting page The SPI no longer has DetailCharacteristics or a way to set them. The cockpit never received them, so the paragraph promised something that did not happen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013W9gz28Fcj7ktuiY1j5hS9
Security: an own guiHttpSecurity keeps the renewal filter Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013W9gz28Fcj7ktuiY1j5hS9
Security, Configuration: a login is renewed while it is used Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013W9gz28Fcj7ktuiY1j5hS9
docs(wiki): a live update reaches only the browsers it concerns Security gets a section on who gets which live update: the rule of the lists, the memory of what a tab shows, the reload, and a stream which ends with its login. Configuration lists the two new keys of gui-sse, and Architecture says how the filter reads MongoDB once per tick. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKS6QGVrHPLN1gPhyW6cw9
docs(wiki): a key with a dot in the business data The cockpit server can now store a key of `details` which holds a dot, once `business-cockpit.mongodb.map-key-dot-replacement` is set. The configuration page names the key, its default, both costs and the values which stop the start. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CxWZ2MgpVoAAzjeYfGqwv4
docs(wiki): ui-uri-type is read by the user interface, not the cockpit Story 1413. The cockpit carries the value and never looks at it, so the page about forms says that a value is required, that the shipped user interface knows two of them, and that ui-uri-path is a path which the user interface turns into an address. The page about customizing says a user interface of your own may agree on a third value with the modules it loads. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TKoKozpbEt8AazDKUwDcSg
docs(wiki): the smallest configuration names an initiator source A module which reports to the cockpit does not start without initiator-source, so an example which leaves it out is an example which does not work. It is the only key on this page with no default, and the page now says what each of the two values means. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DgjUTvgpirJN5h3qXssjcy
docs(wiki): the user interface is described, not delivered Customizing the user interface told the reader that writing down what a cockpit user interface has to do was planned and did not exist. It exists now, in this repository under skills/business-cockpit-user-interface, so the page says what each of the two ways gets you: copying the React application, or building one of your own against the description. The page now names the three boundaries a user interface sits on, with a diagram, and links Security, User task forms and status sites, Building a custom Business Cockpit and Developing UI components locally for each of them rather than repeating any of them. It also says why the description lives in this repository and not in the wiki or in vanillabp/skills, and what is still missing: the forms stay React whichever framework a user interface is written in, and nothing checks the description against a running cockpit yet. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DgjUTvgpirJN5h3qXssjcy
docs(wiki): the collecting interval works, so it is a row like the others The page warned that business-cockpit.gui-sse.collecting-interval does not reach the collector. Story 1251 fixed the placeholder, so the warning goes and the key becomes a row. Two sentences say how it works together with the update interval. business-cockpit.follow-up.check-rate was documented nowhere and gets a row of its own, with what a longer rate costs and what a restart loses. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DgjUTvgpirJN5h3qXssjcy
docs(wiki): an empty answer of getUserTask is silence and not an ending The page said getUserTask returns an empty Optional where the engine does not know that task any more. Two of the three engines cannot promise that. Camunda 8 answers out of a searchable storage an exporter writes behind the engine, and the Process-Engine-API answers out of what the asking node was served, so a task which is wide awake reads like a task nobody knows. So the page says what empty really means and what to do with it: read it as no details right now and keep what you had. It also names the reader who gets this wrong, a REST endpoint turning the empty answer into a 404, because that is the case Stephan sees in the field. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DgjUTvgpirJN5h3qXssjcy
docs(wiki): who answers the initiator of a report The reporting page explained the initiator in three sentences, as one field among those which organize a user task. It is the one field a workflow module has to answer, so it gets a section of its own: what it means, why no workflow system and not VanillaBP itself can fill it, the key which says who answers, both of its values, and the constant for an event no user caused. The section also says where the user belongs, which is the workflow aggregate and not a ThreadLocal. The configuration page lists the key at all three levels and says that it has no default. It also says why this one key stands at the top and still means something per module: who answers is a question about code, not about an address. The migration page names it as the sixth change somebody coming from version 1 will notice, and points at the UPGRADE.md entry. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DgjUTvgpirJN5h3qXssjcy
docs(wiki): the version section points back to the adapter wikis A reader of "Which versions of your model a method serves" learns how a method picks a range of versions, but not what their own BPMS delivers as a version. That is written in the three adapter wikis. One sentence now leads there. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SbYv7QSdZEvhkM7Cr75NK3
docs(wiki): a custom cockpit sets the write concern too The delivered `application.yaml` carries `mongodb.write-concern`, and a custom cockpit inherits nothing from it. The page which lists what such an application still owes now names the key next to the virtual threads. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0174TibVeR5rFgHncP6y46oW
docs(wiki): the write concern the cockpit needs The check which warns on every start, and which ends the start on `w: 0`, was only explained in the README of the library. Somebody running the cockpit reads that warning and looks in the wiki. The running page gets a section with the value to write, where it has to be written, and what each value costs. The configuration page lists the two keys and links there. The list of what the first start tells you names the warning as the one which is about data. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0174TibVeR5rFgHncP6y46oW
docs(wiki): the version attribute of a details provider is read Two paragraphs still said the attribute is reserved and that an application which writes it does not start. Decision 24 replaced that: both details providers pick their method by the version of the deployed process, the same way a `@WorkflowTask` method is picked. The reporting page gets a section about it, with what a boundary may name, when two methods may share a task and what happens where the BPMS reports no version. The migration page says what changes for an application coming from version 1 and links there. `@WorkflowDetailsProvider` no longer has no attributes either, so the sentence saying so names `version` now. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0174TibVeR5rFgHncP6y46oW
docs(wiki): a report is built at the event, not when it is sent The cockpit adapter now puts a report together while the BPMS event is observed, and the report travels with the outbox entry. Architecture said the opposite: that an entry carries identifiers and that everything the cockpit is told is read when the entry is dispatched. Rewritten with it: the sequence diagram and the five steps, what a report says and when, and what a details provider which writes the case costs. That last one changes direction. The provider runs in the transaction of the event, so where the event reaches the application inside its own transaction there is no second writer left. Only an event of a remote engine is still reported in a transaction of its own. Reporting workflows and user tasks said the same thing about the moment the provider runs, and says the new one now. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0174TibVeR5rFgHncP6y46oW
Say why a workflow details provider asks for less The page listed the two parameters but not the reason. Somebody who writes a workflow module wonders at this very spot why the user task method may ask for more. A user task method sees the context of one task. A case has no task, no lifecycle event of that kind and no multi-instance context, and its aggregate is what says which case the method is asked about. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>