All entries

    “Done” Is Not a Database Write: Honest AI Confirmations

    Why AI assistants claim edits they did not make, and how previews, execution evidence, failure copy and refreshed state create a more trustworthy experience.

    Railway operators verify the actual track switch before marking a confirmation in a pixel-art control room
    GPT-generated Japanese-inspired pixel-art illustration. Conceptual artwork, not a screenshot, measured result or depiction of private product data.

    There is a particular kind of AI failure that feels worse than an uncertain answer: a confident claim that something changed when it did not. The person closes the chat, checks their plan and finds the old value. UltraFit360’s quality review identified this family of behaviour, and the current coach code contains safeguards that compare change claims with successful tool effects. That does not prove every intended edit is correct. It does show a useful direction: tie a confirmation to application evidence, not the grammatical confidence of a sentence.

    The user’s mental model is reasonable

    When a product says “Saved,” people expect the change to survive navigation and refresh. They do not expect that word to mean “the language model composed a sentence about saving.” Traditional forms can break this expectation too, especially when they show success before a request resolves. An AI interface adds another way to produce the same misleading signal.

    A fictional example makes the distinction clear. A user asks to move a meal entry to another day. The assistant understands the request and describes the correct new date, but lacks an operation that can perform the move. Saying it is done would turn understanding into an invented execution result. The honest answer is to explain what is possible and what remains unchanged.

    Separate intention, preview and commitment

    I find it useful to model three states. Intention is the user’s desired change. A preview is the proposed mutation against a particular existing resource. Commitment is the successful application operation. Approval may sit between preview and execution, but approving a proposal does not itself establish that the save succeeded.

    The interface should make these states visibly different. A preview card can show before and after. An execution state can show that the operation is pending. A confirmation should describe the result returned by the application. If a request fails, retain the proposal where helpful and offer a safe retry, rather than quietly replacing the error with an optimistic sentence.

    Scroll the table horizontally to see all columns.

    Separate intention, preview and commitment
    StateWhat it establishesSafe wording
    ProposedAn intended changeReview this proposal
    ApprovedPermission to attempt itApplying your change
    CommittedOperation returned successSaved the specified change
    UncertainOutcome not establishedChecking whether it was saved

    A successful tool call needs a contract

    A tool runner returning text is not automatically evidence of success. “Unable to update” is still text. A JSON object can describe a preview rather than a committed write. A useful tool contract distinguishes those outcomes and makes failure explicit enough for both the agent and the surrounding application to interpret.

    Current source inspection shows the coach collecting tool outcomes and using successful write effects when considering false confirmations. That is a concrete safeguard, not a universal proof of correctness. The application still needs to know whether the right record, requested value and authorised account were involved. A successful unrelated write must not be treated as permission to claim that every requested edit happened.

    EXPLAINED / STATE CONTRACT

    What the interface can safely claim

    Approval permits an attempt. A committed result is the evidence for a saved change.

    Transaction vocabulary

    1. Proposed

      “Review this proposal.” No change has been saved.

    2. Approved

      “Applying your change.” Permission exists; success does not yet.

    3. Committed

      “Saved the specified change.” The operation established success.

    4. Failed or uncertain

      State the failure, or check the outcome before claiming completion.

    THE KEY DISTINCTION

    A well-worded confirmation is not a substitute for an enforced operation contract and a known result.

    These are distinct evidence states. An uncertain operation must be reconciled rather than blindly repeated.

    Read the state that is about to change

    Conversation history can describe a plan that has already changed elsewhere. Reconstructing a current programme from earlier chat is therefore a poor substitute for reading its actual state. A preview should be anchored to the resource being edited, especially when the user refers to “that one” or “the second session.”

    If two entries match, clarification is preferable to guessing. The relevant ambiguity is not whether the model can write a fluent explanation. It is whether the application can identify the intended object. A fictional duplicate snack entry or similarly named session is enough to test this behaviour without exposing anyone’s real history.

    Failure copy is part of the transaction

    “The save failed; your plan is unchanged” gives a user more useful information than “Something went wrong.” It describes the consequence. If the system cannot establish whether a timeout occurred before or after commitment, the wording should reflect uncertainty and the retry path should avoid duplicating the operation.

    This is where idempotency and reconciliation become user-experience concerns. Repeating the same request should not silently create two records. A subsequent read can help establish the saved outcome. The exact implementation depends on the operation, but the user-facing distinction remains the same: failed, uncertain and completed are different states.

    A text guard is a safety net, not the foundation

    A server-side guard can detect a completed-change claim when no successful write occurred and attach a correction. That can reduce an obvious contradiction. It is still difficult to recognise every language, tense, implied statement and tool-result edge case with text patterns alone.

    I would therefore use several layers: explicit operation results, prompts that require truthful reporting, evaluation cases for failed and missing writes, and a final check for unsupported confirmations. The last layer should be monitored for false positives too. A reply describing what a user previously logged is not necessarily claiming that the assistant just logged it.

    Show the useful evidence in the frontend

    The user does not need a raw trace or an internal identifier. They need to know which entry changed and what the new value is. A compact result card can show a human-readable label, the changed field and a link to the refreshed screen. That is enough transparency for many tasks without exposing infrastructure.

    The editorial assistant image in this article uses actual website text-rendering components with invented messages. It demonstrates the distinction between a proposed change and a failed save. It is not a real conversation or a claim that the model always returns those exact words. Preserving that distinction is part of publishing honestly about the product.

    The tests I would keep

    Test a successful edit, a permission refusal, an unavailable tool, a preview-only result and a timeout with an uncertain outcome. Add a case where another write succeeded but the requested operation failed. That catches a simplistic “any write means success” interpretation.

    Also check the next screen. A backend write can succeed while the UI displays stale cached data. In that case the confirmation may be truthful but the experience remains confusing. Query invalidation, resource identity and visible pending states belong in the same end-to-end story.

    Questions worth asking

    Can better prompting solve false confirmations? It can help, but prompts cannot create missing application capabilities or guarantee transactional correctness. Tool contracts and application checks must carry part of the responsibility.

    Does asking “Are you sure?” make a write safe? Only if approval is actually tied to the intended operation and enforced at the correct boundary. A model confirming its own preview is not independent human approval.

    What should the assistant say when it cannot act? A direct explanation of the limitation and a useful next step. Admitting that nothing changed preserves trust better than forcing the user to discover a fictional success after leaving the chat.

    FURTHER READING

    Sources

    Technical references checked .

    END OF ENTRY / 11
    BEHIND THE JOURNAL

    Eeshan Singh

    I’m Eeshan Singh Pokharia, an AI Full Stack Developer and CoFounder of UltraFit360. I work across AI features, full-stack product development, and web and mobile experiences—from Figma and frontend interactions to the systems behind them.

    A false success message creates two interfaces that disagree: the assistant and the saved plan. I want this entry to explain that disagreement from the user’s side and show why reliable tool results matter more than persuasive confirmation copy.

    Meet the author