human-readablewriting

A writing skill for your agent.

A writing skill your coding agent uses to revise research memos, financial analyses, and other professional prose.

Installation

Before and after, across five fields.

Matching excerpts from original drafts and recorded revisions.

Trip.com's hybrid-work trial

Recorded skill revision.

Full source and revisionExcerpt view

Original

Trip.com retention evidence for hybrid-policy review
Evidence for the HR director

Bloom, Han and Liang's 2024 Nature study covered 1,612 university-graduate engineering, marketing and finance employees in Trip.com's Airfare and IT divisions in Shanghai. Interns and new employees on probation were excluded. At this single employer, random assignment by odd or even birthday dates put 792 odd-birthday employees in a group allowed to work from home on Wednesday and Friday, with three office days, and 820 even-birthday employees in a five-office-day control group. The two home days were optional. The 518 initial volunteers started in the week of 9 August 2021, and the remaining 1,094 non-volunteers in the week of 13 September.

During the experiment, quit rates by assigned group were 7.20% in control and 4.80% in treatment, with P = 0.043 for the difference. These are experiment-period rates, not annual rates. The 2.40-percentage-point difference is about a 33% reduction relative to control. The nominal six-month experiment effectively ended on 21 January 2022 when a COVID case led the company to allow everyone to work from home, although the attrition figure caption reports follow-up through 23 January. This was not two years of randomized policy exposure.

Among employees assigned eligibility, actual take-up was about 55% for volunteers and 40% for non-volunteers across Wednesday and Friday opportunities, excluding public holidays, personal holidays and excused absences. These percentages use neither all employees nor all weekdays as their denominator. Typical use was about one day weekly. The quit-rate comparison therefore estimates assignment to the optional policy, not the effect of actually working from home twice every week.

Implication for our review

My judgment is that this evidence warrants considering a comparable optional-policy trial for graduate office roles, subject to checking how similar our work and commuting conditions are. That is a policy judgment, not a research finding that another employer will achieve the same quit-rate reduction or that fully remote work is equivalent.

Revision

Trip.com retention evidence for hybrid-policy review
Evidence for the HR director

Study design. Bloom, Han and Liang's 2024 Nature study covered 1,612 university-graduate engineering, marketing and finance employees in Trip.com's Airfare and IT divisions in Shanghai. Interns and new employees on probation were excluded. The study took place at a single employer.

Assignment was random, based on whether an employee's birthday date was odd or even:

  • 792 odd-birthday employees were allowed to work from home on Wednesday and Friday, leaving three office days. The two home days were optional.
  • 820 even-birthday employees formed a control group with five office days.

The 518 initial volunteers started in the week of 9 August 2021. The remaining 1,094 non-volunteers started in the week of 13 September.

Quit rates. During the experiment, quit rates by assigned group were 7.20% in control and 4.80% in treatment, with P = 0.043 for the difference. These are experiment-period rates, not annual rates. The 2.40-percentage-point difference is about a 33% reduction relative to control.

The experiment was nominally six months long. It effectively ended on 21 January 2022, when a COVID case led the company to allow everyone to work from home. The attrition figure caption reports follow-up through 23 January. The study did not involve two years of randomized policy exposure.

Take-up. Among employees assigned eligibility, actual take-up was about 55% for volunteers and 40% for non-volunteers. These figures count Wednesday and Friday opportunities and exclude public holidays, personal holidays and excused absences. The denominator is therefore neither all employees nor all weekdays. Typical use was about one day weekly.

The quit-rate comparison therefore estimates the effect of being assigned to the optional policy. It does not estimate the effect of actually working from home twice every week.

Implication for our review

My judgment is that this evidence warrants considering a comparable optional-policy trial for graduate office roles, subject to checking how similar our work and commuting conditions are. This is a policy judgment. The research does not show that another employer will achieve the same quit-rate reduction, or that fully remote work is equivalent.

Original

