← Back to writing

Make the decision once

A customer cancels the next payment and the code cancels the access they already paid for. Resolve that decision once, record it and turn it into checks the next agent inherits. The time saving is still a hypothesis.

A fictional customer pays $29 on 1 October, cancels the renewal on 12 October and is locked out the same day. “I stopped the next payment. Why am I locked out?” The customer stopped renewal. The code also stopped the access they had paid for until 1 November.

I started with Bend-style laws and agent-written proofs. Then I realised I had left the requirements work on my own desk. I want the agent to find this question, check whether it is already answered, and show me the consequences when it is not.

The possible gain is less explaining and less unpicking: find the ambiguity, keep the accepted answer and reuse its check. The examples here work, but no live agent runs on this page and the time-saving claim is still a hypothesis.

Correct code can still break the deal

“Cancel” hides two decisions: whether the next payment happens, and whether access ends now. The first implementation below answers both with one rule.

The customer stopped renewal, and the code also stopped access

A familiar SaaS mistake with a fictional customer in October 2026: paid $29 on 1 October, cancelled the renewal on 12 October, already paid until 1 November. The illustration assumes renewal stops immediately and paid access continues.

The outlined segment is the 20 paid days the first implementation removes.

Access on three dates under each rule
DateFirst implementation: cancelled → denyPeriod-end policy
1 Oct, before cancellingALLOWALLOW
12 Oct, cancelled and still paidDENYALLOW
1 Nov, paid period endedDENYDENY

Period-end policy: access = same_account && !suspended && now < paid_until

Check another date yourself

12 Oct: DENY under the first implementation; ALLOW under the period-end policy.

Cancellation happens at 12 Oct, 00:00 UTC and entitlement ends at 1 Nov, 00:00 UTC. Identity and suspension checks are held valid. The amount is fictional; no currency conversion or financial recommendation is implied. It is not a complete billing integration.

The useful question comes before the implementation

“Cancel the next renewal, or end access now?” I would resolve that once and let the answer travel. The work has four steps.

  1. Read before asking. The agent checks the terms, code and earlier decisions. Only a consequential gap comes back to you. Stripe supports immediate and period-end cancellation; the product’s policy chooses between those capabilities.[1]
  2. Record what was accepted. “Stop the next charge. Keep the paid time.” Keep its source, scope and exceptions with it. Human-owned need not mean human-written: an agent may draft the decision without gaining authority to approve it.
  3. Check both directions. 12 October must allow access. 1 November must deny it. Denying everyone is safe-looking and useless. A PRD states the goal; an SRD and a diagram expose behaviour; tests or proofs check selected properties. They have different jobs.
  4. Carry it into the next change. A later agent can refactor the code. It should show when a change alters the deal, and why that change is authorised. The output is a small decision record and relevant evidence, not a demand to keep every document format.

The next agent should inherit the answer, not your memory of the conversation. In the example, one accepted decision, BILLING-01, reaches the data, code, tests and interface.

One accepted answer feeds every view of the behaviour

An existing source or an authorised answer produces a decision record. The code, tests, interface and documents express it. This page supplies the three possible policies; no agent discovered them here.

Where BILLING-01 shows up
DecisionStop renewal. Keep paid access until 1 Nov.
Datapaid_until
Codenow < end
Tests12 Oct: allow
InterfaceUntil 1 Nov
Next agentThe decision and the relevant checks

12 Oct: ALLOW. 1 Nov: DENY. Wrong account: DENY.

Inspect the generated code, tests and documents
BILLING-01 · ILLUSTRATIVE, NOT APPROVED FOR YOUR PROJECT
Cancellation stops renewal. Existing paid access remains until paid_until.
Source: retrieve applicable terms or an authorised answer.
Unchanged: identity, suspension and expiry restrictions.

These views are generated from the local example record. They agree with each other; that consistency is not proof that the original answer was right.

From business analysis to PRD, SRD, UML and verification

The work behind those documents still matters: defining concepts, resolving contradictory rules, distinguishing observations from desired policy, and tracking assumptions. I would have agents maintain those decisions, then generate the views someone actually uses.

Generate a class diagram when the relationships matter, a state machine when ordering matters, and an evidence map when a reviewer needs to see what a result supports. A tiny script may need only an example and a short decision log.

