Stages S5–S7 — Application, Verification, Reversal
Purpose
The approved packet has to become a change in a real system, a reply the customer can read, and evidence that the thing they complained about actually stopped happening. Each of those three has a specific way of going wrong, and each failure is one v1 measured.
What runs this stage
| Agents | support.resolution — the profile spans S3–S7, and here it runs S5–S7 · support.communicator for anything the customer sees |
| Isolated sub-agents | platform.write_auditor on every packet before the gate sees it |
| Memory domains | reads / proposes to support/methodologies — the five-step write, the re-check rule. The canonical owner is support.resolution; other profiles file proposals to it (D56) (Agents Memory) |
| Skills it runs | the write shapes of the catalogue, and the replay each one asserts (Agents Memory and Skills) |
| Its branch of the graph | Data and Information Module § 0 — the working stages' tree, memory branch and skills · the component list is Components — Support |
Every stage also uses support.root — the only profile that reaches the human — and the platform's write_executor and write_auditor (Gating).
1. Application
P Nothing is applied outside an approved packet, and every applied change lands in the ledger with its statement, target, environment, mode and row count — never result rows (Trust and Data § 5).
Database corrections
F The discipline is the 5-step write: show → apply uncommitted → verify in the DB → replay the consuming query → COMMIT last; failed verification is a rollback, not a discussion (protocol, proven on SD-1757).
P On the platform its shape changes, because no agent turn may span an uncommitted write: apply-verify-replay run inside one connector call, or the connector holds the transaction under a lease that rolls back on expiry (Failure and Recovery § 1). The human's approval happens before the write opens. The discipline is preserved; the open transaction across a model call is not.
F The first pass must be complete: recovery SQL includes the downstream transfer and registry repair, not just the row that looks wrong (rule). A half-repaired object is a second ticket.
UI-driven application
P Some fixes are not statements: a retransfer button, „Върни към предложение", „Enable login" (Case Studies G-10 — SD-1717, SD-1729, SD-1554). They are an application kind of their own — UI action.
F PROD IPAL holds no non-person platform identity: seven Ablera accounts, all EMPL, each bound to a person and Identity-Server-provisioned (verified 02.09.2026, Challenge Rounds § R2 § 3).
P Three acting identities, never impersonation:
| Identity | When it acts | Credential and provisioning |
|---|---|---|
the platform actor aisa.ui.<env> |
UI actions the platform performs under a grant | one USER_ACCOUNTS row per environment, COMPANY ABLERA, branch 1915213 (so a debit note it triggers never carries a customer office), the minimum roles for the action catalogue, LDAP-backed, credentials in Vault, SR_CUST_ID a synthetic contact |
| test identities | read-only replay of the customer's surface | per environment, read scope only |
| the operator's own account, in the operator's own browser | where the actor lacks the role, or the environment is read-only by scope | the operator's own credentials; the packet says "operator performs step X; the platform verifies" — a gated task naming who did it |
P The record is a WRITE_LOG row with WRITE_PATH=ui_action; UI_ACTION is a display label, not a separate table or ledger kind:
- the control, and the target handle;
- the pre-state hash — DOM text through the handle substitution;
- the backend
RequestIds observed; - the records produced:
SR_USER_NOTES,MIGR_LOG, the status triple,TRANSFERRED_ITEMS; - a screenshot artefact hash — never sent to a model;
- outcome and duration.
P Effect classes per action: retransfer and return-to-application are compensable, with the consumed number named; „Enable login" is compensable too — an Identity Server publish, an external call.
P Dry-run = reach the control and record its state; preflight = the precondition read immediately before. A UI action on a customer-facing environment is gated like a write.
C LDAP provisioning of aisa.ui.<env> (Bulstrad IT); whether „Enable login" runs under a non-administrator role.
Customer-visible output
P Public comments, transitions and emails are drafted by the communicator profile and sent only through the gate. The customer plug-in's register rules and channel behaviour apply (register.*, channels.* — Whitelabel Catalogue); for Bulstrad: Bulgarian register rules, Pending-as-resolved with customer confirmation, one internal note per ticket, pre- and post-write status refresh.
P The send-gate packet lists every re-identified datum with its audience; drafts use handles by default until approved (D116).
P Gate roles are those of Gating § 1: H5 — a customer-facing environment, not production alone (environments.<env>.customer_facing, D114) — is answered by the Approver for that environment; H7 by an Approver; and a customer-visible send (a W7-class write) is gated at H5-send, answered by the Approver for customer-visible sends.
External owners and customer-performed actions
P A designated customer or external owner acts in their own session after a gated instruction. Persist target, stable step, actor, request reference, opening time and expected returned evidence. The task parks with its age visible. A scoped response wakes verification; it does not create a platform write. Instructions resolve only an instructions-only objective. A repair waits for declared proof across the family, and a temporary exception waits for restoration. Case journeys §§ 3–4 gives the complete protocol.
Held batches
P Work approved in principle but not yet applied stays visible with its age and scope, and applying it is a single decision under the original approval with a per-item preflight. Approval and execution are separate: a proposal waits at a gate; HELD_BATCHES execution states are held, applying, applied or abandoned — and an ordered batch (scripts that depend on each other, SD-1863) is preflighted ordinally, not sampled (Case Studies G-18). P Re-preflight by age (D66): a batch older than held_batches.repreflight_after (default 7 days — Whitelabel Catalogue) is re-preflighted at application time, not at approval time — an ordered batch re-runs the preflight ordinally from the first unapplied item; a precondition that no longer holds re-opens the item's gate rather than failing mid-batch. Why: v1's HDesk backlog sat at 39 items for twelve weeks precisely because approved-but-unapplied work was invisible between sessions F: [backlog].
2. Verification
P Family cases carry an explicit membership inventory and assertion matrix (Case journeys § 4). Local statement counts supplement the mapped family invariant. Cross-system partial results are reconciled before dependent work. A consuming test can itself require a gate; verification wording never grants permission to issue, print or send.
P Verification re-checks the customer's symptom on the customer's surface — not the object that was edited.
Why: the named v1 failure is replying "fixed" after confirming the row changed, when the customer's actual action still fails F: [rule]. A corrected row and a working screen are different claims.
| Fix shape | What is re-checked |
|---|---|
| Data fix | the consuming query replayed, then the customer's own screen or document |
| Configuration | the operator path the customer described, as the customer's role |
| Code | runtime verification on the target — which commit actually serves; a VALID DB object can still be a stub F: [release audit] |
| Answer | the staleness check re-run — the remembered answer is still true against the running system (Stage Solution Take § 1) — and then the customer's confirmation is the verification: the platform moves the ticket to Pending (= resolved) and the customer completes it (D49) |
P The case reports the level actually reached (Architecture CR-3). "The row is correct" is not "the symptom is gone", and the report says which one was established.
P S6 names the surface it exercises, and where re-checking the symptom on a customer-facing environment would itself consume a number, generate a document or send a notification (Case Studies G-11), that effect is named as irreversible in the packet and approved explicitly — verification is not exempt from the effect classes.
3. Reversal
P Every applied change carries its revert path from the moment it is proposed (CR-7). Executing it is gate H7 — a human decision, never an agent's recovery reflex.
F Teardown derives from the write log: the set removed is exactly the set written (artifact). Effects outside the transaction — documents generated, numbers consumed, messages sent, external registrations — are compensated, not rolled back, and are named as irreversible in the packet where they cannot be (Failure and Recovery § 2).
4. What resolves a case — and who closes it
P The platform moves the ticket to Pending (= resolved); the customer's confirmation completes and closes it (D49; Pending-as-resolved). The platform brings it to resolved when all four hold:
- the symptom re-checked on the customer's surface;
- the customer-visible reply sent through its gate;
- the revert path recorded and still valid;
- the precipitation task durably queued with a sanitised result package; consolidation does not delay customer delivery.
F A closed ticket does not close its known issue — the KI register is walked separately, and 56 entries are open (KNOWN_ISSUES.md).
Challenges
- P Replaying the customer's surface automatically — driving the real UI as the customer's role — needs the browser connector and the declared platform/test identities and target-specific permissions; no impersonation is assumed. Until then verification names what it could and could not exercise.
- P Batch preflight effort for large held batches: per-item preflight against a 39-item batch is not free; sampling rules need defining.