Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Exploration proposes an alignment per table

Open
#554 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
45/100
Issue type
Feature
Clarity
Clearly specified
Activity status
Active
Tech stack
rust
Domain
backend

Research direction

Read decision 0036 to understand the alignment proposal concept, then examine the current exploration code and ontology_proposals structure. Trace decide_proposal and the adopt endpoints to add the grouping and transactional adopt path. Finally, update scripts/bench/mappings.mjs to score alignments using the truth file's new alignment section.

Written by the indexing model from the issue text.

Description

Exploration today reads a schema and produces entities of two classes it inserted itself. 0036 decisions 1, 2 and 6: it produces instead an alignment proposal per table — the class the table is a table of, the attributes its columns carry, the relations its foreign keys are, and for each aligned column an expression that turns the column into the attribute's value — and a person adopts it.

What a proposal holds

For dw.dwd_ord_dtl on the wide corpus:

column is
amt_pay, qty, ord_st, dt_crt attributes of Order
buyer_id, shop_id relations Order → Customer, Order → Shop
shop_nm, prov, buyer_lvl attributes of Shop, Address, Customer, flattened in
ver, etl_dt, rmk, price_old nothing

Exploration finds existing classes and attributes first (the ontology, with a pack from 0008, usually has Order) and proposes new ones only where none fits — 0003's loop with a schema in place of a corpus. On a base with no ontology it proposes the class (decision 6); the difference from today is that a proposal waits and ensure_concept_types did not.

Where it goes

ontology_proposals already has the four sections this needs — entity_types, attribute_types, relation_types, map_to — and the attribute payload already carries datatype and unit. What it does not have is a way to say "these forty rows are one table's alignment, adopt or reject them together", and decide_proposal today only marks a row; creating the ontology rows is the separate adopt endpoints' job. So this needs:

  • an alignment table: table → class, column → attribute (or relation) with the conversion tree from #555;
  • a proposal that groups a table's rows, adopted as one thing — adopting Order while rejecting every attribute of it is not a decision anyone means to make;
  • an adopt path that writes the ontology rows and the alignment rows in one transaction.

What exploration does not propose

Definitions. GMV, refund rate, valid orders — 0 of 18 on the wide corpus, and what it would propose is sum(amt_pay): runs, looks right, off by a hundred and includes the test orders. A definition is a rule a person writes over aligned attributes (decision 4, #556). #507 is the other way a rule can arrive — stated in a document, with provenance — and is complementary, not this.

Measured by

scripts/bench/mappings.mjs scores today's proposals by number. An alignment is scored differently: did amt_pay land on Order.paid_amount, did buyer_id become a relation, did ver stay out. The truth file for wide has keys, traps and dimensions already; it gains an alignment section.

Depends on #553 having landed, or every exploration on a fresh base re-creates the column-name entities it is trying to replace.

Dominant language
Rust
Stars
8.1k
Forks
1.1k
Avg merge
21h 2m
Merged PRs (30d)
263

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from deeplethe/utopia

All issues in deeplethe/utopia

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.