Discuss one product area

Product example

One change, from contract to decision.

A fictional subscription service gains pause and resume. Follow the change through all five stages, using the records Loft and its agent skills produced along the way.

Sample Co., its subscription service, its roles, and its code are fictional. The specification and its review are real Loft records, and the candidate revisions, test runs, and reconciliation records are real runs in a sample repository. The first candidate's defect was planted to show what reconciliation catches.

Loft release
1.0
Captured
October 6, 2026
Sample document
Loft Website Example

1 Author

The contract the change is built against

The governing specification after the change: the product model, its components and constraints, the architecture decision behind pause, and the shared vocabulary. Every node keeps the external ID that the other stages cite.

P-1 Subscription Service

A subscription service run by Sample Co., a fictional company. A subscriber buys one plan and is billed once per billing period. All dates are calendar dates in UTC.

This document is sample content for the askloft.ai product example. Every organization, role, and value in it is invented.

FG-1 Subscription Lifecycle

Starting, billing, and ending a subscription.

F-1 Subscribe

A subscriber starts a subscription to the plan. The plan price is fixed per billing period.

  • money movement
RQ-1 When a subscriber starts a subscription, the service shall charge the plan price on the start date.

Examples use a subscription started on 15 March 2027.

  1. AC-1 The subscription receives its first charge on 15 March 2027.
  2. AC-2 The first charge equals the plan price.
  3. AC-3 After the first charge, the subscription status is active.
  4. AC-4 A start request from a subscriber with an active subscription returns already_subscribed.
  5. AC-5 A rejected start request creates no charge.
RQ-2 When a subscription starts, the service shall set the next billing date one billing period after the start date.

A billing period is one calendar month. The billing day is the day of the month the subscription started. In a month without that day, billing falls on the last day of the month.

  1. AC-6 A subscription started on 15 March 2027 has its next billing date on 15 April 2027.
  2. AC-7 A subscription started on 31 January 2027 has its next billing date on 28 February 2027.
  3. AC-8 A subscription started on 31 January 2028 has its next billing date on 29 February 2028.
  4. AC-9 After billing on 28 February 2027, a subscription started on 31 January 2027 is next billed on 31 March 2027.

F-2 Billing

The Billing Scheduler charges each active subscription on its billing date and tracks unpaid charges.

  • money movement
RQ-3 When a billing date arrives for an active subscription, the service shall create one charge for the plan price.

An active subscription is one whose status is active. A paused subscription is not active.

  1. AC-10 On its billing date, an active subscription receives one charge equal to the plan price.
  2. AC-11 Running the billing job twice on one billing date creates one charge.
  3. AC-12 A cancelled subscription receives no charge on a later billing date.
  4. AC-13 After a charge, the next billing date advances by one billing period.
  5. AC-29 A billing date that falls inside a pause creates no charge.
RQ-4 If a charge remains unpaid 14 days after its billing date, then the service shall mark the account overdue.
  1. AC-14 A charge unpaid 14 days after its billing date marks the account overdue.
  2. AC-15 A charge unpaid 13 days after its billing date leaves the account in good standing.
  3. AC-16 A charge paid 10 days after its billing date leaves the account in good standing on day 14.
  4. AC-17 Paying the overdue charge clears the overdue mark.
  5. AC-18 Marking an account overdue leaves its subscription status unchanged.

F-3 Cancel

A subscriber ends the subscription. Service continues to the end of the period already paid for.

  • money movement
  • customer notice
RQ-5 When a subscriber cancels, the service shall end the subscription at the end of the current billing period.

Examples use a cancel request on 20 March 2027 for a subscription whose next billing date is 15 April 2027.

  1. AC-19 A subscription cancelled on 20 March 2027 stays active until 14 April 2027.
  2. AC-20 A subscription cancelled on 20 March 2027 has status cancelled from 15 April 2027.
  3. AC-21 A cancel request on 14 April 2027 ends the subscription on 14 April 2027.
  4. AC-22 Cancelling creates no refund for the current billing period.
  5. AC-23 A cancel request for a cancelled subscription returns already_cancelled.