During the experiment, quit rates by assigned group were 7.20% in control and 4.80% in treatment, with P = 0.043 for the difference. These are experiment-period rates, not annual rates. The 2.40-percentage-point difference is about a 33% reduction relative to control. The nominal six-month experiment effectively ended on 21 January 2022 when a COVID case led the company to allow everyone to work from home, although the attrition figure caption reports follow-up through 23 January. This was not two years of randomized policy exposure.

Revision

Quit rates. During the experiment, quit rates by assigned group were 7.20% in control and 4.80% in treatment, with P = 0.043 for the difference. These are experiment-period rates, not annual rates. The 2.40-percentage-point difference is about a 33% reduction relative to control.

The experiment was nominally six months long. It effectively ended on 21 January 2022, when a COVID case led the company to allow everyone to work from home. The attrition figure caption reports follow-up through 23 January. The study did not involve two years of randomized policy exposure.

Sources and run record

claude-sonnet-5-5 · 2.1.322 (Claude Code). Source-fidelity review by a separate agent.

Nicholas Bloom, Ruobing Han and James Liang, Hybrid working from home improves retention without damaging performance, Nature 630, 920–925 (2024), DOI 10.1038/s41586-024-07500-2. CC BY 4.0. Findings selected and paraphrased into project-authored English and Korean memos, with a policy judgment added. The Korean memo is not an authorized translation.

Source packet and run record (JSON) · Project MIT license · Notice

Profit rises while operating cash flow falls

Fictional case · Recorded skill revision.

Full source and revisionExcerpt view

Original

Quarterly profit and operating cash flow review

This fictional manufacturer reports on an unchanged scope for the standalone April 1 through June 30 quarters of 2025 and 2026, not year-to-date periods. All amounts are exact KRW million. Net income increased by 200, or 20% of the Q2 2025 base of 1,000, while operating cash flow fell by 300 but remained positive in both quarters. Net income is a supplied bottom-line input rather than a reconstructed income statement.

Reconciliation

For the balance rows, the table gives each quarter's opening and closing balances followed by the cash flow adjustment.

ItemQ2 2025Q2 2026
Net income1,0001,200
Depreciation expense included in net income, added back+200+240
Trade receivables800 to 900, adjustment -100900 to 1,300, adjustment -400
Inventory1,000 to 1,250, adjustment -2501,200 to 1,800, adjustment -600
Trade payables500 to 550, adjustment +50600 to 760, adjustment +160
Other adjustments00
Operating cash flow900600

Other adjustments total zero by design, and no acquisitions, currency translation, write-offs, reclassifications, or other noncash movements affect these balance changes. Depreciation is a noncash add-back, not a cash receipt. Accordingly, the reconciliations are 1,000 + 200 - 100 - 250 + 50 = 900 and 1,200 + 240 - 400 - 600 + 160 = 600.

The combined working-capital adjustment moved from -300 to -840. Its additional -540 outweighed the +200 net income change and +40 depreciation adjustment change. The operating cash flow change bridge is +200 + 40 - 300 - 350 + 110 = -300, with the last three components reflecting the larger receivable increase, larger inventory increase, and larger payable increase, respectively.

Interpretation limits

Cash balances, investing and financing flows, collection terms, receivable aging, inventory plans, and profit-growth causes are not supplied. Unknown is not zero. The reconciliation does not establish overdue customers, unsold inventory, or financial distress. Operating cash flow alone cannot establish a cash-balance change or support a complete liquidity assessment.

Revision

Quarterly profit and operating cash flow review

This review covers a fictional manufacturer on an unchanged scope. It compares the standalone quarters of April 1 through June 30, 2025 and 2026, not year-to-date periods. All amounts are exact KRW million.

Net income rose by 200, which is 20% of the Q2 2025 base of 1,000. Operating cash flow fell by 300 but stayed positive in both quarters. Net income is a supplied bottom-line input, not a reconstructed income statement.

Reconciliation

