> ## Documentation Index
> Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Migration guide

## Migrate Atoti Sign-Off 6.1.22 to 6.1.23

### `sign-off.workflow.pending-approval-task-statuses` type change

SO-1122: The `sign-off.workflow.pending-approval-task-statuses` property changed type from a flat `List<String>` to a `Map<String, List<String>>` keyed by workflow type.

No action is required if the property was not overridden in your configuration. The new defaults are:

* `simple` → `[INITIATED]`
* `4-eyes` → `[PENDING]`
* `4-eyes-kpi` → `[PENDING]`

If the property was overridden, convert the flat list to the per-workflow-type map form.

Before:

```yaml theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
sign-off:
  workflow:
    pending-approval-task-statuses: [PENDING]
```

After:

```yaml theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
sign-off:
  workflow:
    pending-approval-task-statuses:
      simple: [INITIATED]
      4-eyes: [PENDING]
      4-eyes-kpi: [PENDING]
```

### `ISignOffWorkflowStatusActionManager::getPendingApprovalTaskStatuses` return type change

SO-1122: The return type of `ISignOffWorkflowStatusActionManager::getPendingApprovalTaskStatuses` changed from a `List<String>` to a `Map<String, List<String>>` keyed by workflow type, mirroring the property change above. The awaiting-approval state is workflow-type dependent (for example `PENDING` for four-eyes workflows, `INITIATED` for the simple workflow), which a single flat list cannot represent.

No action is required if you rely on the default `DefaultSignOffWorkflowStatusActionManager`.

If you implemented your own `ISignOffWorkflowStatusActionManager` to compute pending-approval statuses dynamically, update your implementation to return a map keyed by workflow type.

Before:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
@Override
public List<String> getPendingApprovalTaskStatuses() {
  return List.of("PENDING");
}
```

After:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
@Override
public Map<String, List<String>> getPendingApprovalTaskStatuses() {
  return Map.of(
      "simple", List.of("INITIATED"),
      "4-eyes", List.of("PENDING"),
      "4-eyes-kpi", List.of("PENDING"));
}
```

## Migrate Atoti Sign-Off 6.1.21 to 6.1.22

This release only shipped bug fixes and performance improvements. It does not require any migration.

## Migrate Atoti Sign-Off 6.1.20 to 6.1.21

This release only shipped bug fixes and performance improvements. It does not require any migration.

## Migrate Atoti Sign-Off 6.2.2 back to 6.1.20

<Warning>
  From version 6.1.20 onwards, Atoti Sign-Off version numbers are aligned with the Atoti Java SDK. Previously, Atoti Sign-Off used its own versioning scheme which had moved ahead of the Atoti Java SDK. The last release under the old scheme was Atoti Sign-Off 6.2.1.

  Although the version number appears to go backwards, this is not a rollback or downgrade. It reflects the realignment with the Atoti Java SDK release track.
</Warning>

Maven dependencies have also changed: update the following group IDs in your `pom.xml`:

* `com.activeviam.solutions` → `com.activeviam.modules`
* `com.activeviam.solutions.services` → `com.activeviam.modules.services`
* `com.activeviam.solutions.signoff-api` → `com.activeviam.modules.signoff-api`

### Export status poller default delay

SO-1082: The default value of `sign-off.export.initial-delay-in-milliseconds` changed from `500` to `0`, so export status polling now starts immediately. No action is required: the poller no longer depends on this delay to avoid the export status race condition. If you relied on the previous default, you can restore it explicitly in your configuration.