RQ-6 When a subscriber cancels, the service shall send the subscriber one cancellation email.
  1. AC-24 A cancel request sends exactly one cancellation email.
  2. AC-25 The cancellation email states the date the subscription ends.
  3. AC-26 A rejected cancel request sends no email.

F-4 Pause and Resume

A subscriber pauses billing for a set number of whole days and resumes when the pause ends, or earlier on request.

A subscriber may pause while three conditions hold: the subscription is active, the account is in good standing, and no pause is scheduled or in progress.

  • money movement
  • customer notice
  • audit trail
RQ-8 When an eligible subscriber requests a pause, the service shall schedule the pause to start on the next billing date.

Examples use a subscription billed on the 15th of each month, with a pause requested on 10 March 2027.

  1. AC-30 The pause request returns scheduled.
  2. AC-31 The pause starts on 15 March 2027.
  3. AC-32 Until 15 March 2027 the subscription status stays active.
  4. AC-33 From 15 March 2027 the subscription status is paused.
  5. AC-34 The 15 March 2027 billing date creates no charge.
  6. AC-35 The charge for the billing period that ended on 14 March 2027 is not refunded.

QA-1 The service shall respond to pause requests within 300 milliseconds at the 95th percentile in production.

Target
p95 at most 300 ms
Metric
pause-request.latency
Scenario
All pause requests over a rolling 7-day window, measured at the API gateway
Environment
Production
RQ-9 If the account is overdue, then the service shall reject the pause request.
  1. AC-36 A pause request from an overdue account returns account_overdue.
  2. AC-37 A pause request made after the overdue charge is paid returns scheduled.
  3. AC-38 A pause request from an account whose oldest unpaid charge is 13 days old returns scheduled.
RQ-10 The service shall accept only pause durations of 1 to 90 whole days.

A pause request names its duration in days.

  1. AC-39 A 1-day pause request returns scheduled.
  2. AC-40 A 90-day pause request returns scheduled.
  3. AC-41 A 0-day pause request returns invalid_duration.
  4. AC-42 A 91-day pause request returns invalid_duration.
  5. AC-43 A pause request for 2.5 days returns invalid_duration.
RQ-11 If the subscription is not active or already has a pause, then the service shall reject the pause request.
  1. AC-44 A pause request for a cancelled subscription returns not_active.
  2. AC-45 A pause request for a subscription with a pending cancellation returns not_active.
  3. AC-46 A pause request while a pause is scheduled returns pause_exists.
  4. AC-47 A subscriber whose pause is in progress receives pause_exists for a new pause request.
RQ-12 If the service rejects a pause request, then the service shall leave the subscription unchanged.
  1. AC-48 A rejected pause request leaves the next billing date unchanged.
  2. AC-49 A rejected pause request leaves the subscription status unchanged.
  3. AC-50 A rejected pause request stores no pause.
RQ-13 When a pause ends, the service shall resume billing on the resume date.

The resume date is the day after the last paused day. It becomes the new billing day.

  1. AC-51 A 30-day pause that starts on 15 March 2027 has its resume date on 14 April 2027.
  2. AC-52 A 1-day pause that starts on 15 March 2027 has its resume date on 16 March 2027.
  3. AC-53 The resume date creates one charge equal to the plan price.
  4. AC-54 On the resume date the subscription status returns to active.
  5. AC-55 After resuming on 14 April 2027, the next billing date is 14 May 2027.
RQ-14 When a subscriber resumes early, the service shall end the pause on the request date.
  1. AC-56 An early resume request on 1 April 2027 during a pause returns resumed.
  2. AC-57 An early resume on 1 April 2027 creates a charge on 1 April 2027.
  3. AC-58 After an early resume on 1 April 2027, the next billing date is 1 May 2027.
  4. AC-59 A resume request before a scheduled pause starts removes that pause.
  5. AC-60 Removing a scheduled pause leaves the next billing date unchanged.
  6. AC-61 A resume request without a scheduled or active pause returns no_pause.
RQ-15 When a pause is scheduled, starts, or ends, the service shall record one audit event.

