# Step 0 dependency amendment — approved util completion

**Date:** 2026-08-19  
**Status:** Canonical amendment to `STEP-0-PREPARATION-DEPENDENCIES.md`.  
**Upstream implementation:** `platform-modules/mod` PR #146.

## Purpose

AWP must begin implementation only after the generic Platform capabilities already approved for its foundation are implemented upstream. This amendment supersedes the earlier AWP-specific `DEFER` dispositions for DEP-006 and DEP-008 after the decision to complete every approved capability before AWP starts.

Rejected capabilities remain rejected. In particular, DEP-007 `@platform-modules/util/id` remains rejected as a rename-only wrapper around native `crypto.randomUUID()`.

## Updated dependency dispositions

| ID | Dependency | Updated disposition | AWP boundary |
|---|---|---|---|
| DEP-004 | `@platform-modules/util/config` | **MOD PR #146 — implemented; publish/install verification remains** | typed injected-env schema evaluation |
| DEP-005 | `@platform-modules/util/logger` | **MOD PR #146 — implemented; publish/install verification remains** | structured logger normalization/filtering/context |
| DEP-006 | `@platform-modules/util/error-reporter` | **MOD PR #146 — implemented; publish/install verification remains** | generic JSON-safe error/context normalization + pluggable transport isolation; vendor transport and AWP incident policy remain outside |
| DEP-007 | `@platform-modules/util/id` | **REJECTED — unchanged** | native UUID when sufficient; typed/prefixed/domain identity policy remains AWP-owned |
| DEP-008 | `@platform-modules/util/idempotency` | **MOD PR #146 — implemented; publish/install verification remains** | generic at-least-once claim/TTL/stale-reclaim/release only; durable command identity/result/replay/conflict semantics remain AWP-owned |
| DEP-009 | `@platform-modules/realtime/client` | **MOD PR #146 — implemented; publish/install verification remains** | generic browser connection lifecycle only; AWP event/scoping/domain semantics remain AWP-owned |

## `util/error-reporter` frozen boundary

AWP may consume the Platform reporter seam without selecting a vendor during Step 0. The Platform leaf owns:

```text
unknown error -> JSON-safe normalized event
base + call context
pluggable transport invocation
transport-failure isolation
```

It does not own:

```text
Sentry / Logpush / OpenTelemetry SDK integration
network retry / batching / persistence
sampling / alert policy
AWP Incident or Attention semantics
```

A concrete observability transport can therefore be added later as an adapter without changing AWP's foundation logging/error boundary.

## `util/idempotency` frozen boundary

The upstream leaf uses a host-supplied **atomic compare-and-swap store contract**. It does not synthesize a distributed claim from non-atomic cache `get` + `set` operations.

Platform owns:

```text
claim once
TTL
stale/expired reclaim
contention retry / fail-closed exhaustion
ownership-safe release-on-failure
```

AWP still owns:

```text
CommandId meaning
command/result durability
transaction boundaries
replay result behavior
business conflict policy
workflow/agent execution semantics
```

The Platform leaf is duplicate-suppression infrastructure, not AWP's command model.

## Testing seams

PR #146 also exports in-memory consumer test seams:

```text
@platform-modules/util/error-reporter/testing
@platform-modules/util/idempotency/testing
```

These are test doubles only. The idempotency memory store is not a production distributed store.

## Step 0 gate amendment

Before AWP implementation begins, the Platform prerequisite gate for these capabilities is now:

```text
mod PR #146 final gate green
-> PR merged
-> packages published
-> AWP exact versions pinned
-> package-name import/install smoke passes
-> begin consuming Step 0 slices
```

This amendment changes no AWP application code and does not move AWP domain semantics into Platform.
