Epistemic Stabilization Buffer (ESB)
evidentiary_profile, it is not computed from the declared payload, and it does not produce a continuity/decision_wave_compression/formal_accountability_collapse-style state. It is an opt-in lifecycle mechanism attached to an intake that has already been accepted.
- 1. What ESB Is
- 2. Opening a Buffer at Intake
- 3. The Observation Cycle
- 4. Crystallizing the Verdict — Closing the Window
- 5. The Window Is Declared, Not Enforced
- 6. What Is Recorded — Event Log, EAR Versions, FEDIS
- 7. ESB and the Evidentiary Profile — No Relationship
- 8. Who Can Act on a Buffer — and Who Can See It
- 9. Error Reference
- 10. What ESB Does Not Determine
- 11. GLM Construct Declaration
The Epistemic Stabilization Buffer (ESB) is an optional intake profile. A record deposited through the ESB endpoint is accepted, canonicalized, hashed and finalized exactly like a Standard intake; in addition, a bounded observation window is opened on it. While the window is open, the submitting system can record declared observations of a situation that is still evolving. The window is then closed with a declared stabilization verdict, which is crystallized into a new version of the evidentiary record.
ESB is requested, not inferred. It is opened only by depositing through POST /api/intake/esb: every successful intake on that endpoint opens a buffer, whether or not the optional ESB fields described in Section 2 are declared. The Standard endpoint never opens a buffer and refuses the ESB fields.
- One buffer per intake. A buffer is opened only at the moment of intake. It cannot be added later to an intake that was deposited without it, and it cannot be reopened once closed.
- API only. ESB is available through the EVIDE API and through the EVIDE MCP server, which calls the same endpoints. It is not offered for manual deposits from the dashboard or for deposits from EVIDE Mobile.
- Everything is declared upstream. EVIDE does not observe the situation on its own. Every observation and every closure is an explicit call made by the submitting system.
Requesting an observation window never delays, blocks, or conditions
the acceptance of the intake it is attached to.
The endpoint accepts the complete Standard 2.1 payload, with the same authentication, validation and DAPI binding, plus two optional top-level fields:
buffer_window_hours— the declared duration of the observation window, as a positive integer number of hours. A string such as"2", zero or a negative number is not accepted.buffer.stabilization_source— the declared mechanism expected to produce the eventual verdict. One of:human_review,automated_decay,quorum_resolution,timeout_expiration,external_override,mixed. It is the only member of thebufferobject that the platform reads.
intake_hash: declaring a different buffer_window_hours produces a different intake_hash, even when every other field is identical. The Standard endpoint (/api/intake/json) refuses them with 422 invalid_field rather than ignoring them, because an unvalidated field would otherwise enter the hash.
On success, the response carries the Standard intake response fields, together with "profile": "esb", "esb_status": "active" and a buffer member:
If the intake succeeds but the buffer cannot be opened, the intake is not rolled back — it has already been recorded. The response reports the failure explicitly:
request_recorded and evide_id before treating this as a failed submission. success: false describes the ESB profile only; the intake was accepted, hashed and finalized. The most common cause is an invalid ESB value — for example buffer_window_hours sent as a string, or a stabilization_source outside the vocabulary. The ESB values are validated when the buffer is opened, after the intake has been recorded: the invalid value is therefore part of the recorded payload and of its hash, the specific reason is not returned in the response, and the intake cannot be given a buffer afterwards. Validate both values before sending.
While a buffer is open, any number of observations may be recorded against it. Each observation declares how the situation is evolving, using a fixed vocabulary:
| Field | Allowed values |
|---|---|
| stability_trend | improving · degrading · oscillating · static |
| continuity_state | coherent · partially_coherent · fragmented · unverifiable |
| causal_persistence_signal | present · attenuated · absent · inconclusive |
| stabilization_source | human_review · automated_decay · quorum_resolution · timeout_expiration · external_override · mixed |
| signal_count_total | integer |
| buffer_notes | free text (up to 4,000 characters) |
Every field is optional on a single call, but at least one is required: a call carrying only buffer_id is rejected with no_fields. A successful call returns the number of fields updated.
/buffer/update (such as buffer_verdict or closure_trigger) is rejected with wrong_phase_field, naming the endpoint it belongs to; a field unknown to the system is rejected with unknown_field. Nothing is silently ignored. stability_trend, continuity_state and stabilization_source can be declared only during observation, never at closure: the declared source can therefore evolve while the window is open, but not at the moment of the verdict.
The buffer itself always holds the latest declared values. The history is not lost: every observation is written to the buffer's event log together with the state before and after it (Section 6).
continuity_state: coherent was declared at a given moment. It does not independently establish that the underlying situation was in fact coherent.
Closing a buffer requires exactly one of three verdicts, declared by the submitting system. The verdict pending exists only while the buffer is open and is never sent by the client. EVIDE preserves the declared verdict and the elements declared with it; it does not establish, on its own, whether the observed system was in fact stable or unstable.
instability_reason and buffer_notes: the declared cause of the instability must be stated.buffer_notes.| Field at closure | Rule |
|---|---|
| closure_trigger | optional · manual_close · auto_threshold · timeout · downstream_dependency · escalation · evidentiary_freeze |
| stabilization_score | optional · number from 0 to 100; a value outside the range is rejected, never clamped |
| causal_persistence_signal | optional · replaces the last observed value; if absent, the last observed value is kept |
| signal_count_total | optional · if absent, the last declared value is kept, not reset |
| unresolved_at_close | optional · integer |
| buffer_notes | required for unstable and deferred |
| test_mode | optional · true bypasses the minimum window below (test environments only) |
A minimum window applies: closing less than two seconds after opening is rejected as temporal_violation, unless test_mode: true is set. The closure response returns the verdict, the opening and closing times (UTC), the length of the window in seconds, the closure trigger, the score and the causal persistence signal.
semantic_note, returned with every stable verdict (it is null for unstable and deferred). It is the governing non-claim of the construct — see Section 10.Once closed, a buffer is permanently closed. It cannot be updated or closed again, and the two misuses are distinguished at the API level — buffer_closed from /buffer/update, already_closed from /buffer/close, both with HTTP 409. If two closures arrive at the same moment, exactly one is applied; the other receives already_closed with the verdict that was actually recorded. The same protection applies to an observation that arrives while the buffer is being closed.
buffer_window_hours records the duration that the submitting system declared for its observation. The platform does not run a timer on it: a buffer is not closed automatically when the declared window expires, and it remains open until the submitting system closes it.
- The dashboard shows the declared window, the actual duration and the window utilization (actual duration ÷ declared window). A utilization above 100% means that the buffer was kept open longer than declared — a fact that remains visible, not an error that the platform corrects.
closure_trigger: timeoutandstabilization_source: timeout_expirationare declarations made by the submitting system. They do not mean that EVIDE expired the window.- A buffer that is never closed stays
OPEN/PENDINGin the record. The absence of a verdict is itself part of what the record shows.
It does not poll, does not watch runtime state on its own,
and does not decide when a buffer should close.
Every step of the buffer's life is written to an event log: the opening, each observation and the closure. Each event records its UTC time, the declared values and the complete state of the buffer before and after it. Events are only added, never edited.
Every intake produces an EAR the moment it is finalized, with or without ESB. Opening a buffer does not delay it: the first EAR version (trigger_reason: intake_finalized) already carries an ESB section showing Status: OPEN, Verdict: PENDING and the lifecycle Open.
Closing the buffer automatically generates the next EAR version (trigger_reason: esb_closed) — normally version 2. It carries the final ESB state:
- status, verdict, opening and closing times (UTC);
- stabilization score, causal persistence, stability trend and continuity state, when declared;
- instability reason and closure trigger, when declared;
- the number of observation events, the lifecycle (for example
Open -> Unstable) and the notes.
The declared window and the stabilization source are not restated in the EAR; they are kept on the buffer and in its event log, and are shown on the dashboard.
A FEDIS issued for the intake references, with its SHA-256, the EAR version current at issuance, and states the trigger that generated it — ESB closed (automatic) when that version is the closure record. The FEDIS does not restate the ESB verdict or timeline: they are in the EAR it references. A FEDIS requested while the buffer is still open references the version that shows the window open.
The evidentiary profile — identity, authority, classification, threshold, boundary_readiness, runtime_visibility, and the three inferred dimensions continuity (FCC), decision_wave_compression (DWC) and formal_accountability_collapse (FAC) — is computed exactly once, at intake, from the payload declared at that moment.
ESB operates entirely afterward, on a separate set of fields, stored in a separate structure and reported in a separate section of the EAR. Observing a buffer through any number of updates and a closure never recomputes FCC, DWC or FAC — even when the declared stabilization signals evolve significantly across the window. The buffer's continuity_state and FCC's continuity are two different vocabularies: the dashboard displays them with the same four colours for readability, and nothing more connects them.
It writes nothing to it.
A buffer belongs to the intake it was opened on, and therefore to the user who deposited that intake. Observing or closing it requires an API key bound to that same user, which passes every check that applies to intake: a key that is active and not revoked, expired or suspended; an activated API plan; an active EVIDE account.
If the intake was deposited for an organization, the key holder must also be a current member of that organization at the time of the call, whatever key is used. A member who has left the organization cannot observe or close the buffer: the call is refused with 403 organization_authority_required and nothing is written. Authority to act is assessed at each call; historical attribution of the deposit does not confer it.
buffer_id that does not exist and a buffer_id that belongs to another user return the identical response: 404 buffer_not_found. A response that distinguished the two cases would let a caller enumerate valid buffer identifiers by observing which error comes back.
- Visibility. The ESB panel is shown read-only on the intake page in the dashboard: verdict, declared window, duration and utilization, the declared values and the events recorded. A depositor who has left the organization keeps read-only access to the intakes they deposited, including this panel, without any power to act.
- Deletion. When the deletion of an intake is authorized, its buffer and the buffer's event log are deleted together with it.
Observation and closure errors use the same response shape: {"success": false, "error": "...", "message": "..."}. Authentication, plan, account and organization errors are those of the intake endpoints.
| Error | HTTP | Endpoint · cause |
|---|---|---|
| missing_field | 422 | update, close · buffer_id missing |
| buffer_not_found | 404 | update, close · buffer does not exist or belongs to another user |
| organization_authority_required | 403 | update, close · key holder no longer a member of the intake's organization |
| no_fields | 422 | update · only buffer_id sent |
| invalid_value | 422 | update · value outside the vocabulary |
| wrong_phase_field | 422 | update, close · field belongs to the other endpoint |
| unknown_field | 422 | update, close · field not recognized |
| buffer_closed | 409 | update · buffer already closed |
| already_closed | 409 | close · buffer already closed |
| invalid_verdict | 422 | close · verdict not stable, unstable or deferred |
| temporal_violation | 422 | close · less than two seconds after opening |
| instability_reason_required | 422 | close · unstable without a reason |
| invalid_instability_reason | 422 | close · reason outside the vocabulary |
| notes_required | 422 | close · unstable or deferred without notes |
| invalid_closure_trigger | 422 | close · trigger outside the vocabulary |
| invalid_stabilization_score | 422 | close · score outside 0–100 |
| invalid_causal_persistence_signal | 422 | close · value outside the vocabulary |
| esb_initialization_failed | 500 | intake/esb · intake recorded, buffer not opened (Section 2) |
ESB is a lifecycle mechanism for recording declared observations over a bounded window. Its scope is precisely bounded:
- A
stableverdict does not establish factual correctness, legal validity or absolute epistemic truth — it records that the submitting system declared its stabilization conditions satisfied, nothing more - ESB makes the declarative chronology before the verdict reconstructable — which observations and declarations were deposited, in which order, when and by whom — not the internal reasoning or the decision process that produced the verdict
- ESB does not independently verify the observations recorded during the window —
stability_trend,continuity_stateand every other observation field are declarations, not EVIDE-verified facts - ESB does not enforce the declared window and does not close a buffer on its own (Section 5)
- ESB does not reopen, extend or amend a closed buffer — closure is final
- ESB does not alter an existing EAR version — the record of the open window remains exactly as generated (Section 6)
- ESB does not modify the evidentiary profile computed at intake — FCC, DWC and FAC are unaffected by any observation or by the closure verdict (Section 7)
It does not verify that the declared trajectory matches what happened outside it.
ESB is declared as a vendor framework construct in the public EVIDE GLM manifest, under vendor_framework_constructs, using the vendor-local alias EVIDE:ESB. The entry below is reproduced from the live manifest (manifest_version 8.0, published 12 September 2026), without restatement or expansion.
label, vendor_local_alias, purpose and version above are the original wording declared in May 2026 and are carried forward unchanged. canonical_uri was updated to this page in manifest version 8.0, published on 12 September 2026. Its purpose text is read together with, not in place of, the operational description on this page: the "observing" it refers to is the recording of observations declared by the submitting system (Sections 3 and 5), not monitoring performed by EVIDE; and EVIDE does not thereby establish, on its own authority, that the declared trajectory was true (Section 10).
scope_note and forbidden_interpretations above.
EVIDE Framework: certifywebcontent.com - Evidentiary Deposit
API Reference — ESB Buffer: app.certifywebcontent.com/api-reference
EVIDE JSON Schema: app.certifywebcontent.com/json
EVIDE Intake Schema Documentation: Intake schema reference
Evidentiary Artifact Record (EAR): EAR versions and their triggers
EVIDE MCP Server: ESB tools for agentic systems
Forensic Cross-Check (FCC): Server-computed evidentiary inference
DWC/FAC Technical Note: Decision Wave Compression and Formal Accountability Collapse
EVIDE v2.x Roadmap: Architectural Backlog and Experimental Constructs
ESB opens a bounded window on an already-accepted intake.
It records what was declared while the situation evolved.
It does not decide. It does not verify. It records.
A stable ESB verdict is crossing-sufficient. It is not, and does not claim to be, absolute epistemic truth.
"The evidentiary value of a stabilization window depends not on whether
the eventual verdict was correct, but on whether every observation
recorded during that window remains exactly as declared."
Contact: info@informaticainazienda.it