Every audit event carries the subscription ID, the actor, and the event time.

  1. AC-62 Scheduling a pause records one pause_scheduled event.
  2. AC-63 The start of a pause records one pause_started event.
  3. AC-64 The end of a pause records one pause_ended event.
  4. AC-65 An early resume records one pause_ended event.
  5. AC-66 Each pause event carries the subscription ID, the actor, and the event time.
  6. AC-67 A rejected pause request records no pause event.
RQ-16 When a pause is scheduled, the service shall send the subscriber one confirmation email.
  1. AC-68 Scheduling a pause sends exactly one confirmation email.
  2. AC-69 The confirmation email states the pause start date.
  3. AC-70 The confirmation email states the resume date.
  4. AC-71 A rejected pause request sends no email.
  5. AC-72 If the confirmation email fails to send, the pause stays scheduled.

Components

CMP-1 Subscription API

Accepts subscriber requests to start, cancel, and change a subscription.

  • CON-1 The Subscription API shall accept requests only from an authenticated subscriber. Monitored

Realized by F-1F-3F-4

CMP-2 Billing Scheduler

Runs once per day, creates due charges, and tracks unpaid charges.

  • CON-2 The Billing Scheduler shall send each charge to the payment provider with an idempotency key built from the subscription ID and the billing date. Proved
  • CON-5 The Billing Scheduler shall store a pause and suppress its charges in one transaction. Monitored

Realized by F-1F-2F-3F-4

CMP-3 Notification Sender

Sends email to subscribers.

  • CON-3 The Notification Sender shall send email only to the subscriber's verified address. Monitored

Realized by F-3F-4

CMP-4 Audit Log

The append-only store of subscription events.

  • CON-4 The Audit Log shall keep each written event unchanged. Monitored

Realized by F-4

Architecture decision

ADR-1 Model a pause as a state of the billing schedule

Subscribers who want a break today must cancel and subscribe again. Pause and Resume (F-4) needs a representation that stops charges for 1 to 90 days and then restarts billing on a new billing day.

Selected: Pause state on the billing schedule. Pauses are stored on the billing schedule. The Billing Scheduler stores a pause and suppresses its charges in one transaction (CON-5).

Drivers
Subscription history
A paused subscription keeps its identity, plan, and charge history.
No cancellation side effects
A pause sends no cancellation email and creates no new subscription.
RQ-10
The service shall accept only pause durations of 1 to 90 whole days.
Options considered Subscription historyNo cancellation side effectsRQ-10
Pause state on the billing schedule Selected supports The subscription record is unchanged; only the schedule gains a pause.supports No cancellation runs, so no cancellation email is sent.supports Start and resume dates express any whole-day duration from 1 to 90.
Cancel and subscribe again conflicts The new subscription has a new identity and starts an empty charge history.conflicts Cancelling sends the cancellation email that RQ-6 requires.neutral The new subscription can start on any resume date.
Skip individual billing dates supports The subscription record is unchanged.supports No cancellation runs.conflicts Skipping whole billing dates cannot express a 30-day pause that resumes mid-period.
Consequences
  • obligation The Billing Scheduler owns pause state. CMP-2
  • cost The billing job checks for a pause before it creates each charge. RQ-3
  • benefit Reports read one subscription record through a pause.

Vocabulary

audit trail
The append-only record of subscription changes, with who made each change and when.
customer notice
A message the service sends to the subscriber about their subscription.
money movement
Behavior that creates, suppresses, or changes a charge to the subscriber.

2 Ratify

The reviewed change

The change was proposed in reviewable change sets, accepted, and published as a new immutable state. This is everything that differs between the base state and the governing state.

Base state
Publish sequence 2
Governing state
Publish sequence 4
Governing state published
October 5, 2026
Reviewed by
Reviewer