FRETish shows that a defined requirements language can have a formally justified translation to logic. It does not make arbitrary English unambiguous.[2] A model-to-code link is one obligation. Whether the model expresses the right business need is another.[3]

The inherited research tested finite policy families, scripted LLM/Jev judgements, evidence provenance, change boundaries and counterexamples. Those are useful experiments, not a demonstrated general-purpose requirements engineer. The strongest competing hypothesis is a capable direct agent plus ordinary engineering and a short decision log.

A check can only separate cases it can see. If the program receives nothing but “cancelled”, two cases with opposite required answers look identical to it.

A proof cannot invent a missing distinction
CaseWhat the check seesThe information it was missingThe example’s deal says
12 Octobercancelled = truenow = 12 Oct, paid_until = 1 NovALLOW
2 Novembercancelled = truenow = 2 Nov, paid_until = 1 NovDENY

Seeing only “cancelled” makes these cases identical to the program. Time and entitlement separate them.

The short impossibility argument and the access contract

Let φ be the information supplied to the program, and f the required decision. If φ(x) = φ(y) but f(x) ≠ f(y), any deterministic function of φ must be wrong for at least one of the two cases: the same input produces the same output.

φ(x) = φ(y), but f(x) ≠ f(y)Same observation; different required answer.

Once the approved policy and observations are explicit, this miniature uses:

allow ↔ same_account ∧ ¬suspended ∧ now < paid_untilThe period-end policy only. Cancellation is not an access-removal condition.

The companion code enumerates a finite input space. It does not prove a clock, webhook adapter, entitlement database or entire billing service. Trials, refunds, disputes and multiple subscriptions need their own modelling and evidence. This browser does not run a theorem prover.

A brief asks for discipline; a protected check can stop a merge

Let the agent change the implementation. Keep acceptance of the rule outside its unilateral control. The agent works on code and proposed changes; the accepted rule and a required evaluator are controlled separately from it, and only then does a checked artifact reach a merge.

Only a protected boundary holds when the agent edits its own rule, and none of them catches a wrong policy

A simulation of three levels of enforcement against four kinds of change. The page’s gate function fills each cell.

What changes?Only a promptEditable local checkProtected acceptance boundary
Code breaks the accepted ruleNot caughtNo independent acceptance check blocks this code here.HeldThe local check catches this declared code violation.HeldThe required evaluator rejects the code under the accepted rule.
Agent edits the rule and its testNot caughtAn instruction cannot stop the agent changing its editable rule.Not caughtThe agent can alter both the rule and its editable check.HeldThe candidate cannot approve its own change to the rule.
A different artifact is deployedNot caughtA prompt does not bind the checked artifact to execution.Not caughtThis local check does not bind the delivered artifact.HeldThe declared protected release boundary binds the checked artifact.
The original policy was wrongNot caughtEven an obeyed instruction can start with the wrong policy.Not caughtAgreement with an initially wrong rule is still agreement.Not caughtThe boundary preserves the accepted rule. It cannot decide whether that rule was the right deal.

This is a simulation. “Protected” assumes correct permissions, complete dependency coverage and release identity. It still accepts an originally wrong policy.

What formal verification adds, and what it cannot inherit for free

A proof checker can establish its stated property under its semantics and assumptions. That is a different kind of result from a model saying a change looks right. Verus explicitly warns about assumed proofs, trusted external code and changed specifications or executable code.[4]

Keep identity, imported helpers, the evaluator and the deployed artifact in scope. A hash of the headline LAWS file does not cover an omitted dependency. A signature authenticates an assertion; it does not make its meaning correct.

Keep progress in scope too: an allowed transition does not imply that accepted work eventually completes. Concurrency, revocation, retries and remote effects need appropriate integration and operational evidence. A purely local permission check cannot guarantee them.

The brief in this article grants no additional access and installs no protected infrastructure. The starter checker is intentionally a local, editable example. The real permission boundary belongs in the project’s accepted build and release arrangements.

Use the model for the hard question, then reuse the answer

The advantage to test is less re-explaining and less rework. A smaller prompt is the easy part.

Without a retained decision, agent 1, agent 2 and agent 3 each ask what “cancel” means, and your explanation becomes a recurring dependency. With the decision and the relevant check, BILLING-01 carries the answer, its source, examples and limits into each later change. Revisit the decision deliberately when it changes. Reuse is the proposed advantage, not observed agent performance, and a stale decision must be revised rather than blindly obeyed.