For the balance rows, the table gives each quarter's opening and closing balances, followed by the cash flow adjustment.

ItemQ2 2025Q2 2026
Net income1,0001,200
Depreciation expense included in net income, added back+200+240
Trade receivables800 to 900, adjustment -100900 to 1,300, adjustment -400
Inventory1,000 to 1,250, adjustment -2501,200 to 1,800, adjustment -600
Trade payables500 to 550, adjustment +50600 to 760, adjustment +160
Other adjustments00
Operating cash flow900600

Other adjustments total zero by design. No acquisitions, currency translation, write-offs, reclassifications, or other noncash movements affect these balance changes. Depreciation is a noncash add-back, not a cash receipt. The reconciliations are therefore:

  • Q2 2025: 1,000 + 200 - 100 - 250 + 50 = 900
  • Q2 2026: 1,200 + 240 - 400 - 600 + 160 = 600

The combined working-capital adjustment moved from -300 to -840. That additional -540 outweighed the +200 change in net income and the +40 change in the depreciation add-back.

The bridge for the change in operating cash flow is +200 + 40 - 300 - 350 + 110 = -300. The first two terms are the changes in net income and the depreciation add-back. The last three reflect the larger receivable increase (-300), the larger inventory increase (-350), and the larger payable increase (+110), respectively.

Interpretation limits

The source does not supply cash balances, investing and financing flows, collection terms, receivable aging, inventory plans, or the causes of profit growth. Unknown is not zero.

The reconciliation does not establish overdue customers, unsold inventory, or financial distress. Operating cash flow alone cannot establish a change in the cash balance or support a complete liquidity assessment.

Original

This fictional manufacturer reports on an unchanged scope for the standalone April 1 through June 30 quarters of 2025 and 2026, not year-to-date periods. All amounts are exact KRW million. Net income increased by 200, or 20% of the Q2 2025 base of 1,000, while operating cash flow fell by 300 but remained positive in both quarters. Net income is a supplied bottom-line input rather than a reconstructed income statement.

Revision

This review covers a fictional manufacturer on an unchanged scope. It compares the standalone quarters of April 1 through June 30, 2025 and 2026, not year-to-date periods. All amounts are exact KRW million.

Net income rose by 200, which is 20% of the Q2 2025 base of 1,000. Operating cash flow fell by 300 but stayed positive in both quarters. Net income is a supplied bottom-line input, not a reconstructed income statement.

Sources and run record

claude-sonnet-5-5 · 2.1.322 (Claude Code). Source-fidelity review by a separate agent.

The scenario, figures and drafts are project-authored fiction. The SEC financial-statement guide is a conceptual reference, not the source of the figures. No SEC graphics or tables are reproduced.

Source packet and run record (JSON) · Project MIT license · Notice

Warehouse automation before pilot approval

Fictional case · Recorded skill revision.

Full source and revisionExcerpt view

Original

Warehouse automation investment review

Fictional scenario. Prepared for the operations director and investment committee. All figures are pre-investment assumptions, not measured equipment performance. Money is in constant KRW million unless stated otherwise.

Four comparable zones each process 1,200 eligible cases daily for 300 operating days annually, with fixed demand and no sales uplift. Of eight scheduled hours daily, 75%, or six hours, are occupied processing time. A two-worker team processes 200 cases per occupied team-hour manually. Automation targets an unvalidated 300 with the same staffing and case mix. Processing would take four rather than six team-hours, releasing four worker-hours daily per zone, or 1,200 annually and 4,800 sitewide. Scheduled time, occupied team-hours and worker-hours are different measures.

Cash realization assumes cancellation of 600 agency hours per zone annually at KRW 30,000 per invoiced hour. This yields 18 per zone and cancels only 2,400 sitewide hours, not all released hours. Permanent payroll stays unchanged. Other released hours support redeployment without cash savings. Spend cancellation remains unvalidated. Annual gross cash savings are 18 for the pilot and 72 sitewide. Incremental maintenance, software and energy cost 4 and 12 respectively, leaving net savings of 14 and 60.