Change sets

  1. Pause and resume Adds Pause and Resume (F-4, RQ-8..RQ-16) so a subscriber can pause billing for 1 to 90 days instead of cancelling. Billing no longer charges a paused subscription (RQ-3 body, new AC). Removes the skip rejection (RQ-7), which pause replaces. Adds the Audit Log component and a one-transaction constraint on the Billing Scheduler.
  2. Pause model decision Records ADR-1: a pause is a state of the billing schedule, chosen over cancel-and-resubscribe and skipping whole billing dates. Outcome: CON-5.
  3. Production latency target Restates QA-1 as a production target: p95 latency of pause requests at most 300 ms, measured at the API gateway over a rolling 7-day window. Only production traffic can show it, so it is confirmed after release, not before.
  • Changed RQ-3 When a billing date arrives for an active subscription, the service shall create one charge for the plan price.

    Before

    An active subscription is one whose status is active.

    After

    An active subscription is one whose status is active. A paused subscription is not active.

  • Removed RQ-7 If a subscriber requests to skip a billing period, then the service shall reject the request.

    The service offers no skip. A subscriber who wants a break cancels and subscribes again.

  • Removed AC-27 A request to skip a billing period returns not_supported.

  • Removed AC-28 A rejected skip request keeps the current billing schedule.

Added nodes (61)
  • Added AC-29 A billing date that falls inside a pause creates no charge.
  • Added F-4 Pause and Resume
  • Added FT-5 money movement
  • Added FT-6 customer notice
  • Added FT-7 audit trail
  • Added RQ-8 When an eligible subscriber requests a pause, the service shall schedule the pause to start on the next billing date.
  • Added AC-30 The pause request returns scheduled.
  • Added AC-31 The pause starts on 15 March 2027.
  • Added AC-32 Until 15 March 2027 the subscription status stays active.
  • Added AC-33 From 15 March 2027 the subscription status is paused.
  • Added AC-34 The 15 March 2027 billing date creates no charge.
  • Added AC-35 The charge for the billing period that ended on 14 March 2027 is not refunded.
  • Added QA-1 The service shall respond to pause requests within 300 milliseconds at the 95th percentile in production.
  • Added RQ-9 If the account is overdue, then the service shall reject the pause request.
  • Added AC-36 A pause request from an overdue account returns account_overdue.
  • Added AC-37 A pause request made after the overdue charge is paid returns scheduled.
  • Added AC-38 A pause request from an account whose oldest unpaid charge is 13 days old returns scheduled.
  • Added RQ-10 The service shall accept only pause durations of 1 to 90 whole days.
  • Added AC-39 A 1-day pause request returns scheduled.
  • Added AC-40 A 90-day pause request returns scheduled.
  • Added AC-41 A 0-day pause request returns invalid_duration.
  • Added AC-42 A 91-day pause request returns invalid_duration.
  • Added AC-43 A pause request for 2.5 days returns invalid_duration.
  • Added RQ-11 If the subscription is not active or already has a pause, then the service shall reject the pause request.
  • Added AC-44 A pause request for a cancelled subscription returns not_active.
  • Added AC-45 A pause request for a subscription with a pending cancellation returns not_active.
  • Added AC-46 A pause request while a pause is scheduled returns pause_exists.
  • Added AC-47 A subscriber whose pause is in progress receives pause_exists for a new pause request.
  • Added RQ-12 If the service rejects a pause request, then the service shall leave the subscription unchanged.
  • Added AC-48 A rejected pause request leaves the next billing date unchanged.
  • Added AC-49 A rejected pause request leaves the subscription status unchanged.
  • Added AC-50 A rejected pause request stores no pause.
  • Added RQ-13 When a pause ends, the service shall resume billing on the resume date.
  • Added AC-51 A 30-day pause that starts on 15 March 2027 has its resume date on 14 April 2027.
  • Added AC-52 A 1-day pause that starts on 15 March 2027 has its resume date on 16 March 2027.
  • Added AC-53 The resume date creates one charge equal to the plan price.
  • Added AC-54 On the resume date the subscription status returns to active.
  • Added AC-55 After resuming on 14 April 2027, the next billing date is 14 May 2027.
  • Added RQ-14 When a subscriber resumes early, the service shall end the pause on the request date.
  • Added AC-56 An early resume request on 1 April 2027 during a pause returns resumed.
  • Added AC-57 An early resume on 1 April 2027 creates a charge on 1 April 2027.
  • Added AC-58 After an early resume on 1 April 2027, the next billing date is 1 May 2027.
  • Added AC-59 A resume request before a scheduled pause starts removes that pause.
  • Added AC-60 Removing a scheduled pause leaves the next billing date unchanged.
  • Added AC-61 A resume request without a scheduled or active pause returns no_pause.
  • Added RQ-15 When a pause is scheduled, starts, or ends, the service shall record one audit event.
  • Added AC-62 Scheduling a pause records one pause_scheduled event.
  • Added AC-63 The start of a pause records one pause_started event.
  • Added AC-64 The end of a pause records one pause_ended event.
  • Added AC-65 An early resume records one pause_ended event.
  • Added AC-66 Each pause event carries the subscription ID, the actor, and the event time.
  • Added AC-67 A rejected pause request records no pause event.
  • Added RQ-16 When a pause is scheduled, the service shall send the subscriber one confirmation email.
  • Added AC-68 Scheduling a pause sends exactly one confirmation email.
  • Added AC-69 The confirmation email states the pause start date.
  • Added AC-70 The confirmation email states the resume date.
  • Added AC-71 A rejected pause request sends no email.
  • Added AC-72 If the confirmation email fails to send, the pause stays scheduled.
  • Added CON-5 The Billing Scheduler shall store a pause and suppress its charges in one transaction.
  • Added CMP-4 Audit Log
  • Added CON-4 The Audit Log shall keep each written event unchanged.

