Skip to content

Add the Signature Rejection Policy Workbench module #8688

Open

Description

@vitormattos

Part of #8685. Blocked by #8687.

Goal

Create the policy-local frontend module for Signature Rejection.

Do not change the shared Policy Workbench engine in this issue.

Backend values

Use these backend keys:

Key Values Default
rejection_enabled false, true false
rejection_behavior cancel, continue cancel
rejection_comment_mode disabled, optional, required disabled
rejection_visibility requester, participants, public requester
rejection_comment_visibility requester, participants, public requester

rejection_enabled is the parent policy.

Files

Create the module under:

src/views/Settings/PolicyWorkbench/settings/signature-rejection/

Use these existing modules as references:

  • settings/signature-flow/ for the model.ts + realDefinition.ts pattern;
  • settings/expiration-rules/ for an editor that maps several fields into one draft value;
  • settings/collect-metadata/ for a small boolean policy definition.

Do not copy policy-specific behavior from those modules. Reuse only their structure and Workbench conventions.

Expected files:

model.ts
realDefinition.ts
SignatureRejectionRuleEditor.vue

Add mirrored unit tests.

Editor fields

Show:

  • Signature rejection: enabled/disabled
  • After rejection: cancel/continue
  • Rejection comment: disabled/optional/required
  • Rejection visibility: requester/participants/public
  • Comment visibility: requester/participants/public

Use existing Nextcloud components.

Behavior

The table above documents the current backend contract. Do not create a second source of truth for capabilities.

When the effective policy state provides backend metadata such as allowedValues, use that metadata through the existing Workbench pattern. The local module is responsible for typed normalization, editor labels and compose/decompose mapping only.

Do not recreate backend authorization, inheritance, delegation or cross-policy validation rules.

In particular, do not add Vue logic that decides whether a child scope may widen visibility or weaken a required comment. The backend owns those rules and the Workbench owns generic error handling.

Tests

Cover:

  • defaults;
  • compose/decompose of all five keys;
  • every editor option;
  • values remain unchanged when another option becomes inactive;
  • summary text;
  • emitted editor value.

Done when

  • The Signature Rejection module exists.
  • The editor supports all five backend values.
  • The module uses the generic compound contract.
  • No shared Workbench file contains Signature Rejection business logic.
  • Unit tests pass.
  • npm run lint passes.
  • npm run stylelint passes.
  • npm run ts:check passes.

Good first issue

This issue is isolated to one policy module. The backend contract and generic Workbench behavior already exist. Use the neighboring policy modules as examples.

Activity

  1. added theissue type on Sep 24, 2026
  2. maia-andre commented on Oct 2, 2026

    @maia-andre
    Contributor

    I'd like to take this one, together with #8689, once #8687 lands (#8950 is in review).

    They close the chain that #8161 is waiting for, which I have already claimed, and I worked on the backend contract they consume in #8423/#8706/#8398. I saw the good first issue label, so if you'd rather keep these two for a newcomer, just say so and I'll leave them.

    For the module I'll follow the description: model.ts, realDefinition.ts and SignatureRejectionRuleEditor.vue under settings/signature-rejection/, compose/decompose of the five rejection_* keys through the generic compound contract from #8687, backend allowedValues through the existing Workbench pattern, inactive values preserved, and mirrored tests. I won't start before #8950 is merged, so I build on its final API.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Fields

    Priority

    None yet

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions