Skip to content

v0.1.0-rc6 - #787

Merged
WaylandYang merged 51 commits into
mainfrom
dev
Sep 19, 2026
Merged

WaylandYang merged 51 commits into
mainfrom
dev

Conversation

@WaylandYang

Copy link
Copy Markdown
Contributor

Two weeks in which extraction stopped writing into a schema and started writing what documents say, and alignment learned to turn that back into typed facts. The ledger, the interface and the reading of files all moved with it.

A document is read in its own words

Extraction writes an open graph — the subject, the relation phrase as written, the object, the quote it came from — and nothing is bent to fit a class on the way in (0044, #710, #731, #736).

The ontology is a view over that, not a gate in front of it

Time

A file is read by something that says how it read it

What a call to the endpoint survives

Measured, and left alone

Capping the model's reasoning halves the thinking and costs a sixth of a filing's table figures, 885 statements against 729, and nearly double the misworded rate. The lever is documented and not pulled (#759). Two runs of the same four filings under one configuration differ by about 7% of their statements and half a point of misworded, which is the band any claim has to clear (#769).

Interface

Reads through MCP

Schema reads follow result chunks and are not truncated by the row cap (#737, thanks @rollroyces). Rule and document read failures are tool errors rather than empty successes, and the retrieval limit is applied after visibility filtering (#727, #728, #733, #734, thanks @Maya-Kid).


Thank you @Maya-Kid, @siu91, @rollroyces, @Floating-Y and @basil-k-aji-dev.

WaylandYang and others added 30 commits September 15, 2026 21:56
Back-merge main into dev
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: mayakid <29959320+mayakid@users.noreply.github.com>
Co-authored-by: mayakid <29959320+mayakid@users.noreply.github.com>
* Keep eligible retrieval hits when applying the result limit

Signed-off-by: mayakid <29959320+mayakid@users.noreply.github.com>

* Quote the retrieval test command so CI parses correctly

Signed-off-by: mayakid <29959320+mayakid@users.noreply.github.com>

---------

Signed-off-by: mayakid <29959320+mayakid@users.noreply.github.com>
Co-authored-by: mayakid <29959320+mayakid@users.noreply.github.com>
Signed-off-by: mayakid <29959320+mayakid@users.noreply.github.com>
Co-authored-by: mayakid <29959320+mayakid@users.noreply.github.com>
Signed-off-by: mayakid <29959320+mayakid@users.noreply.github.com>
Co-authored-by: mayakid <29959320+mayakid@users.noreply.github.com>
Co-authored-by: WaylandYang <145302500+WaylandYang@users.noreply.github.com>
* Closing a fact clears it from the unconfirmed queue

Signed-off-by: Qishang Zhong <zhongqishang@gmail.com>

* Delete the test organization after each case

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: Qishang Zhong <zhongqishang@gmail.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: WaylandYang <145302500+WaylandYang@users.noreply.github.com>
* A statement keeps the document's words

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A statement names its subject and object

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* Open extraction samples at temperature zero and does not unfold a bare belonging

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A value with nothing in it is no value

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* Open extraction is the default

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
A Databricks schema read on a wide catalog was cut at 201 rows
silently. The same SQL Statement Execution API call goes through
DatabricksEngine::run with row_limit = ROW_CAP + 1, intended as the
chat-query safety valve. information_schema.columns returns one row per
column, so any catalog with more than ~201 columns stops partway through
a table and nothing says so. Snowflake has the same shape: the response
includes partitionInfo with per-partition URLs that follow the first
inline chunk, and the engine reads only that first chunk.

Two fixes per engine, scoped to schema reads:

- Schema reads do not send row_limit. fetch_schema calls run with
  None; chat-query execute() keeps Some(ROW_CAP + 1). Snowflake has no
  request-body row limit to begin with — it follows the existing
  LIMIT-clause path through wrap_limit — so this is a Databricks-only
  behavioural change. The row_limit is now an Option<usize> on run.

- Both engines follow result chunks until exhausted. Databricks
  follows next_chunk_internal_link via repeated GET until the link is
  absent, then verifies rows.len() == manifest.total_row_count when
  no row_limit was set. Snowflake iterates partitionInfo from index 1
  (the first partition is the inline data already in the response),
  GET each url, and verifies partition row counts sum to numRows. Any
  mismatch bails loudly instead of returning a partial schema.

manifest.truncated on the Databricks side is now an explicit
fail-fast: a chat query that actually gets truncated by the server
returns an error rather than presenting fewer rows as a complete
answer. The previous code returned the truncated set with no
warning.

Tests (all in wiremock, no live cluster needed):

- a_schema_read_follows_chunks_until_exhausted — three chunks, all
  rows collected in order.
- a_chat_query_bails_loudly_when_the_service_says_truncated — chat
  query with manifest.truncated=true errors instead of returning
  fewer rows.
- a_schema_read_fails_when_total_row_count_does_not_match — schema
  read with a mismatch between manifest.total_row_count and the
  actual rows received errors.
- a_schema_read_follows_partitions_until_exhausted — three
  partitions on the Snowflake side, all rows collected in order.

Both new tests pass alongside the existing 9 (Databricks) and 3
(Snowflake) tests. utopia-server 304 passed, clippy -D warnings
clean, cargo fmt clean. Integration test on a real Databricks /
Snowflake warehouse is still required for end-to-end confirmation.

Refs #703

Signed-off-by: rollroyces <rollroyces@users.noreply.github.com>
Co-authored-by: rollroyces <rollroyces@users.noreply.github.com>
* A memory waits in its own words

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A nod cites the sentence, not the whole episode

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A qualifier pill keeps to the spacing scale

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* Extraction reads only the open graph

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A description becomes an entity only when a statement points at it

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* A time mention is resolved against its document

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* As of a period means its end, and a whole year is one bucket

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A relative period anchors to the document and a count inside a trial does not

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* A kind word binds to a class

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* One alignment run per base at a time

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* A table keeps its headings, its sections and its caption

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A table row takes its period from the header in the same chunk

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A change between periods is a phrase, not a time

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A dash stays in its cell and a continued table keeps its headings

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A phrase that repeats the value or the subject is counted, not dropped

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* rustfmt

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* 0044 proposes reading a document in stages

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* 0044 says which builds the model comparison ran on

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* 0044 keeps lexicons as governed data

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* 0044 makes the ontology a view over what documents say

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* 0044 reports judged precision and gold recall instead of F1

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* 0044 makes alignment produce bindings and implication rules on a workbench

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* 0044 says alignment reads the source

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* What prior work taught us

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The extraction design names the phrase rule and the term gate

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The design says how a table is read

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The table item is number 26

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* 0043 waits for alignment

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* A statement says its mood and a subjectless sentence takes the passage's subject

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A table row is not a subjectless sentence

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A table row is recognised by the line it sits on

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A mood is a requirement, a plan or a condition, never a report; the subject rule is withdrawn

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* The records say what is built

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The records say what is built

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* The quote comes first

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* Figures are counted before a second pass is built

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The design pages point at their pull request

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* A misworded verdict says which way it is wrong

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The design pages point at their pull request

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* A table is a table in every format

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The design pages point at their pull request

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A line break outside a cell is a match guard

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* A phrase binds to a property

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* An unbound end fits only an undeclared one, and a skipped run queues behind the running one

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* An alignment run looks for new work when it ends

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The ontology page says what phrase binding measured

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The design pages point at their pull request

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* A bound statement becomes a typed fact

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The ontology page says the typed graph is computed

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The design pages point at their pull request

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
WaylandYang and others added 21 commits September 18, 2026 11:02
* One typed fact for many statements

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A superseded row hands its sources to the row that replaced it

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The design page points at its pull request

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* The aligner's open questions have a queue

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The governance page lists the alignment queue

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The design page points at its pull request

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* One statement draws one edge

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The design pages say one statement draws one edge

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The design pages point at their pull request

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
…756)

Signed-off-by: Qishang Zhong <zhongqishang@gmail.com>
* A bulk ontology edit queues one alignment run

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A gateway failure is transient, not a rejection

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A name is not removed on one click

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A request that never arrived is worth sending again

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A passage that could not be extracted is a row

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A burst of ontology edits debounces into one run

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* Extraction listens to the model think

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A stream that stops mid-answer is not an answer

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
* A reasoning cap is measured and left alone

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A timeline closes on how a date was got

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* Format the timeline changes

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The merge simulation reads the grade too

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* A described observation is what holds a pair for a person

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
* Fix GBK-encoded PDF text extraction

Signed-off-by: Floating-Y <118035379+Floating-Y@users.noreply.github.com>

* An empty fallback is not a scan

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: Floating-Y <118035379+Floating-Y@users.noreply.github.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: WaylandYang <145302500+WaylandYang@users.noreply.github.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
* A table cell takes the period of its own column

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

* The tab strip starts where the rows do

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: dada-yan <BinjunYann@gmail.com>
Co-authored-by: WaylandYang <145302500+WaylandYang@users.noreply.github.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: dada-yan <BinjunYann@gmail.com>
Co-authored-by: WaylandYang <145302500+WaylandYang@users.noreply.github.com>
* Reconsider negative bindings when existing definitions change

Signed-off-by: dada-yan <BinjunYann@gmail.com>

* Explain the model work an ontology edit reopens

Signed-off-by: dada-yan <BinjunYann@gmail.com>

---------

Signed-off-by: dada-yan <BinjunYann@gmail.com>
Co-authored-by: WaylandYang <145302500+WaylandYang@users.noreply.github.com>
* Keep XML references from truncating WebDAV file paths

Signed-off-by: dada-yan <BinjunYann@gmail.com>

* An empty redeclaration does not clobber a property

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: dada-yan <BinjunYann@gmail.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: WaylandYang <145302500+WaylandYang@users.noreply.github.com>
* Preserve Unicode when streamed model replies split a character

Signed-off-by: dada-yan <BinjunYann@gmail.com>

* Use Chinese comments for UTF-8 stream buffering

Signed-off-by: dada-yan <BinjunYann@gmail.com>

---------

Signed-off-by: dada-yan <BinjunYann@gmail.com>
Co-authored-by: WaylandYang <145302500+WaylandYang@users.noreply.github.com>
* Keep indexed embedding responses paired with their input texts

Signed-off-by: dada-yan <BinjunYann@gmail.com>

* An index that is not a number is not an index

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: dada-yan <BinjunYann@gmail.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: dada-yan <BinjunYann@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
* Reject model streams that end before completing their turn

Signed-off-by: dada-yan <BinjunYann@gmail.com>

* Count interrupted stream content in Unicode characters

Signed-off-by: dada-yan <BinjunYann@gmail.com>

---------

Signed-off-by: dada-yan <BinjunYann@gmail.com>
Co-authored-by: dada-yan <BinjunYann@gmail.com>
* The token ceiling is ours, and a cut reply says so

Extraction never sent `max_tokens`, so where a long answer stopped was decided
by the endpoint's own default: with reasoning off, a dense passage's answer
stopped at exactly 4,096 completion tokens with `finish_reason: length`, and
that JSON could not be parsed.

Send an explicit 16,384 on the streamed calls — four times the longest answer
measured on this path. This endpoint ignores the field with reasoning on, where
a call capped at 4,096 returned 45,428 completion tokens and finished normally;
it honours it with reasoning off, which is where the truncation was seen. The
field costs nothing where it is not read.

Carry `finish_reason` out with the answer rather than dropping it once the
stream is known to have ended. A reply cut at the ceiling is a valid string and
looks complete to the parser, so the drop row could only say the reply did not
parse. It now says the reply hit the token ceiling, and the two causes stay
apart: an answer that is too long is a number to change, a reply that does not
fit the shape is not.

Fixes #760

Signed-off-by: basil-k-aji-dev <70605804+basil-k-aji-dev@users.noreply.github.com>

* The ceiling is measured against the completion, not the answer

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>

---------

Signed-off-by: basil-k-aji-dev <70605804+basil-k-aji-dev@users.noreply.github.com>
Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-authored-by: basil-k-aji-dev <70605804+basil-k-aji-dev@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@WaylandYang
WaylandYang merged commit ee8a873 into main Sep 19, 2026
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants