← Back to Signals
Evidentiary Construct
Stable

Epistemic Stabilization Buffer (ESB)

Bounded observation window on an already-accepted intake, closed with a declared stabilization verdict
EVIDE Framework · Optional intake profile · Introduced: EVIDE v2.0 · Revised 19 October 2026 · Emanuel Celano, Informatica in Azienda
First authenticated record: May 2026 — the Epistemic Stabilization Buffer (ESB) was introduced as an optional lifecycle extension of the Standard EVIDE intake. This page constitutes the canonical public reference for the ESB construct within the EVIDE framework.
This page describes what the platform does, as deployed. It was revised on 19 October 2026 against the code in production and an end-to-end run of the three ESB endpoints. ESB is not an evidentiary inference dimension: it does not appear in 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.
Section 1
1. What ESB Is

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.
The intake is accepted and finalized independently of ESB.
Requesting an observation window never delays, blocks, or conditions
the acceptance of the intake it is attached to.
If the buffer fails to open, the intake it is attached to has already been recorded. The two outcomes are reported separately (Section 2).
Section 2
2. Opening a Buffer at Intake
Endpoint
POST /api/intake/esb

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 the buffer object that the platform reads.
Both fields are canonicalized like any other declared field. They participate in 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:

Response — intake recorded and buffer opened (HTTP 200)
{ "success": true, "profile": "esb", "esb_status": "active", "evide_id": "...", "intake_hash": "...", // ...other Standard intake response fields... "buffer": { "ok": true, "buffer_id": 24 } }
The buffer identifier is the only buffer value returned at open time. It is required on every subsequent observation and on closure. The buffer's state is read back through the observation and closure responses, the dashboard and the evidentiary record (Section 6).

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:

Response — intake recorded, ESB not initialized (HTTP 500)
{ "success": false, "error": "esb_initialization_failed", "message": "The intake was recorded, but the ESB profile could not be initialized.", "request_recorded": true, "evide_id": "...", "esb_status": "not_initialized", "buffer": { "ok": false } }
Read 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.
Section 3
3. The Observation Cycle
Endpoint
POST /api/buffer/update

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:

FieldAllowed values
stability_trendimproving · degrading · oscillating · static
continuity_statecoherent · partially_coherent · fragmented · unverifiable
causal_persistence_signalpresent · attenuated · absent · inconclusive
stabilization_sourcehuman_review · automated_decay · quorum_resolution · timeout_expiration · external_override · mixed
signal_count_totalinteger
buffer_notesfree 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.

Each field belongs to one phase. A closing field sent to /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).

An observation is a declaration, not a verification. EVIDE records that continuity_state: coherent was declared at a given moment. It does not independently establish that the underlying situation was in fact coherent.
Section 4
4. Crystallizing the Verdict — Closing the Window
Endpoint
POST /api/buffer/close

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.

stable
Declared: the observed state satisfied the declared stabilization conditions for evidentiary boundary crossing.
unstable
Declared: the observed state did not stabilize. Requires instability_reason and buffer_notes: the declared cause of the instability must be stated.
instability_reason: authority_conflict · evidence_gap · runtime_drift · observability_loss · contradictory_signals · threshold_fragmentation · unresolved_intervention · unknown
deferred
Declared: no verdict could be crystallized within the window. The state is preserved as unresolved rather than forced toward a definitive outcome. Requires buffer_notes.
Field at closureRule
closure_triggeroptional · manual_close · auto_threshold · timeout · downstream_dependency · escalation · evidentiary_freeze
stabilization_scoreoptional · number from 0 to 100; a value outside the range is rejected, never clamped
causal_persistence_signaloptional · replaces the last observed value; if absent, the last observed value is kept
signal_count_totaloptional · if absent, the last declared value is kept, not reset
unresolved_at_closeoptional · integer
buffer_notesrequired for unstable and deferred
test_modeoptional · 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.

crossing-sufficient, NOT absolute epistemic truth
The literal value of the response field 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.

