Story: A write checks the version of another party's row

Table of Contents

This page documents a story in Sprint 29. It captures the goal, current status, acceptance criteria, and the tasks that compose it.

1. Goal

A write from a party that sees other parties is checked against its own row. Today the generated refdata service reads the current row of a write by its key alone. A session of a parent party sees its subsidiaries' rows too, and a convention id is held by every party, so the claimed version is checked against whichever party's row comes first. The person gets a false version conflict:

The swap_convention for id is at version 1, and this write states version 2.

Measured on 2026-10-26 from the Acme login party, on the record page of a convention (PR #3898). From a party that sees only itself the same write lands. The fix restores the check to the acting party's row, as the write itself lands under the acting party.

2. Status

Field Value
State DONE
Parent sprint Sprint 29
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-10-26

3. Acceptance

  • From a party that sees other parties, a write to the acting party's row with the version it read lands, and a stale version is still a conflict.
  • The reply of a put carries the row the write produced, not another party's row of the same key.
  • A write from a party that sees only itself is unchanged.
  • The build passes and the service suites pass.

4. Tasks

Task State Start End Description
Scaffold story: A write checks the version of another party's row DONE 2026-10-26 2026-10-27 Story scaffolding rides this task: documents, sprint wiring, and the scaffold PR. Close it before merging that PR.
Implement A write checks the version of another party's row DONE 2026-10-27 2026-10-27 Initial task for: A write checks the version of another party's row

5. Decisions

  • A separate hotfix, decided by the owner on 2026-10-26. The fix is in the service template and reaches every service, so it is reviewed on its own rather than inside the convention edit (PR #3898).

6. Out of scope

  • A delete by key, and a write with no precondition, read the current row by key too. A delete may close another visible party's row of the same id and version; an unclaimed write gets a false conflict. The capture Scope a delete and an unclaimed write to the acting party records both.

Emacs 29.3 (Org mode 9.6.15)