Release Notes¶
Changes that affect how you integrate with Geodesia. The product version (for example 0.4.2) and the response schema version (schema_version, for example "1.0") are separate numbers: the schema version changes only when the shape of the geodesia object changes.
0.4.2 — 2026-09-24 (g1-proxy, g1-proxy-light, g1-studio)¶
Breaking change: geodesia object, schema 1.0
Clients that read glad_decision, glad_mode, glad_scores, geodesia.axis_energy or any per-axis p_detector / flag field must be updated. There is no compatibility layer. The complete old → new mapping is in Migrating from the pre-1.0 payload.
Chat API — one geodesia object, schema 1.0¶
- One object, nothing else. Chat responses (
/v1/chat/completions,/v1/completions,/api/chat,/v1/glad/evaluate) add a singlegeodesiakey to the standard OpenAI or Ollama body. The top-levelglad_decision,glad_mode,glad_scoresandgeodesia_researchkeys are gone. - Versioned schema.
geodesia.schema_version("1.0") is always the first field. - A clear verdict.
decisionisallowed,flagged(a violation was detected but the content was delivered, e.g. inpassthroughmode) orblocked(content withheld).modeisblockingorpassthrough, andreasonis{stage, axis, detail}—nullwhen the turn is allowed. - One axis shape. Every entry of
axesandadditional_axesreportsscore,threshold,flagged,availableandrole, pluslabel,raw_score,hard_block,unavailable_reasonanddetailswhere they apply. An axis that could not be measured reportsavailable: falseandscore: null— never0. -
What moved.
Before Now glad_decision(passed/blocked)geodesia.decision(allowed/flagged/blocked)glad_modegeodesia.modeglad_scores.safety_decision_rule,flagged_axisgeodesia.reason.axisgeodesia.axis_energygeodesia.axesaxis p_detector/flag/verdictscore/flagged/labeldominant_axis,brakeremoved — use decisionandreasonthinking_level,thinking_tiers_used,thinking_escalatedgeodesia.thinking.{level, tiers_used, escalated}geodesia.pii_guard(by_label)geodesia.pii(by_type)geodesia.mcpgeodesia.tool_guardgeodesia.entitlementgeodesia.quota(withreason.stage: "quota")rag.n_sourcesrag.source_count -
Typed streaming. Every SSE (or NDJSON) frame that carries Geodesia information has a
geodesia.event:input_scan,progress,researchorfinal. The verdict is on thefinalframe only. - Product names only. Internal field names are no longer exposed. The detector tiers in
thinking.tiers_usedaregeodesia_g,geodesia_h,geodesia_aandnative. context_judgeuses the same vocabulary:flagged(wasflag),claims[].index/start/end,truncated. See Context judge.
Request fields¶
- The
glad_-prefixed request aliases were removed:glad_mode,glad_thinking_level,glad_scan,glad_pii_guard,glad_axesandglad_enable_judge_for_context_hallucination. Usemode,thinking_level,scan,pii_guard,axesandenable_judge_for_context_hallucination.
Certificate geodesia-cert-3¶
- The signed certificate uses the same field names as the response:
score,flagged,available,label,raw_score,threshold_methodand a top-levelcalibrationrecord (wasglad-cert-2withp_detector,flag,verdict,p_model,thr_kind,calib). - Axes that were not measured carry
score: nullandavailable: false. certificate.verdictis the policy verdict, independent ofmode: a passthrough turn can reportdecision: "flagged"withcertificate.verdict: "blocked". See Certificate.
Web search¶
- Research progress arrives as
geodesia.researchon frames withevent: "research"(was the top-levelgeodesia_research). - Per-page screening scores use the axis vocabulary:
axes.<axis>.{score, threshold, flagged}(was{p, thr, flag}), and the deciding axis of a blocked page isaxis(wasdominant). - A
web_search: truerequest is always answered as a stream. See Live Web Search.
Tool guard (MCP-aware chat)¶
- A tool-guard block is now delivered in the format the client asked for: a single SSE chunk (or NDJSON frame) with
finish_reason: "content_filter"whenstream: true, instead of a plain JSON body. The block reportsdecision: "blocked",reason.stage: "tools"and the findings ingeodesia.tool_guard. See Chat-aware MCP guard.
Explainability — MuPAX G1 verdict¶
- The verdict-explanation API (
/v1/glad/causal-explainability/verdict/jobs) uses the schema-1.0 vocabulary: requestsource_axes(wassource_axis_energy),source_decisionvaluesallowed/flagged/blocked(waspassed/blocked), andsource_verdictis a full schema-1.0 chat response. - In the result, the view formerly called
blockisdecision, a decision mismatch is reported on the field/decision, score keys look likeaxes/jailbreak/score, and thetoken_importancesignals arescore(default),raw_score,head_score,linear_probe_zandlogit. See Explaining a served verdict.
Realtime tier scores in streaming¶
- The stream opens at once and every detector tier's scores are sent as soon as that tier has scored:
input_scanfor the prompt (Geodesia-G, then G+H, then G+H+A),progressfor the answer, each withthinking.tiers_used. The first scores no longer wait for the slowest tier or for the model. - In
blockingmode the stream now opens before the prompt verdict is complete (the model is still called only after it).
Feedback memory per Application¶
- The episodic memory is per Application: each Application's corrections are consulted only for that Application (previously one memory served every Application that had feedback learning on).
- The feedback API resolves the Application from the API key (
Authorization: Bearer g1k_…): rows of other Applications are invisible (404), naming another Application is refused (403), no key is401. Operators (gateway token) may name any Application or act across all of them. scoresaccepts the schema-1.0geodesiaobject or itsaxes.- The default Application's "Learn from feedback" switch is honoured (it was ignored: the default Application ran on the gateway configuration only). G1-Studio accepts policies that carry the 9-axis head's additional axes even when
GB_EXTRA_AXESis not set in its container. - When a thinking level is requested but Geodesia-H is unavailable, the verdict now declares
thinking: {level, tiers_used: ["geodesia_g"]}instead of looking like level 0.
Scoring bypass and explainability routing¶
scan: falsenow reportsdecision: "not_scanned"(no verdict, noaxes) instead ofallowed.- With
GW_API_TOKENset on the gateway,scan: falseis accepted only from a caller presenting that token (403otherwise). Requests relayed by G1-Studio carry it. /v1/completionshonoursconstitutional_aiandscanlike/v1/chat/completions.- G1-Studio forwards
/v1/glad/causal-explainability/analyzeand/v1/glad/causal-explainability/verdict/*to the gateway (they previously reached the control plane, which has no detector, and answered400 No model path configured). - The watermark HMAC key is no longer derived from the database path: it comes from
GLAD_WATERMARK_SECRETor a random key created once next to the database (watermark.key, mode 0600). Watermarks issued earlier still verify when the identifier is in the watermark log.
Security fix¶
- System-prompt leak axis. When the
sysprompt_leakaxis detects that an answer reproduces the protected system prompt or tool descriptions, the response no longer echoes a fragment of the protected text back to the caller. It reports only where the leak came from (details.leak_source), its kind and its coverage.