Added Architecture decision added: ADR-1. Vocabulary added: audit trail.

3 Implement

The work scope given to the coding agent

The agent receives the pinned governing state and the requirements the change affects, and works in the sample repository.

Governing publish sequence
4
Content address
ff85153b5e58421ed6ba140b3a5e4dd93dc7255b6e539f6dc86bc4e479f8960a
Repository
loft-website-example

Affected requirements

  • RQ-3 When a billing date arrives for an active subscription, the service shall create one charge for the plan price.
  • RQ-8 When an eligible subscriber requests a pause, the service shall schedule the pause to start on the next billing date.
  • RQ-9 If the account is overdue, then the service shall reject the pause request.
  • RQ-10 The service shall accept only pause durations of 1 to 90 whole days.
  • RQ-11 If the subscription is not active or already has a pause, then the service shall reject the pause request.
  • RQ-12 If the service rejects a pause request, then the service shall leave the subscription unchanged.
  • RQ-13 When a pause ends, the service shall resume billing on the resume date.
  • RQ-14 When a subscriber resumes early, the service shall end the pause on the request date.
  • RQ-15 When a pause is scheduled, starts, or ends, the service shall record one audit event.
  • RQ-16 When a pause is scheduled, the service shall send the subscriber one confirmation email.

Removed requirement

  • Removed RQ-7 If a subscriber requests to skip a billing period, then the service shall reject the request.

4 Reconcile

Evidence for each candidate revision

Each revision the agent produced is checked against every in-scope acceptance criterion and quality target. Its own passing tests are not the verdict.

Candidate 1

Revision
a7244b1c0f237be1d04e73eabb14c647ebaa6b05
Produced by
Coding agent

What reconciliation found

  • Failed AC-36 A pause request from an overdue account returns account_overdue.

    review/candidate-a/scenarios/ac-36.test.ts at 140e10c AC-36 review: a pause request from an account the billing job marked overdue returns account_overdue

  • Missing AC-72 If the confirmation email fails to send, the pause stays scheduled.
  • Unresolved QA-1 The service shall respond to pause requests within 300 milliseconds at the 95th percentile in production.