Immediate four-zone deployment costs 240 upfront. A one-zone pilot lasts one operating year and costs 75 upfront. Conditional expansion reuses pilot equipment but costs another 190, totaling 265. Spending and go-live coincide. The model assumes no ramp, constant savings and uniform cash accrual, with expansion immediately after year one. It excludes tax, depreciation, financing, discounting, working capital and salvage. Simple payback is 240 / 60 = 4.00 years for full deployment. Continuing the pilot without expansion gives 75 / 14, about 5.36 years. Conditional staged payback from initial outlay is 1 + (75 - 14 + 190) / 60, about 5.18 years. Year one earns only 14.

Expansion would require target throughput on comparable case mix, a case-error rate at most 0.5%, no unresolved critical safety findings and documented cancellation of 600 agency hours during the pilot year. Finance and operations must substantiate the remaining zones' economics before separate expansion approval. Management recommends authorizing only the 75 pilot tranche because throughput and spend cancellation remain unvalidated. Neither tranche is approved or completed. The pilot commits 165 less initially, but staging adds 25 in capital and delays modeled payback. Immediate deployment has better assumed economics but commits more capital before cash realization is proven.

Revision

Warehouse automation investment review

Fictional scenario. Prepared for the operations director and investment committee. All figures are pre-investment assumptions, not measured equipment performance. Money is in constant KRW million unless stated otherwise.

Decision

Management recommends authorizing only the 75 pilot tranche, because throughput and spend cancellation remain unvalidated. Neither tranche is approved or completed.

The pilot commits 165 less initially than immediate deployment. Staging, however, adds 25 in capital and delays modeled payback. Immediate deployment has better assumed economics but commits more capital before cash realization is proven.

Operating assumptions

Four comparable zones each process 1,200 eligible cases daily for 300 operating days annually. Demand is fixed and the model assumes no sales uplift.

Of eight scheduled hours daily, 75%, or six hours, are occupied processing time. A two-worker team processes 200 cases per occupied team-hour manually. Automation targets 300 cases per occupied team-hour, which is unvalidated, with the same staffing and case mix.

At 300 cases per team-hour, processing would take four team-hours instead of six. This releases four worker-hours daily per zone, or 1,200 annually per zone and 4,800 sitewide. Scheduled time, occupied team-hours and worker-hours are different measures.

Cash savings

Cash realization assumes the cancellation of 600 agency hours per zone annually at KRW 30,000 per invoiced hour. This yields 18 per zone. Sitewide, it cancels only 2,400 hours, not all released hours.

Permanent payroll stays unchanged. The other released hours support redeployment without cash savings. Spend cancellation remains unvalidated.

Annual figurePilot (1 zone)Sitewide (4 zones)
Gross cash savings1872
Incremental maintenance, software and energy cost412
Net savings1460
Capital and payback

Immediate four-zone deployment costs 240 upfront. A one-zone pilot lasts one operating year and costs 75 upfront. Conditional expansion reuses pilot equipment but costs another 190, for a total of 265.

The model makes these assumptions:

  • Spending and go-live coincide.
  • There is no ramp, savings are constant, and cash accrues uniformly.
  • Expansion occurs immediately after year one.
  • The model excludes tax, depreciation, financing, discounting, working capital and salvage.
OptionUpfront capitalTotal capitalSimple payback
Immediate four-zone deployment240240240 / 60 = 4.00 years
Pilot only, no expansion757575 / 14, about 5.36 years
Pilot, then expansion752651 + (75 − 14 + 190) / 60, about 5.18 years from initial outlay

Year one earns only 14 in the staged case.

Conditions for expansion

Expansion would require all of the following:

  • target throughput on a comparable case mix;
  • a case-error rate of 0.5% or less;
  • no unresolved critical safety findings;
  • documented cancellation of 600 agency hours during the pilot year.