Section 5
5. The Window Is Declared, Not Enforced

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: timeout and stabilization_source: timeout_expiration are declarations made by the submitting system. They do not mean that EVIDE expired the window.
  • A buffer that is never closed stays OPEN / PENDING in the record. The absence of a verdict is itself part of what the record shows.
EVIDE is not a monitoring system.
It does not poll, does not watch runtime state on its own,
and does not decide when a buffer should close.
It records what it is told, when it is told — and when nothing more is told.
Section 6
6. What Is Recorded — Event Log, EAR Versions, FEDIS
Event log

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.

Evidentiary Artifact Record (EAR)

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.

An EAR version is never edited. The first version remains byte-identical after the closure version is generated: downloading it after closure still returns the open/pending state it showed at intake time, with the same SHA-256. A new version is created; the previous one is not modified, regenerated or superseded in place.
FEDIS

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.

Section 7
7. ESB and the Evidentiary Profile — No Relationship

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.

ESB reads nothing from the evidentiary profile.
It writes nothing to it.
The two mechanisms operate on the same intake record without ever exchanging an input or an output.
Section 8
8. Who Can Act on a Buffer — and Who Can See 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.

Non-disclosure. A 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.
Section 9
9. Error Reference

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.

ErrorHTTPEndpoint · cause
missing_field422update, close · buffer_id missing
buffer_not_found404update, close · buffer does not exist or belongs to another user
organization_authority_required403update, close · key holder no longer a member of the intake's organization
no_fields422update · only buffer_id sent
invalid_value422update · value outside the vocabulary
wrong_phase_field422update, close · field belongs to the other endpoint
unknown_field422update, close · field not recognized
buffer_closed409update · buffer already closed
already_closed409close · buffer already closed
invalid_verdict422close · verdict not stable, unstable or deferred
temporal_violation422close · less than two seconds after opening
instability_reason_required422close · unstable without a reason
invalid_instability_reason422close · reason outside the vocabulary
notes_required422close · unstable or deferred without notes
invalid_closure_trigger422close · trigger outside the vocabulary
invalid_stabilization_score422close · score outside 0–100
invalid_causal_persistence_signal422close · value outside the vocabulary
esb_initialization_failed500intake/esb · intake recorded, buffer not opened (Section 2)
Section 10
10. What ESB Does Not Determine

ESB is a lifecycle mechanism for recording declared observations over a bounded window. Its scope is precisely bounded:

  • A stable verdict 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_state and 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)
EVIDE observes what was declared during the window.
It does not verify that the declared trajectory matches what happened outside it.
The forensic significance of any ESB verdict is determined by auditors, regulators and courts — not by EVIDE.
Section 11
11. GLM Construct Declaration

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.

GLM manifest declaration — the EVIDE:ESB entry, as currently live
{ "vendor_framework_constructs": { "declared_by_owner": true, "scope_note": "Vendor-defined conceptual references. Not part of the GLM controlled vocabulary. Presence does not imply interoperability, semantic equivalence, or standardized interpretation.", "forbidden_interpretations": [ "semantic_inheritance", "implied_interoperability", "runtime_authorization", "standardized_equivalence" ], "constructs": [ { "canonical_uri": "https://app.certifywebcontent.com/docs/epistemic-stabilization-buffer/", "vendor_local_alias": "EVIDE:ESB", "label": "Epistemic Stabilization Buffer", "purpose": "Experimental governance construct that introduces a structured observation window between intake and crystallization, actively observing whether evidentiary continuity holds during stabilization.", "version": "2.0" } // further constructs declared in the same array, including EVIDE:FCC ] } }
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 boundary: The presence of ESB in the GLM manifest does not imply that ESB is part of the GLM controlled vocabulary, that it is interoperable with constructs in other vendors' manifests, or that it represents a standardized pattern. It is a vendor-defined construct declared by the owner of the EVIDE layer, governed by the scope_note and forbidden_interpretations above.

References and Related Work

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

Epistemic Stabilization Buffer · EVIDE:ESB

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."

First authenticated record: May 2026 · Introduced in EVIDE v2.0 · Revised 19 October 2026
Contact: info@informaticainazienda.it