---
id: JNY-PFM-MTD-002
title: Maintain a boat and inspect its changes
feature: FEAT-PFM-MTD-05
product_area: platform
module: metadata
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: observed
supersedes:
  - PLAT-M5-S04
  - PLAT-M5-S06
  - PLAT-M5-S07
  - PLAT-M5-S10
  - PLAT-M5-S11
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
actor: ACT-PFM-008
goal: 'Edit a boat alongside another registrar, change ownership and lifecycle, and inspect the recorded authors.'
capabilities:
  - CAP-PFM-MTD-012
  - CAP-PFM-MTD-013
  - CAP-PFM-MTD-014
  - CAP-PFM-MTD-018
  - CAP-PFM-MTD-009
screens:
  - '/console/{tenantId}/objects/{objectKey}/{recordId}'
  - '/console/{tenantId}/objects/{objectKey}/{recordId}/edit'
steps:
  - 'n': 1
    surface: '/console/{tenantId}/objects/{objectKey}/{recordId}/edit'
    action: 'Save Miss Daisy as insured without Survey Due, then supply the missing date.'
    capability: CAP-PFM-MTD-012
    expected: The unmet condition prevents the first save and the corrected values save.
    provenance: test
    source: >-
      react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S04.spec.ts#PLAT-M5-S04: Survey Due
      is required only when Insured is ticked
  - 'n': 2
    surface: '/console/{tenantId}/objects/{objectKey}/{recordId}/edit'
    action: Have two registrars submit edits from the same version.
    capability: CAP-PFM-MTD-012
    expected: The stale editor receives a conflict and retains unsaved changes.
    provenance: test
    source: >-
      react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S06.spec.ts#PLAT-M5-S06: two
      registrars edit one boat; the second is told and nothing is lost
  - 'n': 3
    surface: '/console/{tenantId}/objects/{objectKey}/{recordId}'
    action: Move ownership from Jane Smith to Tom Jones.
    capability: CAP-PFM-MTD-018
    expected: The related boat moves between their contact cards.
    provenance: test
    source: >-
      react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S11.spec.ts#PLAT-M5-S11: changing a
      boat's owner moves it from one contact's Boats card to the other's
  - 'n': 4
    surface: '/console/{tenantId}/objects/{objectKey}/{recordId}'
    action: 'Publish, archive and restore from the boat page.'
    capability: CAP-PFM-MTD-013
    expected: The selected lifecycle operations apply.
    provenance: test
    source: >-
      react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S07.spec.ts#PLAT-M5-S07: publish,
      archive and restore from the boat page; History names each revision and who made it
  - 'n': 5
    surface: listCustomObjectRecordHistory
    action: Inspect the History drawer.
    capability: CAP-PFM-MTD-014
    expected: Revisions identify their changes and authors.
    provenance: test
    source: >-
      react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S07.spec.ts#PLAT-M5-S07: publish,
      archive and restore from the boat page; History names each revision and who made it
alternates:
  - from_step: 4
    condition: The administrator archives the entire Boat category.
    path: Its Marina entry disappears.
    outcome: A retained direct link opens the boat without write controls.
    provenance: test
    source: >-
      react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S10.spec.ts#PLAT-M5-S10: archiving
      Boat hides it from Marina; an old link still opens the boat, read-only
failures:
  - from_step: 4
    condition: A caller lacks the record delete grant.
    path: The archive route declares the object-scoped delete requirement.
    outcome: This permission configuration does not authorize archival.
    provenance: test
    source: >-
      services-platform:modules/custom-objects/tests/unit/custom-object-permission-keys.spec.ts#requires one
      key per route, each a console route, the health route public, every record route scoped to its object
rules_in_play:
  - BR-CAP-PFM-MTD-012-04
  - BR-CAP-PFM-MTD-012-11
  - BR-CAP-PFM-MTD-013-01
  - BR-CAP-PFM-MTD-013-02
  - BR-CAP-PFM-MTD-011-04
  - BR-CAP-PFM-MTD-014-01
  - BR-CAP-PFM-MTD-009-08
assertions:
  - id: AS-JNY-PFM-MTD-002-01
    statement: A stale editor cannot silently replace a newer committed edit.
    provenance: test
    source: >-
      react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S06.spec.ts#PLAT-M5-S06: two
      registrars edit one boat; the second is told and nothing is lost
  - id: AS-JNY-PFM-MTD-002-02
    statement: The tested publication and archival changes retain author information in history.
    provenance: test
    source: >-
      react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S07.spec.ts#PLAT-M5-S07: publish,
      archive and restore from the boat page; History names each revision and who made it
  - id: AS-JNY-PFM-MTD-002-03
    statement: Archived-object records remain readable through existing links while writes are unavailable.
    provenance: test
    source: >-
      react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S10.spec.ts#PLAT-M5-S10: archiving
      Boat hides it from Marina; an old link still opens the boat, read-only
e2e_policy: required
e2e_reason: >-
  The connected work includes console presentation and interactions across record surfaces. Browser acceptance
  complements service proof for those visible outcomes.
proved_by: []
---

# Maintain a boat and inspect its changes

Edit a boat alongside another registrar, change ownership and lifecycle, and inspect the recorded authors.

## Journey

The steps identify the participating capabilities and their expected outcomes. Alternatives and refusals retain their own evidence so a successful route does not imply that every branch has been demonstrated.