Each party keeps a distinct job:

  • Coding model: investigate meaning, propose alternatives, write code and proofs.
  • Checker: repeat a defined check and report its actual scope and result.
  • You, the owner: resolve the consequential choice that existing authority does not settle.

An optional Jev-shaped judge can prioritise doubts. A probability is neither a proof nor permission. No Jev provider runs on this page.

The process has to earn its cost

Editable assumptions, not measured savings: 20 changes each month, 12 minutes of rework avoided and 3 minutes of added review per change, and 90 minutes of monthly upkeep.

Net human time per assumed month+1.5 h

The assumed saving survives the review and upkeep.

Avoided
240 m
Review
60 m
Upkeep
90 m

20 × (12 − 3) − 90 = 90 minutes

Defect consequences, money, queueing and support are outside this additive model.

Token costs: a smaller context is not a huge saving by itself

Assume twelve sessions receive an 18,000-token history instead of a 750-token decision pack. That is 216,000 tokens of repeated history against 9,000 tokens of decision context, and it avoids 207,000 input tokens. At an assumed uncached US$3 per million, the input charge avoided is US$0.62. At zero marginal input cost, it is zero.

US$0.62Potential input charge avoided; fictional token counts and price.

Caching, output tokens, pack creation and retrieval costs are excluded. A short pack that drops a necessary exception can make performance worse. Keep the archive searchable and retrieve the context the task actually needs.[5]

Why repeatedly asking an AI judge can change the risk

Suppose every candidate is wrong, and a fallible reviewer accepts one with probability q per attempt. With independent errors, K attempts give probability 1 − (1 − q)K of at least one wrong acceptance. This is not rerunning a sound proof checker.

At least one false acceptance, independent errors, all candidates wrong55.99%
Risk of at least one false acceptance as attempts increaseSolid accent line: independent errors. Dashed line: a perfectly shared error. The assumption changes the answer.0%50%100%12550
P(any false acceptance) = 1 − (1 − q)K

A perfectly shared error gives probability q instead. Actual dependence may differ from both. These formulas are exact under the supplied models, not calibration of Jev, Astra, Fable or any other system.

Authored model: q = 5%
AttemptsIndependentPerfectly shared
15.00%5.00%
418.55%5.00%
1655.99%5.00%
5092.31%5.00%

The pieces are getting useful, but the whole promise still needs a test

There is a reason to try this on a real change. There is no evidence-backed countdown.

Agents are getting better at proof construction. In Microsoft Research’s VeruSAGE study (December 2025), the strongest tested combination completed over 80% of 849 proof tasks from eight verified Rust systems. The specification was not an unfamiliar business waiting to be discovered.

A harness has a cost too. Anthropic Engineering’s harness-design case (24 March 2026) compared a solo game-maker run costing $9 with a longer, richer harness run costing $200, under different budgets and durations. Later work removed scaffolding as the model improved.

These are dated source summaries, not screenshots, current price quotes or independent replications. Publisher-page capture was blocked in this environment; no social posts or screenshots were fabricated.

What the page shows and what it does not:

  • What works on this page: finite policy logic, generated views and editable calculations.
  • What the page was given: the vocabulary, policy alternatives, intended behaviour and model assumptions.
  • What has not been shown: a real agent discovering the right policy, a secure deployment, or fewer hours of your work.

The comparison I want is a competent direct agent against the same agent with this small decision-and-check loop. Same evidence, same tools, same budget. Count wrong behaviour, unnecessary blocking, active review and rework. The simpler workflow is allowed to win.

What the accumulated research contributes

The cumulative archive contains authored finite experiments on ambiguity, incomplete vocabularies, mocked LLM/Jev judgements, source dependence, adaptive evaluation, acceptance boundaries, concurrency and economic assumptions. It also retains failed tests and changes to the argument. Counts from older rounds are not rerun claims for this article release.

The central distinction is consistent with NASA’s product-validation guidance: conformance to a specification and suitability for stakeholder expectations in the intended setting are different obligations.[3] Appropriate simulation can support a bounded claim. Synthetic purchasing or comprehension cannot establish observed customer or reader behaviour.