All 49 in-scope subjects
Subject Status Evidence
AC-10 Supported test/billing.test.ts at a7244b1 AC-10 an active subscription receives one charge equal to the plan price on its billing date
AC-11 Supported test/billing.test.ts at a7244b1 AC-11 running the billing job twice on one billing date creates one charge
AC-12 Supported test/billing.test.ts at a7244b1 AC-12 a cancelled subscription receives no charge on a later billing date
AC-13 Supported test/billing.test.ts at a7244b1 AC-13 after a charge the next billing date advances by one billing period
AC-29 Supported test/billing.test.ts at a7244b1 AC-29 a billing date inside a pause creates no charge
AC-30 Supported test/pause.test.ts at a7244b1 AC-30 the pause request returns scheduled
AC-31 Supported test/pause.test.ts at a7244b1 AC-31 the pause starts on 15 March 2027
AC-32 Supported test/pause.test.ts at a7244b1 AC-32 until 15 March 2027 the status stays active
AC-33 Supported test/pause.test.ts at a7244b1 AC-33 from 15 March 2027 the status is paused
AC-34 Supported test/pause.test.ts at a7244b1 AC-34 the 15 March 2027 billing date creates no charge
AC-35 Supported test/pause.test.ts at a7244b1 AC-35 the charge for the period that ended on 14 March 2027 is not refunded
AC-36 Failed review/candidate-a/scenarios/ac-36.test.ts at 140e10c AC-36 review: a pause request from an account the billing job marked overdue returns account_overdue
AC-37 Supported test/pause.test.ts at a7244b1 AC-37 a pause request after the overdue charge is paid returns scheduled
AC-38 Supported test/pause.test.ts at a7244b1 AC-38 a pause request with a 13-day-old unpaid charge returns scheduled
AC-39 Supported test/pause.test.ts at a7244b1 AC-39 a 1-day pause request returns scheduled
AC-40 Supported test/pause.test.ts at a7244b1 AC-40 a 90-day pause request returns scheduled
AC-41 Supported test/pause.test.ts at a7244b1 AC-41 a 0-day pause request returns invalid_duration
AC-42 Supported test/pause.test.ts at a7244b1 AC-42 a 91-day pause request returns invalid_duration
AC-43 Supported test/pause.test.ts at a7244b1 AC-43 a 2.5-day pause request returns invalid_duration
AC-44 Supported test/pause.test.ts at a7244b1 AC-44 a pause request for a cancelled subscription returns not_active
AC-45 Supported test/pause.test.ts at a7244b1 AC-45 a pause request with a pending cancellation returns not_active
AC-46 Supported test/pause.test.ts at a7244b1 AC-46 a pause request while a pause is scheduled returns pause_exists
AC-47 Supported test/pause.test.ts at a7244b1 AC-47 a pause request while a pause is in progress returns pause_exists
AC-48 Supported test/pause.test.ts at a7244b1 AC-48 a rejected pause request leaves the next billing date unchanged
AC-49 Supported test/pause.test.ts at a7244b1 AC-49 a rejected pause request leaves the status unchanged
AC-50 Supported test/pause.test.ts at a7244b1 AC-50 a rejected pause request stores no pause
AC-51 Supported test/pause.test.ts at a7244b1 AC-51 a 30-day pause from 15 March 2027 resumes on 14 April 2027
AC-52 Supported test/pause.test.ts at a7244b1 AC-52 a 1-day pause from 15 March 2027 resumes on 16 March 2027
AC-53 Supported test/pause.test.ts at a7244b1 AC-53 the resume date creates one charge equal to the plan price
AC-54 Supported test/pause.test.ts at a7244b1 AC-54 on the resume date the status returns to active
AC-55 Supported test/pause.test.ts at a7244b1 AC-55 after resuming on 14 April 2027 the next billing date is 14 May 2027
AC-56 Supported test/pause.test.ts at a7244b1 AC-56 an early resume on 1 April 2027 returns resumed
AC-57 Supported test/pause.test.ts at a7244b1 AC-57 an early resume on 1 April 2027 creates a charge on 1 April 2027
AC-58 Supported test/pause.test.ts at a7244b1 AC-58 after an early resume on 1 April 2027 the next billing date is 1 May 2027
AC-59 Supported test/pause.test.ts at a7244b1 AC-59 a resume request before a scheduled pause starts removes that pause
AC-60 Supported test/pause.test.ts at a7244b1 AC-60 removing a scheduled pause leaves the next billing date unchanged
AC-61 Supported test/pause.test.ts at a7244b1 AC-61 a resume request without a pause returns no_pause
AC-62 Supported test/pause.test.ts at a7244b1 AC-62 scheduling a pause records one pause_scheduled event
AC-63 Supported test/pause.test.ts at a7244b1 AC-63 the start of a pause records one pause_started event
AC-64 Supported test/pause.test.ts at a7244b1 AC-64 the end of a pause records one pause_ended event
AC-65 Supported test/pause.test.ts at a7244b1 AC-65 an early resume records one pause_ended event
AC-66 Supported test/pause.test.ts at a7244b1 AC-66 each pause event carries the subscription ID, the actor, and the event time
AC-67 Supported test/pause.test.ts at a7244b1 AC-67 a rejected pause request records no pause event
AC-68 Supported test/pause.test.ts at a7244b1 AC-68 scheduling a pause sends exactly one confirmation email
AC-69 Supported test/pause.test.ts at a7244b1 AC-69 the confirmation email states the pause start date
AC-70 Supported test/pause.test.ts at a7244b1 AC-70 the confirmation email states the resume date
AC-71 Supported test/pause.test.ts at a7244b1 AC-71 a rejected pause request sends no email
AC-72 Missing
QA-1 Unresolved