Finance and operations must also substantiate the economics of the remaining zones before a separate expansion approval.

Original

Four comparable zones each process 1,200 eligible cases daily for 300 operating days annually, with fixed demand and no sales uplift. Of eight scheduled hours daily, 75%, or six hours, are occupied processing time. A two-worker team processes 200 cases per occupied team-hour manually. Automation targets an unvalidated 300 with the same staffing and case mix. Processing would take four rather than six team-hours, releasing four worker-hours daily per zone, or 1,200 annually and 4,800 sitewide. Scheduled time, occupied team-hours and worker-hours are different measures.

Revision

Four comparable zones each process 1,200 eligible cases daily for 300 operating days annually. Demand is fixed and the model assumes no sales uplift.

Of eight scheduled hours daily, 75%, or six hours, are occupied processing time. A two-worker team processes 200 cases per occupied team-hour manually. Automation targets 300 cases per occupied team-hour, which is unvalidated, with the same staffing and case mix.

At 300 cases per team-hour, processing would take four team-hours instead of six. This releases four worker-hours daily per zone, or 1,200 annually per zone and 4,800 sitewide. Scheduled time, occupied team-hours and worker-hours are different measures.

Sources and run record

claude-sonnet-5-5 · 2.1.322 (Claude Code). Source-fidelity review by a separate agent.

The scenario, figures and drafts are project-authored fiction. They are pre-investment assumptions, not measured equipment performance. No third-party material is reproduced.

Source packet and run record (JSON) · Project MIT license · Notice

Congestion-pricing figures and missing evidence

Recorded skill revision.

Full source and revisionExcerpt view

Original

Evidence request on New York congestion pricing

To the transport-policy reviewer

Reported results and missing definitions

Page 13 of MTA's December 17, 2025 board presentation, 2025 in Data, reports 11% fewer vehicle entries into the central business district, or CBD, and 71,000 fewer per day. These are entry counts, not unique cars or vehicle-miles, and the rounded figures do not establish an exact baseline count. Observation and comparison periods and baseline construction are unspecified on the slide.

MTA also reports car speeds within the CBD up 4.3%, which does not mean travel time fell 4.3%. Absolute speeds, weighting, hours covered, measurement provider, baseline, and observation and comparison periods are unspecified.

MTA reports PM2.5 down 22% in the first six months, crediting Cornell University, 2025. The slide places this claim under a Congestion Relief Zone heading without specifying exact study dates, the concentration statistic, the percentage denominator, or detailed geographic coverage. The concentration claim does not establish a 22% reduction in emissions, all pollutants, or individual exposure, and cannot be generalized citywide. The presentation title does not establish a common full-year comparison for these metrics.

Evidence requested

I treat the implementing agency's summary as a record of attributed claims, not independent causal proof of the policy's effects. For independent review, I request the traffic series and calculation methods, the missing periods and baselines, and the underlying air-quality study's geography, statistic, counterfactual method, and uncertainty. This is my request for evidence, not MTA's recommendation or a recommendation to repeal or expand congestion pricing.

Revision

Evidence request on New York congestion pricing

To the transport-policy reviewer

Reported results and missing definitions

Page 13 of MTA's December 17, 2025 board presentation, 2025 in Data, reports three results. The tables below set out each claim, what it does not establish, and what the slide leaves unspecified.

Reported resultWhat it does not establishUnspecified on the slide
11% fewer vehicle entries into the central business district (CBD), and 71,000 fewer per dayThese are entry counts, not unique cars or vehicle-miles. The rounded figures do not establish an exact baseline count.Observation and comparison periods; baseline construction
Car speeds within the CBD up 4.3%A 4.3% speed increase does not mean travel time fell 4.3%.Absolute speeds; weighting; hours covered; measurement provider; baseline; observation and comparison periods
PM2.5 down 22% in the first six months, crediting Cornell University, 2025The concentration claim does not establish a 22% reduction in emissions, all pollutants, or individual exposure. It cannot be generalized citywide.Exact study dates; the concentration statistic; the percentage denominator; detailed geographic coverage

