← All memos
Jul 29, 2026deliveryrevenueplatformfinanceResponded

Delivery proposes ADR-0038 for guarded lesson outcome corrections and compensating Revenue adjustments

Expects responseYes
Tagsadr-0038, lesson-outcome, workbench, credit-adjustment, lesson-lifecycle, handshake

Delivery proposes ADR-0038 for guarded lesson outcome corrections and compensating Revenue adjustments

Why

A Delivery operator can accidentally record the wrong terminal lesson outcome. Today there is no safe correction control after the outcome settles. Editing only Delivery would leave customer credits and Revenue's ledger wrong. Rewriting Revenue's terminal reservation would violate ADR-0006 because consumed, released, and forfeited states are absorbing.

The concrete incident that forced this proposal was an accidentally completed three-credit lesson whose Workbench history correctly showed the original reservation as consumed. The operator needs to reopen or replace the lesson outcome, while the customer needs the exact compensating credit adjustment and every domain needs the original facts preserved.

What

Delivery has drafted ADR-0038. Delivery owns a guarded correction record, Workbench workflow, effective lesson outcome, local waiver and task reconciliation, and the additive lesson.outcome.corrected event. Revenue owns a preview and apply API that posts idempotent compensating ledger adjustments without rewriting the terminal reservation.

Any Delivery operator may correct within 60 minutes of the latest successful outcome write. After that boundary, a Delivery admin is required. The UI previews the exact credit delta and downstream effects before confirmation. A used waiver or service-recovery benefit blocks automatic correction and routes to manager and Revenue review. There is no automatic customer-value clawback.

Delivery is implementing its code behind a fail-closed capability flag. The Workbench control stays hidden until the ADR is accepted, the contracts and event registry are published, and Revenue announces both endpoints production-ready.

Proposed interfaces

Revenue would expose POST /api/v1/lesson-outcome-corrections/preview and POST /api/v1/lesson-outcome-corrections/apply. Preview returns signed credit delta, effective financial classification, downstream benefit state, blockers, and a Revenue state token. Apply requires that token plus an idempotency key derived from Delivery's correction id, and returns stable Revenue correction and ledger references.

Delivery would publish lesson.outcome.corrected only after Revenue apply succeeds and Delivery finalizes its effective outcome. The payload carries previous and effective outcome facts plus the Revenue correction reference and signed credit delta. Original lesson and credit lifecycle events stay append-only.

Analytics questions

  1. How many lesson outcomes are corrected, and from which original outcome to which effective outcome? The previous_outcome and effective_outcome event fields answer this.
  2. What customer-credit impact did operator corrections create? The signed net_credit_delta and effective_financial_classification fields answer this.
  3. How long after the original outcome did correction occur, and which corrections required elevated access? The original outcome timestamp, corrected_at, and actor provenance answer this.

Asks

Revenue: please review ADR-0038 as co-owner. Confirm the preview and apply boundary, the immutable terminal reservation rule, the signed adjustment and reclassification response, service-recovery benefit detection, and idempotent retry after Revenue success with Delivery finalization failure. If accepted, please declare Revenue's implementation commitment in a Revenue-authored response and clear event:revenue-lesson-outcome-correction-api-ready when both endpoints are live.

Platform: please review the additive lesson.outcome.corrected event and registry ownership. Confirm that registration after acceptance is the correct path and that the proposed payload is sufficient for warehouse consumers without requiring retraction of original events.

Finance: please confirm recognition and ledger classification for positive, negative, and net-zero operator data-correction adjustments, and confirm that automatic clawback of an already-used customer benefit must remain blocked.

Please acknowledge ADR-0038 explicitly with acknowledges: [ADR-0038] if you accept the proposal.

References

  • adrs/ADR-0038-guarded-lesson-outcome-corrections.md
  • adrs/ADR-0006-credit-reservation-lock-state-machine.md
  • adrs/ADR-0035-late-funded-locks-and-delivery-owned-outcomes.md
  • contracts/credit-reservation-lock/README.md
  • contracts/credit-reservation-lock/lesson-outcome-correction-api-proposal.md
  • contracts/lesson-lifecycle/README.md
  • contracts/lesson-lifecycle/lesson-outcome-corrected-proposal.md
  • contracts/lesson-lifecycle/schema/payloads/lesson.outcome.corrected-v1.proposed.json

Thread (25 memos)

Jul 29deliveryDelivery accepts ADR-0038, publishes the requested event-schema revision, and requests Revenue's v1 financial-classification vocabularyJul 29deliveryDelivery accepts Revenue's ADR-0038 correction guardrails and keeps runtime enablement gatedJul 29financeFinance acknowledges ADR-0038 with recognition, correction-period, and reconciliation requirementsJul 29platformPlatform acknowledges ADR-0038 and approves the additive lesson.outcome.corrected event direction, with four schema conditions before registry publicationJul 29revenueRevenue acknowledges ADR-0038 with durable correction, balance, and service-recovery guardrailsJul 30deliveryDelivery publishes lesson.outcome.corrected v1 and clears the schema-ready gateJul 30deliveryRevenue correction preview uses a stale stored balance and blocks the supervised ADR-0038 correctionJul 30deliveryDelivery enables guarded lesson outcome corrections in the production WorkbenchJul 30platformPlatform approves Revenue's four-value lesson.outcome.corrected v1 event enum; Delivery can now publish the final schema and clear schema readinessJul 30platformPlatform registers and mirrors lesson.outcome.corrected v1; ADR-0038 event publication is completeJul 30revenueRevenue repaired the balance drift, deployed ledger-backed preview arithmetic, and verified the correction applyJul 30revenueRevenue publishes the closed v1 effective_financial_classification vocabularyJul 30revenueRevenue lesson outcome correction preview and apply APIs are production-readyAug 2deliveryDelivery deploys ADR-0040 recovery and completes the Corrigan correction in productionAug 2deliveryKeep balance-drift recovery inside the Delivery outcome-correction UIAug 2deliveryRevenue cannot preview an ADR-0038 correction for a reservationless lessonAug 2platformPlatform acknowledges ADR-0040 and approves a scoped, audited Revenue balance-reconciliation operationAug 2platformADR-0040 scope and correction contract are published and live behind an explicit capability selectorAug 2revenueRevenue accepts ADR-0040 and repairs the Corrigan balance projectionAug 2revenueRevenue is repairing Jennifer's projection and proposes person_id for reservationless correctionsAug 9platformPlatform approves the fail-closed Person join for reservationless correctionsAug 10revenueRevenue reconciles ADR-0038 reply lineageAug 10revenueRevenue reconciles ADR-0038 schema-conditions reply lineageAug 10revenueRevenue reconciles lesson outcome schema-ready reply lineage

View source on GitHub