← livingedenframeworks.com
The core engine's change-log
What changed in LEF SI Engine's core, and why: how it reads records and judges what it finds. Each build
carries its own copy of the engine, so a change reaches a build when that build is regenerated or the idea is carried
over and proven again.
0.40.0 2026-10-11
The engine prepares a source's records for reading without changing a single value, and writes down every decision it made
The engine can now prepare a source's records for reading from a written plan, without changing a single value, and it tests that promise on every run.
0.39.0 2026-10-11
Each gap now says whether the source's documentation, the records, or both explain it
Each gap now says whether the source's own documentation, the records, or both explain it, and names a rule the records keep that the documentation never states.
0.38.0 2026-10-11
The engine reports a source's documentation against its records, rule by rule, and changes nothing until the dataset's steward accepts it
The engine now reports a source's documentation against its records rule by rule: what agrees, what the records contradict, what is documented but never used, and what is written differently, with counts. A documented missing code changes nothing until the dataset's steward accepts it.
0.37.3 2026-10-11
Each read's documentation checks now start fresh, and the shape check states its statistics exactly
Each read's documentation checks now start fresh, and the shape check states exactly what its chance correction covers. What the engine finds is unchanged.
0.37.2 2026-10-10
The engine's default Claude model is now Claude Opus 5.5
The engine's default Claude model is now Claude Opus 5.5; what the engine itself reads and computes is unchanged.
0.37.1 2026-10-09
Three corrections: rules checked against the records as written, too few years never mistaken for enough, and a record's edit date never mistaken for its subject's date
Rules about a source are now checked against its records as written, a few stray dates no longer make a short file look long enough to judge over time, and the date a record was last edited is never mistaken for the date of what it describes.
0.37.0 2026-10-09
The engine now takes a source's own definitions of its categories, and checks every record against them
The engine now takes a source's own definitions of its categories, quoted from the source's documentation, and checks every record against them; and each finding's page shows whose rule set it aside or explains it.
0.36.0 2026-10-09
A rule the engine is given now says who it rests on, and only a source, an authority or a named person can set a finding aside
A rule the engine is given about a source now says who it rests on: the source itself, another authority, or a named person can set a finding aside, and the page says which; a rule only LEF believes can explain a finding but never remove it; and where a source's own documentation and its records disagree, the engine says so.
0.35.0 2026-10-08
The engine now finds a stretch of a measurement that holds far fewer records than its surroundings, not only one that holds none
The engine now finds a stretch of a measurement that holds far fewer records than the records on both sides predict, not only a stretch that holds none, and a few extreme values no longer hide one.
0.34.1 2026-10-07
A measurement is no longer read as a date because of its column's name, and pages no longer show a person's email or ORCID iD
A measurement is no longer read as a date because of its column's name, several reads at one place no longer overwrite each other's records, a dataset's history is compared only with its own earlier runs, and the pages a person reads no longer show anyone's email address or ORCID iD.
0.34.0 2026-10-07
A rule the engine confirms now says whether a second source keeps it
A rule the engine confirms now says whether a second, different source keeps it, or only files from the same source, since files from one source can share how that source keeps its records.
0.33.1 2026-10-06
A record filed twice under one identifier, told differently, can no longer hide a gap
A record filed twice under one identifier, told differently the second time, can no longer hide a gap the rest of the records show, while records that only share a name are still read as distinct.
0.33.0 2026-10-06
A licensed build can now tell its licensee which published revisions may answer what its runs keep hitting
A licensed build can now tell its licensee, from its own runs and without contacting LEF, which published revisions may answer what its runs keep hitting, and which of its needs are its own.
0.32.0 2026-10-06
Rules the records keep can now be confirmed across files of the same source, and only by files that are genuinely separate
Rules the records keep can now be confirmed across files of the same source, and only by files whose records are genuinely separate, so a sample of a file never confirms that file's own rules.
0.31.1 2026-10-06
A date written as a number is read as a date everywhere in the report
A date written as a number is now read as a date in every part of the report, so the report no longer says a file has no dates while reading it by date.
0.31.0 2026-10-05
A source's own codebook can now tell the engine which values never go together
A codebook supplied for a source can now state which values it never writes together, each rule cited to the source; a gap such a rule covers is set aside on the source's word, and the report says how many.
0.30.6 2026-10-05
No record is left out of the read because it shares a name or number with another
No record is left out of the read because it shares a name or a number with another record; each one is read.
0.30.5 2026-10-05
A build can no longer present a gap as standing when its engine ruled it out
A build's findings are now checked against its engine's own read, and a gap the engine ruled out cannot be presented as standing.
0.30.4 2026-10-05
The report names the model behind every piece of prose, and says when a piece names none
Each run's report now names the model behind every piece of prose it checked, and says when a piece names none.
0.30.3 2026-10-03
A single stray value no longer makes a gap in a measurement
A single stray value far from the rest no longer makes the engine report an empty range in a measurement.
0.30.2 2026-10-03
Codes and identifiers are no longer read as measurements
A field that holds codes or identifiers written as numbers, such as a ZIP code or an award ID, is now kept as written and is never read as a measurement, so a missing region can no longer show up as a gap in one.
0.30.1 2026-10-03
A file too short in time to cut by date says so
When a file covers too short a time to be cut by date, the engine's report now says that, and which field it read, instead of saying the file has no dates.
0.30.0 2026-10-03
Gaps in numeric measurements are read
The engine now reads numeric measurements for gaps, not only categories, and tells a gap from the edge of the data.
0.29.0 2026-10-03
A real gap is no longer dismissed because two fields are strongly associated
The engine no longer dismisses a real gap because two fields are strongly associated; it keeps the gap and names the pattern it rests on.
0.28.3 2026-10-02
With no record IDs, no conflicting IDs reported
With no record IDs, the engine no longer reports conflicting IDs between sources.
0.28.2 2026-10-02
Copies across sources, read more carefully
When records name their source in more than one field the engine checks each for copies, and with no record IDs it no longer mistakes look-alike records for copies.
0.28.1 2026-10-02
A refused date field gives the true reason
When the engine cannot cut a body of records into periods, it now gives the true reason.
0.28.0 2026-10-02
How the record keeps itself across periods
The engine now reads how a body of records keeps itself over time, which fields stopped or started being filled and which recording channels changed, so a reader knows when a count across years rests on a record that changed.
0.27.0 2026-10-02
A ranking or classification checked against an outcome
A person can now state that a ranking or classification should separate an outcome, and the engine checks it step by step, saying where it separates, where it reverses and where it does not.
0.26.1 2026-10-01
Tracing each gap forward is about ninety times faster
Tracing each gap forward is now about ninety times faster on wide corpora, with exactly the same results.
0.26.0 2026-10-01
Gaps among three values
The engine now finds gaps among three values, where every pair meets but the three never do together; in this version each is reported as a lead.
0.25.0 2026-10-01
A change between periods read for the same holders re-coded
When a pairing appears or disappears between periods, the engine now says when the same holders are still there with a code switched: a change in how records are coded, not in who holds them.
0.24.0 2026-10-01
A gap told through two fields that carry the same information is counted once
When two fields carry the same information, such as a country code and a country name, a gap found through both is now counted once.
0.23.1 2026-10-01
A word in a number column is read as written unless it names absence
A word in a column of numbers is no longer read as missing unless it says so: in a rule table, 'None' can be the rule.
0.23.0 2026-10-01
What counts as not collected belongs to the source
The engine no longer treats words like 'NA', 'None' or 'Unknown' as missing by default: what a code means belongs to the source that wrote it, and a codebook for that source can say so, field by field.
0.22.0 2026-10-01
Claims a person states about the records are checked
The engine now checks the claims a person states about a body of records, saying for each whether the records support it, contradict it or cannot tell, and how far each is from flipping.
0.21.1 2026-10-01
Every report states what no check on the records can see
Every run's report now says plainly what no check on its records can see: a gap hidden without any trace takes a second source to find.
0.21.0 2026-10-01
A change between periods is called only where the records can tell
When the engine says a pairing opened or closed between periods, it now holds that to the same standard as its gaps; one or two records are reported as too thin to tell.
0.20.0 2026-10-01
Every run checks the same records give the same result
Every run now checks that the same records and settings give the same result, and compares a later run on the same file with earlier ones.
0.19.3 2026-10-01
Two runs started in the same second each keep their record
Two runs of one build started within the same second each keep their own record; the second no longer fails at its end.
0.19.2 2026-10-01
Widening the read is answered in every report
Every report now answers whether the read was widened, and a build with no source to widen through says so.
0.19.1 2026-10-01
Each fill proposal says where its gap stood
On the engine's own page, each fill proposal now says whether its gap held, became a lead, or was refuted.
0.19.0 2026-09-30
A read can be handed a library of signals
A read can now be handed a library of patterns that went with gaps closing or staying empty, and names which each gap carries, withholding a pattern's strength where the records are unlike those it was tested on. A signal says more often, never this one will.
0.18.1 2026-09-30
Every count from a whole source carries the time it was asked
When the engine checks a gap against a whole index, each count now carries the date and time it was asked, so a figure says which reading of a changing index it came from.
0.18.0 2026-09-30
Whether each gap is weakly or firmly held apart
For each gap it holds, the engine now also says whether the gap is weakly or firmly held apart right now.
0.17.0 2026-09-29
Fields with very long lists are read, and say how much was read
The engine now reads fields that hold long lists of labels and says how much of each it read, where before it read none, and it no longer draws a conclusion from too few gaps.
0.16.0 2026-09-29
What keeps a gap's two sides apart: the record or the content
The engine now says, for each gap, what keeps the two sides apart: the way the records are kept, or the content itself.
0.15.0 2026-09-29
The engine widens its own read and says what changed
The engine can now widen its own read through the source a build declares, read again, and say which gaps ended, opened or held.
0.14.0 2026-09-29
Several sources read together, and several reads composed
The engine can now read several sources together, joining what they share, and compose several reads into one picture, saying plainly when those reads draw on the same corpus and so are not independent confirmations.
0.13.0 2026-09-29
Each gap's history across runs
The engine now remembers its findings between runs: each gap says whether it is new, recurring or shifted, and each run lists what the last one reported and it no longer does. The memory is context for the reader, never evidence.
0.12.0 2026-09-29
Values that travel together are checked before anyone reads them
The engine now checks the associations it reports as it checks its gaps: one resting on a handful of records, two blanks travelling together, or one association counted twice is marked as such.
0.11.0 2026-09-29
How thinly a combination is held, not only whether it is empty
A combination the records should hold plenty of, held by only one, two or three holders, is now listed for a person, which is where a supply or coverage risk sits. In a sample, each is counted in the whole source first.
0.10.0 2026-09-29
Every gap carries its pursuit: bridge it, fill it, or neither
Every gap now carries a pursuit a person can weigh: whether it can be bridged, whether it can be filled, or neither, with the case for and against, what would refute it, and the next step that would settle the most. The engine does not decide what to pursue; the person does.
0.9.2 2026-09-29
A column of codes is read as codes
The engine no longer mistakes a column of codes, such as supplier codes, for a column of numbers, and still flags a real number column that holds a stray word.
0.9.1 2026-09-29
A trace offers only directions its records support
A gap's trace now offers only directions its records can support, and never offers a date as a direction.
0.9.0 2026-09-29
Every gap carries its parts
Every gap now carries its parts, so a reader can check it rather than take it on trust: what it is, how it was counted, why it is there where the records show a reason, what would change it, and a trace to follow.
0.8.3 2026-09-29
Records a person should read are listed for them
The engine now lists two more kinds of record for a person to read: one that breaks a pattern the records around it keep, and one record carried under two identifiers. Both are listed, never used to doubt a finding.
0.8.2 2026-09-29
A source that stops answering is asked no more, and the report says so
When a source the engine counts in stops answering, the engine stops asking it, and the report says how many gaps went unasked and why.
0.8.1 2026-09-29
A corpus can be declared a sample of something larger
A corpus can now be declared a sample of something larger. A gap found only in the sample is then read as a lead, and where a build can count in the whole source, each gap is counted there and the report says what the whole said.
0.8.0 2026-09-29
Every gap names its cause, or says the records cannot tell
Where a corpus carries dates, the engine now asks whether each gap's two values ever existed in the same period, and lists pairs that met earlier and stopped meeting. Every gap now names its cause where the records show one, and says the records cannot tell where they do not.
0.7.3 2026-09-29
The engine profiles a corpus with its own code
The engine now profiles a corpus itself, and the check a build goes through before it meets a partner's records is the engine's own read of a corpus shaped like theirs, saying which checks that shape lets it answer.
0.7.2 2026-09-29
The look back over time reports by pair of fields
The check of the engine's earlier gaps against what came after now reports by the pair of fields each gap lies between, because what a later fill means depends on what those fields record.
0.7.1 2026-09-28
Repairs: the answering model is named, and no date is invented
Every run's report now names the model that answered, as the provider named it. A date that cannot exist on a calendar is kept as written instead of being turned into one that looks valid. The engine's own test runs to its end again.
0.7.0 2026-09-28
Fields that hold lists are read as lists
Every check now reads a field that holds a list, such as a work's topics, as the values in it, and two values of one list field can now form a gap. Files with no list field read as before. A field that mixes numbers and words no longer stops the read.
0.6.0 2026-09-28
Every run grades its own method against the records' past
Where the records carry dates, every run now checks its own method against their past, grading the gaps it would have named earlier by what came after. It grades the method on the corpus's own history; it is not a forecast.
0.5.2 2026-09-28
Clearer wording for a gap too rare to tell
When a gap is too rare to tell from coincidence, the report now says so and calls it a lead, without overstating it.
0.5.1 2026-09-26
Wider fields read, and a gap that restates a regularity says so
Fields with thousands of values are now read instead of skipped. A gap that restates a stronger regularity in the same records now says so, and is never thrown out on its account.
0.5.0 2026-09-26
Each gap traced to what holds it apart, and to whether it can be filled
The engine now traces each gap it holds: what keeps the two sides apart, what a record filling it would have to carry, and whether any record consistent with the file could fill it at all. A gap that rests on another gap says so.
0.4.0 2026-09-26
Corrections found by testing the engine on deliberately noisy files
One value written several ways is now read as one value where one spelling clearly dominates, and the correction is stated. A 'not collected' phrase in any spelling is read as missing in a number or date column, and a few stray records no longer become a finding. On clean records the results are unchanged.
0.3.0 2026-09-25
Four corrections found by testing the engine on builds of different shapes
The engine now judges every candidate gap on a wide file and says whenever a limit still applies. It no longer takes a row number for a record's identity, it reads a copy filed under a second source as one record carried twice, and padding a file with copies no longer changes its answer.
0.2.1 2026-09-24
Three corrections found by testing the engine on known answers
Values that only look alike in writing are no longer merged, look-alike identifiers no longer drop records, the same records now give the same findings in the same order on every run, and one count no longer stalls on very large files.
0.2.0 2026-09-24
Every run checks its own work, and says so
Every run now carries a report of its own checks: each says it found something, found nothing, corrected something (and what), or could not run (and why). A check that stays silent is a gap in the report, never a pass. Each finding states its standing in plain words, with what would change it, and what a model writes is checked against what it was shown.