Candidate 2

Revision
11ec255b460ba08fbec0774a4945799ea0a6b6da
Produced by
Coding agent

What reconciliation found

  • Unresolved QA-1 The service shall respond to pause requests within 300 milliseconds at the 95th percentile in production.

Every in-scope acceptance criterion is supported.

All 49 in-scope subjects
Subject Status Evidence
AC-10 Supported test/billing.test.ts at 11ec255 AC-10 an active subscription receives one charge equal to the plan price on its billing date
AC-11 Supported test/billing.test.ts at 11ec255 AC-11 running the billing job twice on one billing date creates one charge
AC-12 Supported test/billing.test.ts at 11ec255 AC-12 a cancelled subscription receives no charge on a later billing date
AC-13 Supported test/billing.test.ts at 11ec255 AC-13 after a charge the next billing date advances by one billing period
AC-29 Supported test/billing.test.ts at 11ec255 AC-29 a billing date inside a pause creates no charge
AC-30 Supported test/pause.test.ts at 11ec255 AC-30 the pause request returns scheduled
AC-31 Supported test/pause.test.ts at 11ec255 AC-31 the pause starts on 15 March 2027
AC-32 Supported test/pause.test.ts at 11ec255 AC-32 until 15 March 2027 the status stays active
AC-33 Supported test/pause.test.ts at 11ec255 AC-33 from 15 March 2027 the status is paused
AC-34 Supported test/pause.test.ts at 11ec255 AC-34 the 15 March 2027 billing date creates no charge
AC-35 Supported test/pause.test.ts at 11ec255 AC-35 the charge for the period that ended on 14 March 2027 is not refunded
AC-36 Supported test/pause.test.ts at 11ec255 AC-36 a pause request from an overdue account returns account_overdue
AC-37 Supported test/pause.test.ts at 11ec255 AC-37 a pause request after the overdue charge is paid returns scheduled
AC-38 Supported test/pause.test.ts at 11ec255 AC-38 a pause request with a 13-day-old unpaid charge returns scheduled
AC-39 Supported test/pause.test.ts at 11ec255 AC-39 a 1-day pause request returns scheduled
AC-40 Supported test/pause.test.ts at 11ec255 AC-40 a 90-day pause request returns scheduled
AC-41 Supported test/pause.test.ts at 11ec255 AC-41 a 0-day pause request returns invalid_duration
AC-42 Supported test/pause.test.ts at 11ec255 AC-42 a 91-day pause request returns invalid_duration
AC-43 Supported test/pause.test.ts at 11ec255 AC-43 a 2.5-day pause request returns invalid_duration
AC-44 Supported test/pause.test.ts at 11ec255 AC-44 a pause request for a cancelled subscription returns not_active
AC-45 Supported test/pause.test.ts at 11ec255 AC-45 a pause request with a pending cancellation returns not_active
AC-46 Supported test/pause.test.ts at 11ec255 AC-46 a pause request while a pause is scheduled returns pause_exists
AC-47 Supported test/pause.test.ts at 11ec255 AC-47 a pause request while a pause is in progress returns pause_exists
AC-48 Supported test/pause.test.ts at 11ec255 AC-48 a rejected pause request leaves the next billing date unchanged
AC-49 Supported test/pause.test.ts at 11ec255 AC-49 a rejected pause request leaves the status unchanged
AC-50 Supported test/pause.test.ts at 11ec255 AC-50 a rejected pause request stores no pause
AC-51 Supported test/pause.test.ts at 11ec255 AC-51 a 30-day pause from 15 March 2027 resumes on 14 April 2027
AC-52 Supported test/pause.test.ts at 11ec255 AC-52 a 1-day pause from 15 March 2027 resumes on 16 March 2027
AC-53 Supported test/pause.test.ts at 11ec255 AC-53 the resume date creates one charge equal to the plan price
AC-54 Supported test/pause.test.ts at 11ec255 AC-54 on the resume date the status returns to active
AC-55 Supported test/pause.test.ts at 11ec255 AC-55 after resuming on 14 April 2027 the next billing date is 14 May 2027
AC-56 Supported test/pause.test.ts at 11ec255 AC-56 an early resume on 1 April 2027 returns resumed
AC-57 Supported test/pause.test.ts at 11ec255 AC-57 an early resume on 1 April 2027 creates a charge on 1 April 2027
AC-58 Supported test/pause.test.ts at 11ec255 AC-58 after an early resume on 1 April 2027 the next billing date is 1 May 2027
AC-59 Supported test/pause.test.ts at 11ec255 AC-59 a resume request before a scheduled pause starts removes that pause
AC-60 Supported test/pause.test.ts at 11ec255 AC-60 removing a scheduled pause leaves the next billing date unchanged
AC-61 Supported test/pause.test.ts at 11ec255 AC-61 a resume request without a pause returns no_pause
AC-62 Supported test/pause.test.ts at 11ec255 AC-62 scheduling a pause records one pause_scheduled event
AC-63 Supported test/pause.test.ts at 11ec255 AC-63 the start of a pause records one pause_started event
AC-64 Supported test/pause.test.ts at 11ec255 AC-64 the end of a pause records one pause_ended event
AC-65 Supported test/pause.test.ts at 11ec255 AC-65 an early resume records one pause_ended event
AC-66 Supported test/pause.test.ts at 11ec255 AC-66 each pause event carries the subscription ID, the actor, and the event time
AC-67 Supported test/pause.test.ts at 11ec255 AC-67 a rejected pause request records no pause event
AC-68 Supported test/pause.test.ts at 11ec255 AC-68 scheduling a pause sends exactly one confirmation email
AC-69 Supported test/pause.test.ts at 11ec255 AC-69 the confirmation email states the pause start date
AC-70 Supported test/pause.test.ts at 11ec255 AC-70 the confirmation email states the resume date
AC-71 Supported test/pause.test.ts at 11ec255 AC-71 a rejected pause request sends no email
AC-72 Supported test/pause.test.ts at 11ec255 AC-72 if the confirmation email fails to send, the pause stays scheduled
QA-1 Unresolved

Supported means a reviewed test for the criterion passed at that revision; failed means a review scenario for it failed; missing means no evidence maps to it. Unresolved means the evidence cannot exist yet: a production response-time target is measured on real traffic after release, and reconciliation does not claim it before then.

5 Decide

The recorded decisions

A person decides each candidate on its evidence. The first candidate went back to the agent; the second was accepted.

  1. Reopened

    Candidate
    Candidate 1
    Revision
    a7244b1
    Decided by
    Product owner
    Recorded
    October 6, 2026

    An overdue account can still pause (ISS-1, AC-36), and nothing shows that a failed confirmation email leaves the pause scheduled (ISS-2, AC-72). Both go back to the coding agent with the review scenario.

  2. Accepted

    Candidate
    Candidate 2
    Revision
    11ec255
    Decided by
    Product owner
    Recorded
    October 6, 2026

    Every in-scope criterion has verified executable evidence, including AC-36 through the billing job and AC-72 with a failing mailer. ISS-1 and ISS-2 are remediated. QA-1 is a production target: it is confirmed from the API gateway's latency after release, so it stays open as FU-1.

See it on a product area of yours.

We run the same loop on one bounded change in your product, with your people deciding.