The proposed full workflow remains a hypothesis. Making the figures easier to inspect does not strengthen its empirical evidence. A convincing next study must test actual missing-concept discovery, meaningful owner decisions and change retention against a strong baseline.

Your next pull request is a reasonable place to start

Ask the agent for the consequential decision before it codes, and the behavioural difference before you merge. This is the output I would ask for, as an authored example:

“Cancellation no longer removes paid access early.”
DecisionBILLING-01. Keep paid access to the end of the period.
Difference12 Oct: blocked → allowed. 1 Nov: still denied.
EvidenceThe commands, outputs and cases actually checked.
Still openIdentity, clocks, webhooks, refunds, disputes and the release boundary.

Start with one bounded change. Keep the process proportionate. Neither the brief nor the example grants authority to deploy.

If this earns its keep, the next agent changes the code without making you explain the same deal again. In the fictional example, the code ran and its own tests passed. They checked an interpretation of “cancel”; the question was whether it was the accepted one. That is the question I want an agent to raise before it writes the code.

For coding agents: preserve the decision through the next change

Use a real change. The fictional billing policy is not copied into your instructions.

The brief requests work within existing permissions. It is not an enforcement boundary or permission to publish.

Sources and further discussion

The external records support particular methods or reported findings. They do not certify this workflow. The history and current reproduction kit are separate. Public-source access was checked on 20 September 2026.

  1. Stripe, Cancel subscriptions. Official documentation. Supports immediate and period-end cancellation. The example’s entitlement policy is authored, not a complete Stripe integration.
  2. A Compositional Proof Framework for FRETish Requirements. Primary research, reviewed at abstract level. A defined structured-language translation is proved semantically equivalent. It does not prove that arbitrary prose captured the right need.
  3. NASA, Product validation. Systems-engineering guidance. Distinguishes conformance from suitability for stakeholder expectations in an intended setting. Appropriate modelling can contribute.
  4. Verus, Using LLMs to develop proofs. Official proof-tool guidance. Motivates checking assumptions, trusted code and specification changes. No verifier is running in this browser.
  5. Anthropic, Effective context engineering for AI agents. Provider engineering guidance, 29 September 2025. Relevant, curated context is a design precedent. It does not quantify a gain from this decision pack.
  6. VeruSAGE, Agent-based verification for Rust systems. Authors’ summary, December 2025. 849 proof tasks from eight existing systems; strongest tested combination exceeds 80%. Proof assistance is not requirements discovery.
  7. Anthropic, Harness design for long-running application development. Provider engineering case, 24 March 2026. The solo/full-harness game-maker example cost $9/$200 under unequal durations and budgets. Later scaffolding was simplified.
  8. Nielsen Norman Group, Progressive disclosure. Interface guidance. Keep frequently needed information visible and make deeper controls discoverable. Here, the figures stay visible and derivations sit in disclosures.
  9. Nielsen Norman Group, Text scanning patterns. Eyetracking research summary. Supports explicit headings and task-dependent reading routes. Does not justify a universal attention-span number.
  10. Bret Victor, Explorable Explanations. Design precedent. Editable examples let readers challenge assumptions. A coherent static explanation remains essential.
  11. Heer & Robertson, Animated Transitions in Statistical Data Graphics. Primary study, abstract reviewed. Supports selected staged transitions in graphical-perception tasks. Does not establish that more animation improves this article.
  12. Tversky, Morrison & Bétrancourt, Animation: can it facilitate? Review and counterevidence. Warns about transience, speed and unequal-information comparisons. The final states and manual controls remain available.
  13. W3C, Animation from interactions. Accessibility guidance. Keyboard and reduced-motion checks are not complete WCAG or participant certification.
  14. Wikipedia, Signs of AI writing. Editorial observations. Used to challenge puffery, vague sourcing and repetition. These observations are not an authorship detector or prescriptive style rules.
  15. VibeMole, Avoiding generic vibe-coded design. Practitioner critique from a commercially interested source. Used as a critical checklist for generic wrappers and unsupported visual claims. The source sells related tools; its aesthetic claims are not scientific laws.

Prepared with AI assistance and reviewed by Calvin. There is no analytics, tracking, remote inference or live publishing in this page. The reader-route simulation in the accompanying pack is uncalibrated engineering analysis, not evidence that these diagrams improve actual comprehension.

Published 2026-09-05 · Updated 2026-09-28 · Source edition v17