MTA places the PM2.5 claim under a Congestion Relief Zone heading. The presentation title, 2025 in Data, does not establish a common full-year comparison for these metrics.

Evidence requested

I treat the implementing agency's summary as a record of attributed claims, not independent causal proof of the policy's effects. For independent review, I request:

  • the traffic series and calculation methods;
  • the missing periods and baselines;
  • the underlying air-quality study's geography, statistic, counterfactual method, and uncertainty.

This is my request for evidence, not MTA's recommendation or a recommendation to repeal or expand congestion pricing.

Original

Page 13 of MTA's December 17, 2025 board presentation, 2025 in Data, reports 11% fewer vehicle entries into the central business district, or CBD, and 71,000 fewer per day. These are entry counts, not unique cars or vehicle-miles, and the rounded figures do not establish an exact baseline count. Observation and comparison periods and baseline construction are unspecified on the slide.

MTA also reports car speeds within the CBD up 4.3%, which does not mean travel time fell 4.3%. Absolute speeds, weighting, hours covered, measurement provider, baseline, and observation and comparison periods are unspecified.

MTA reports PM2.5 down 22% in the first six months, crediting Cornell University, 2025. The slide places this claim under a Congestion Relief Zone heading without specifying exact study dates, the concentration statistic, the percentage denominator, or detailed geographic coverage. The concentration claim does not establish a 22% reduction in emissions, all pollutants, or individual exposure, and cannot be generalized citywide. The presentation title does not establish a common full-year comparison for these metrics.

Revision

Page 13 of MTA's December 17, 2025 board presentation, 2025 in Data, reports three results. The tables below set out each claim, what it does not establish, and what the slide leaves unspecified.

Reported resultWhat it does not establishUnspecified on the slide
11% fewer vehicle entries into the central business district (CBD), and 71,000 fewer per dayThese are entry counts, not unique cars or vehicle-miles. The rounded figures do not establish an exact baseline count.Observation and comparison periods; baseline construction
Car speeds within the CBD up 4.3%A 4.3% speed increase does not mean travel time fell 4.3%.Absolute speeds; weighting; hours covered; measurement provider; baseline; observation and comparison periods
PM2.5 down 22% in the first six months, crediting Cornell University, 2025The concentration claim does not establish a 22% reduction in emissions, all pollutants, or individual exposure. It cannot be generalized citywide.Exact study dates; the concentration statistic; the percentage denominator; detailed geographic coverage

MTA places the PM2.5 claim under a Congestion Relief Zone heading. The presentation title, 2025 in Data, does not establish a common full-year comparison for these metrics.

Sources and run record

claude-sonnet-5-5 · 2.1.322 (Claude Code). Source-fidelity review by a separate agent.

MTA, 2025 in Data, December 17, 2025, p. 13. The original memo paraphrases attributed facts, not slides or graphics. MTA reserves rights. Its terms and copyright notice do not grant this project a general reproduction license.

Source packet and run record (JSON) · Project MIT license · Notice

Duplicate webhooks and entitlement grants

Fictional case · Recorded skill revision.

Full source and revisionExcerpt view

Original

ADR 01. Durable invoice-event receipt and local entitlement grants
Context

This proposed ADR is a fictional application design, not a Stripe, API, or production change. It assumes one account, one environment, snapshot invoice.created and invoice.paid events at version 2026-10-28.preview, existing invoice-to-order mappings, and one non-revocable local entitlement per invoice.

Stripe documents unordered delivery and duplicate events. Snapshot created values have second-level precision and establish neither order nor uniqueness. Repeated delivery of one Event and separate duplicate Event objects differ. Stripe recommends data.object.id with event.type for the latter, not blanket suppression of future object updates.

The fictional arrival trace is invoice.paid E2, repeated E2, late invoice.created E1, and distinct duplicate invoice.paid E3. These four deliveries contain three Event IDs and two types for one invoice and order. E1 was generated before E2, possibly within the same timestamp second.

Decision

Use a durable inbox as the work queue, without external queue publication. Store payload, receipt time, and pending or completed state under a unique (account_id, event_id) key. account_id is configured account context, not an assumed payload field. event_id, event_type, and invoice_id come from Event.id, Event.type, and data.object.id. The business-operation key is (account_id, invoice_id, operation_kind=grant_entitlement), not the Event ID.

Following Stripe's handler guidance, verify the signature against the unmodified raw body. Commit the inbox row or confirm its durable predecessor before promptly returning 2xx. Persistence failure receives no success response. Receipt acknowledges delivery, not business completion. Repeated E2 adds no work, including when its existing row is still pending. It neither discards that row nor marks it completed. A crash after receipt commit but before acknowledgment leaves the committed work available on redelivery.

One ACID database holds inbox, operation ledger, and entitlement, with locks and unique constraints for concurrent workers. Paid processing retrieves the invoice and requires confirmed status=paid and its matching existing order_id. Retrieval failure or an unmet condition leaves work pending. For a new operation, ledger insertion, entitlement mutation, and inbox completion commit atomically. An existing operation permits completion without another grant, including for E3. A transaction crash cannot commit only completion. Created processing completes its receipt without resetting entitlement, so late E1 cannot undo a grant.

Alternatives

Event-ID-only deduplication misses E3. Acknowledgment before persistence risks losing work. Timestamp sorting cannot establish order. None replaces business-operation uniqueness.

Consequences and limits

Database contention and pending-work recovery are costs. Pending rows remain retryable, and inbox and operation records are not pruned within this example. Under these database and retention assumptions, eventual successful receipt, worker retries, retrieval, paid confirmation, and order matching produce one local grant for this trace, not global exactly-once execution. Refunds, disputes, subscription changes, external fulfillment, and outbound payment API idempotency are excluded.

Revision

ADR 01. Durable invoice-event receipt and local entitlement grants
Context

This proposed ADR describes a fictional application design. It is not a Stripe change, an API change, or a production change. It assumes one account, one environment, snapshot invoice.created and invoice.paid events at version 2026-10-28.preview, existing invoice-to-order mappings, and one non-revocable local entitlement per invoice.

Stripe documents unordered delivery and duplicate events. Snapshot created values have second-level precision, so they establish neither order nor uniqueness. Two cases must be kept apart: repeated delivery of one Event, and separate duplicate Event objects. For the second case, Stripe recommends using data.object.id together with event.type. It does not recommend blanket suppression of future object updates.

The fictional arrival trace has four deliveries for one invoice and order, in this order:

  1. invoice.paid E2
  2. A repeat of E2
  3. A late invoice.created E1
  4. A distinct duplicate invoice.paid E3

The four deliveries contain three Event IDs and two event types. E1 was generated before E2, possibly within the same timestamp second.

Decision

Inbox. Use a durable inbox as the work queue, without external queue publication. Store the payload, the receipt time, and a pending or completed state under a unique (account_id, event_id) key.

  • account_id is configured account context, not an assumed payload field.
  • event_id, event_type, and invoice_id come from Event.id, Event.type, and data.object.id.
  • The business-operation key is (account_id, invoice_id, operation_kind=grant_entitlement), not the Event ID.

Receipt. Following Stripe's handler guidance, verify the signature against the unmodified raw body. Then commit the inbox row, or confirm that a durable earlier row exists, before promptly returning 2xx. If persistence fails, the handler does not return a success response. Receipt acknowledges delivery, not business completion.

  • A repeated E2 adds no work, including when its existing row is still pending. The repeat neither discards that row nor marks it completed.
  • If a crash occurs after the receipt commit but before the acknowledgment, the committed work remains available when the event is redelivered.

