Skip to content

Sync upstream dev into re-dev (2026-10-24): #1390 and 9 more - #39

Merged
gedaiu merged 11 commits into
re-devfrom
sync/upstream-dev-2026-10-24
Oct 24, 2026
Merged

gedaiu merged 11 commits into
re-devfrom
sync/upstream-dev-2026-10-24

Conversation

@gedaiu

@gedaiu gedaiu commented Oct 24, 2026

Copy link
Copy Markdown

Brings re-dev up to upstream dev at 03562d0f: 10 commits, deeplethe#1390 (an identity source's names get no name vectors, and turning the flag on drops the ones stored), deeplethe#1396 (changes and entity_facts page with an offset), deeplethe#1370 (a class's declared attributes reach the typed graph), deeplethe#1369 (a base can start from a scenario pack), deeplethe#1404, deeplethe#1400, deeplethe#1402 and deeplethe#1406 (quarter intervals, capitalised magnitude and approximate words, ordinal dates), deeplethe#1395 (a late extraction reply for a superseded job is discarded) and deeplethe#1394 (a model that refuses max_tokens or temperature is retried without them). The dev mirror was fast-forwarded to upstream first.

Upstream dev holds the truth: where fork code conflicts with upstream, upstream's version is taken.

Conflict. One, in extraction_open.rs at the end of run_open. Upstream added the identity drop (name_vectors::drop_for_document when the document comes from an identity source) and embeds pending names inline. The fork queues the embed_names job there instead (deeplethe#1296). Upstream's drop is taken as is, and the inline embed is replaced by the job enqueue as before. The job goes through name_vectors::pending and name_vectors::set, which now skip and refuse names with identity evidence, so it follows deeplethe#1390's rules with no change of its own.

Build fix. deeplethe#1390's test an_identity_name_attaches_by_its_exact_name.rs calls sources::update with upstream's six arguments; the fork's decay setting (RC-003) adds a seventh, so the call passes None for it.

Schema version 113. No upstream migration came in; 113 migration files, CURRENT_SCHEMA_VERSION stays 113.

Checked on the merge: migrations ran twice on a fresh database, cargo fmt --all -- --check and cargo clippy --workspace --all-targets -- -D warnings are clean, UTOPIA_TEST_REQUIRE_DB=1 cargo test --workspace is green: 1771 passed, 0 failed, 6 ignored. Web files changed, so the web checks ran: style guard, tsc --noEmit clean, vitest run 342 tests in 48 files.

gedaiu and others added 11 commits October 24, 2026 11:38
…ing the flag on drops the ones already stored (deeplethe#1390)

Signed-off-by: Bogdan Szabo <bogdan@re-cinq.com>
… page, and find_entities reports its match count in MCP output (deeplethe#1396)

Signed-off-by: Aschenbath <Aschenbath@users.noreply.github.com>
Co-authored-by: Aschenbath <Aschenbath@users.noreply.github.com>
Co-authored-by: WaylandYang <145302500+WaylandYang@users.noreply.github.com>
…ty gets its bound class, a dated statement reads as its period, a text attribute takes a named object, an unreadable value is a drop row (deeplethe#1370)

* An attribute declared on a class reaches the typed graph: a late entity gets its bound class, a dated statement reads as its period, a text attribute takes a named object, an unreadable value is a drop row

Measured on four company profiles with one class and six attributes, 18 value
statements gave 5 typed facts. Four gates, two of them bugs:

- A kind word bound while a document was still extracting never reached the
  entities that document created afterwards: extraction reads the binding table
  once, and a decision projects itself only when it is written.
  `type_bindings::apply_bound` now runs at the end of every extraction and at
  the start of every kind-word alignment run.
- A bound value the attribute's datatype could not read was skipped in silence.
  Materialisation records it as `attr_datatype` in `extraction_drops`, rewritten
  as a set on every recompute, shown in the Library's drop panel.
- A statement dated at a single moment, bound to a state attribute whose
  binding marks neither end, computed no row (`MOMENT_UNREAD`), so no annual
  figure ever typed. It now holds over the period the date names, with
  `end_after_period` (0053 revision 2026-10-22).
- An attribute whose value is a name (法定代表人) never had a candidate because
  extraction lists the name as a thing. A text attribute with a declared domain
  is now a candidate for an entity-object signature, forward only; the object's
  name becomes the value (0044 revision 2026-10-22).

After the four: 12 typed attribute facts from the same documents with the
hand-written ontology, 23 with the enterprise-profile scenario pack (0073, a
separate change).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Wayland Yang <wayland@WaylanddeMacBook-Pro.local>

* The period reading of a single date applies to attributes only; a relation at a single moment with no marks still computes no row

CI's `a_moment_marks_its_state` suite showed what the period reading does to a
relation: "joined on 2023-06-01" read as a one-day span closes the open
works-for row that starts the same day at the next day, through the write gate's
"same start, this observation brings an end, that row is open" rule. That is an
ending the document never stated. A dated value is a measurement for its period
and has no such neighbour, so the reading stays for attributes (the annual
figures that motivated it) and the 2026-09-27 rule stands for relations,
including a rule that concludes a relation from a single-date statement.

The record, the design file and the suite's header say so; the four relation
cases pass unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Wayland Yang <wayland@WaylanddeMacBook-Pro.local>

* The typed-to-untyped namesake case expects the aligned class the catch-up projection writes

Resolution still gives no entity a class: a chosen untyped namesake records the
mention's kind word and leaves the class to alignment. With the kind word bound
to Person, the projection that runs when the extraction ends now types it
`aligned`, where it used to stay empty only because that projection was
missing. The case checks the class and its source instead of an empty type.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Wayland Yang <wayland@WaylanddeMacBook-Pro.local>

---------

Signed-off-by: Wayland Yang <wayland@WaylanddeMacBook-Pro.local>
Co-authored-by: Wayland Yang <wayland@WaylanddeMacBook-Pro.local>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…mpetency questions one kind of corpus is read for (deeplethe#1369)

The standard packs give types, not the predicates a corpus needs, and the empty
start grows a vocabulary only after documents arrive. A scenario pack (0073) is
the top-down start: one JSON file embedded in the binary, bilingual, with
definitions written for the aligner, datatypes and units already right, and the
questions the base is meant to answer. It installs at creation through the
editor's own calls, so its elements are the base's own; a key that already
exists is skipped and reported; questions are created accepted with the
creating person as author; `embed_ontology` is queued.

Three packs ship: 企业档案 (enterprise-profile), 合同链 (contract-chain),
人事档案 (personnel-records). `GET /scenario-packs` lists them and the creation
dialog has a second picker beside the standard packs. A unit test checks every
shipped file: keys unique, hosts, domains and parents resolve to classes listed
earlier, datatypes valid, every definition in both languages.

Decision 4 of 0073 (the competency bench per pack) is open.

Signed-off-by: Wayland Yang <wayland@WaylanddeMacBook-Pro.local>
Co-authored-by: Wayland Yang <wayland@WaylanddeMacBook-Pro.local>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…h, so Q1 to Q3 runs through September instead of stopping in July (deeplethe#1404)

Signed-off-by: Rudy Celekli <rudy@gradiahq.com>
Co-authored-by: WaylandYang <145302500+WaylandYang@users.noreply.github.com>
…illion" reads as 2.5 billion instead of 2.5 (deeplethe#1400)

Signed-off-by: Rudy Celekli <rudy@gradiahq.com>
Co-authored-by: WaylandYang <145302500+WaylandYang@users.noreply.github.com>
…bout 350 people" becomes 350 instead of no value (deeplethe#1402)

Signed-off-by: Rudy Celekli <rudy@gradiahq.com>
Co-authored-by: WaylandYang <145302500+WaylandYang@users.noreply.github.com>
… "2nd March 2020" become those days instead of no value (deeplethe#1406)

Signed-off-by: Rudy Celekli <rudy@gradiahq.com>
Co-authored-by: WaylandYang <145302500+WaylandYang@users.noreply.github.com>
…rded (deeplethe#1395)

* fix: discard extraction replies after their job is superseded

Signed-off-by: Aschenbath <Aschenbath@users.noreply.github.com>

* fix: discard errors after an extraction job is superseded

Signed-off-by: Aschenbath <Aschenbath@users.noreply.github.com>

---------

Signed-off-by: Aschenbath <Aschenbath@users.noreply.github.com>
Co-authored-by: Aschenbath <Aschenbath@users.noreply.github.com>
Co-authored-by: WaylandYang <145302500+WaylandYang@users.noreply.github.com>
…ed with max_completion_tokens and no temperature, learned once per client (deeplethe#1394)

* fix: let model jobs recover from unsupported request parameters

Signed-off-by: Aschenbath <Aschenbath@users.noreply.github.com>
* Keep the model compatibility rationale in Chinese

Signed-off-by: Nash Aschenbath <wwh86696@163.com>

Co-authored-by: Schro-code <78734653+Schro-code@users.noreply.github.com>
Signed-off-by: Bogdan Szabo <bogdan@re-cinq.com>
@gedaiu
gedaiu merged commit 42972e3 into re-dev Oct 24, 2026
6 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.

4 participants