Processing. One ACID database holds the inbox, the operation ledger, and the entitlement. Locks and unique constraints handle concurrent workers.

  • Paid processing retrieves the invoice. It requires a confirmed status=paid and a matching existing order_id. If retrieval fails or either condition is unmet, the work stays pending.
  • For a new operation, the ledger insertion, the entitlement mutation, and the inbox completion commit atomically.
  • If the operation already exists, the worker may complete the inbox row without another grant. This includes E3.
  • A transaction crash cannot commit only the completion.
  • Created processing completes its receipt without resetting the entitlement, so a late E1 cannot undo a grant.
Alternatives
AlternativeLimit
Event-ID-only deduplicationMisses E3.
Acknowledgment before persistenceRisks losing work.
Timestamp sortingCannot establish order.

None of these replaces business-operation uniqueness.

Consequences and limits

Database contention and pending-work recovery are costs. Pending rows remain retryable. Inbox and operation records are not pruned within this example.

Under these database and retention assumptions, the following together produce one local grant for this trace: eventual successful receipt, worker retries, retrieval, paid confirmation, and order matching. This is not global exactly-once execution.

Refunds, disputes, subscription changes, external fulfillment, and outbound payment API idempotency are excluded.

Original

The fictional arrival trace is invoice.paid E2, repeated E2, late invoice.created E1, and distinct duplicate invoice.paid E3. These four deliveries contain three Event IDs and two types for one invoice and order. E1 was generated before E2, possibly within the same timestamp second.

Revision

The fictional arrival trace has four deliveries for one invoice and order, in this order:

  1. invoice.paid E2
  2. A repeat of E2
  3. A late invoice.created E1
  4. A distinct duplicate invoice.paid E3

The four deliveries contain three Event IDs and two event types. E1 was generated before E2, possibly within the same timestamp second.

Sources and run record

claude-sonnet-5-5 · 2.1.322 (Claude Code). Source-fidelity review by a separate agent.

The fictional ADR paraphrases facts from Stripe's webhook, Event, event-type and Invoice documentation. Stripe documentation redistribution permission is unverified. No vendor code, figures or tables are reproduced.

Source packet and run record (JSON) · Project MIT license · Notice

Installation and use

An installed coding agent is required. The skills CLI requires Node.js 22.20 or later. Manual installation does not require this CLI.

  1. Project installation

    The command runs from the project root and installs the skill for Codex and Claude Code. The -a options select the target agents.

    The Pi agent option is -a pi. oh-my-pi uses manual installation. OpenCode support is partial.

    npx skills add JangHyun-bin/human-readable-writing --skill human-readable-writing -a codex -a claude-code

    This installs into the current project only. Codex and Pi use .agents/skills/. Claude Code uses .claude/skills/.

    The CLI sends anonymous usage data, including this public repository and skill name. DISABLE_TELEMETRY=1 disables this reporting. Telemetry details.

  2. Invocation in a fresh session

    An invocation includes the skill name and source text. It can also specify the intended reader, language, and format.

    The skill supports English and Korean documents. It keeps the source language unless translation is requested.

    Claude Code
    /human-readable-writing
    Codex
    $human-readable-writing
    Pi / oh-my-pi
    /skill:human-readable-writing

    Example request: "The reader is a maintainer. I need a PR description that preserves the source's technical terms, facts, conditions, and uncertainty."

    OpenCode uses native skill selection. CLI invocation is not reliably verified.

Installation, updates, and removal

Agent support

As of .

Claude Code
Install and invocation checked

Version 2.1.321, in project and user scopes.

Pi
Package loading checked

Version 1.4.0 loaded the project package.

oh-my-pi
Package loading checked

Version 18.18.6 loaded the project package.

Codex
Invocation unverified

Version 0.167.0 checks were blocked by provider and account errors.

OpenCode
Partial support

Some checks failed to select the skill or load references. One output changed a source condition.