Purpose, plans and progress from Substrata’s development profile. The project is in beta and the work is ongoing.
Every producer row sourced or gone
in progress · Source: the Loki development profile (2026-10-14)Sourcedthe Loki development profile · 2026-10-14Open the source → recorded progress
✓ Producer-sourcing engine on a box timer, one Postgres queue, /review to decide
✓ All but 14 producer rows sourced
✓ Every capacity figure names its own unit
Every remaining row sourced, or removed from the coverage universe
Data quality that ratchets
in progress · Source: the Loki development profile (2026-10-14)Sourcedthe Loki development profile · 2026-10-14Open the source → recorded progress
✓ Six criteria declared per dataset, pure checks in the build, network checks on a rotation
✓ Freshness page that fails the build on a stale committed dataset
Every pure check at zero failures
Link health and quote checks green across the whole corpus
Calls at volume, proposed by the sweep
planned · Source: the Loki development profile (2026-10-14)Sourcedthe Loki development profile · 2026-10-14Open the source → recorded progress
✓ The track record started: dated calls with a resolution rule and a floor before any rate is shown
✓ The sweep proposes dated events for one-click review
The sweep proposes calls, not only events
The resolved-call record published with misses shown
The three numbers that settle the comparison
planned · Source: the Loki development profile (2026-10-14)Sourcedthe Loki development profile · 2026-10-14Open the source → recorded progress
✓ Uncovered materials computed from the coverage universe
Uncovered-node share published as a figure with its source
Lead measured from recordedOn against the market layer
All three on one page, recomputed from the corpus
Labs and people as entities
planned · Source: the Loki development profile (2026-10-14)Sourcedthe Loki development profile · 2026-10-14Open the source → recorded progress
✓ Science pipeline with stages, live paper/grant feeds and who is doing it
lab and person kinds in the entity registry
A Work record linking papers and grants to bottlenecks
Eight languages, honestly
planned · Source: the Loki development profile (2026-10-14)Sourcedthe Loki development profile · 2026-10-14Open the source → recorded progress
✓ String catalogue, locale metadata, fallback that reports itself
✓ Profile modules and evidence vocabulary externalised
Page-level copy externalised
First reviewed translation of the interface
Locale routing, once a locale is worth routing to
The corpus itself, as a content operation with a review step
Its own domain
later
The join page as a package
later
The atlas is a globe
done · Source: the Loki development profile (2026-10-14)Sourcedthe Loki development profile · 2026-10-14Open the source → recorded progress
Exposure, X-ray and scenarios over a sourced dependency layer
done · Source: the Loki development profile (2026-10-14)Sourcedthe Loki development profile · 2026-10-14Open the source → recorded progress
Ask, on any model, with one-click claim verification
done · Source: the Loki development profile (2026-10-14)Sourcedthe Loki development profile · 2026-10-14Open the source → recorded progress
Reader views and a shell for every page
done · Source: the Loki development profile (2026-10-14)Sourcedthe Loki development profile · 2026-10-14Open the source → recorded progress
Self-updating research, reviewed by a person
done · Source: the Loki development profile (2026-10-14)Sourcedthe Loki development profile · 2026-10-14Open the source → recorded progress
Profile snapshot: 2026-10-14T12:06:51.295Z. Updates may take five minutes to appear.
Computed: For each resolved holding: the bottlenecks its companies hold (maker, capacity or part supplier), the ones a filing says they need or sell into, and everything upstream of a held or needed rail through recorded "needs" rows.Computed: Sum of the weights of the holdings that touch a rail, divided by the sum of the weights of all resolved holdings. With no weights given, every holding counts equally.Computed: For each country: the share of portfolio weight on a rail whose every recorded maker operates there, and the share on a rail with at least one recorded maker there. Part suppliers are not makers.Computed: Direct hits: bottlenecks where the failed node is a maker, a part supplier or the location. Makers wholly inside it are lost; makers also operating elsewhere are partly affected; the rest remain. Downstream: every bottleneck that needs a hit one, transitively, through recorded rows. Exposed: holders of hit and downstream bottlenecks and companies a filing says need or sell into them.Computed: The country’s recorded annual production divided by the recorded world total for the same year and unit, from config/substrata-quantities.ts (USGS).Computed: Rows that held over rows looked at, pooled across every check of that criterion for that dataset, rounded down to a tenth of a percent.Computed: The mean of the criterion scores that could be measured for the dataset.Computed: Rows: judged by the dataset’s first provenance check. Sourced: share of those that pass it. Verified: rows re-derived from their source by a network look, over every row such a look covers. Stale: rows past their declared age. Broken: source links that failed three tries.Computed: Tokens per UTC day on this site's free AI keys, summed per class: interactive (Ask and fact-checks, a reader waiting) and background. Background is zero from 2026-09-25: no scheduled job may call the free models, and test/no-free-background-ai.test.ts fails the build if one tries. Drafting runs on readers' own keys and is not on this ledger.Computed: Over every Ask question in the last 24 hours that got an answer: the 50th and 90th percentile (continuous, PostgreSQL percentile_cont) of milliseconds from the request reaching the server to the first answer text streamed, and to the finished answer.Computed: Count of rows in the bottleneck corpus: every material plus every non-material chokepoint.Computed: Count of bottlenecks whose assessed horizon is "now".Computed: Sum of four judged scores, each 0–3: concentration + substitution + lead time + inelasticity.Computed: Count of (bottleneck, producer) pairs across every material in the corpus.Computed: Producer rows counted by verification state from the corpus: sourced (an accepted primary source is linked) or unverified (none yet). Unchecked pages: open rows in the producer-sourcing queue, counted live from the database.Computed: Count of rows in the market-participant directory.Computed: Count of bottlenecks on which this organisation is recorded as a producer, a holder of the capacity, or a supplier of a critical part.Computed: Accepted events that name this organisation, plus (counted separately) accepted events on a bottleneck it holds that do not name it.Computed: Count of policy instruments in the corpus; each one links its official text.Computed: Count of science entries: technologies recorded as able to relieve a named bottleneck.Computed: Accepted events whose date falls within the last N days of today.Computed: Leads in the research sweep’s queue that no person has read yet and that have not expired, counted live from the database.Computed: Waiting: open sweep leads — no reviewer decision, not expired. Oldest: whole days since the earliest open one was found. Drafts ready: waiting leads whose AI draft suggests an event and passed the checks.Computed: Count of bottlenecks tagged with that technology, industry or stage.Computed: Number of distinct country codes on the rows being counted (makers, or rules).Computed: Rules counted by the effect recorded on each: "tightens" slows building, "loosens" speeds it; a rule recorded as both ways is counted in neither.Computed: Rules with at least one proponent: an organisation that asked for it in a document linked on the row.Computed: A judged level on a nine-step scale from "idea with a physical basis" (1) to "in production at scale" (9).Computed: Technologies tracked = science entries; bottlenecks addressed = distinct bottlenecks named as relieved by any entry; reaching production = entries judged 8 or 9; sourced = entries whose readiness cites a source.Computed: Kinds = rows in the capital-kinds list; providers = named funders, each linking its own mandate page; assessed = bottlenecks with a funding judgement; "money is not it" = those judged "not-money".Computed: Open = calls without a resolution; resolved = right + wrong + unclear; overdue = past the resolve-by date and not yet marked; hit rate = right ÷ (right + wrong), published only once enough calls have resolved.Computed: Bottlenecks on that stage of the loop, and how many of them have every producer row sourced.Computed: The highest severity score among the bottlenecks recorded as gates on the loop.Computed: Count of explainer files in content/learn, and of entries in the glossary.Computed: A place's annual production ÷ the published world total, same unit and year.Computed: Sum of the squares of each producer’s share of world output (0–1).Computed: Published reserves ÷ annual production, same place, unit and year.Computed: Accepted events in the last 90 days that tighten it, minus those that loosen it. Neutral events count for neither.Computed: One row per (bottleneck, holder) after the screen’s filters; the bottleneck count is the distinct bottlenecks among those rows.Computed: Organisations recorded on a bottleneck (maker, capacity holder or part supplier) whose shares, or a parent’s, trade on an exchange found in the SEC ticker file or OpenFIGI.Computed: Items per stage = papers, preprints and grants collected for the bottleneck whose relevance score is 2 or more, placed on a stage by the rule in lib/science.ts; judgements are counted separately.Computed: Items first collected in the last 7 days whose publication or award date is within the last 30 days.Computed: Items per institution per bottleneck, counting each item once per institution named on it by the source; a company is matched to the directory only when every distinguishing word of both names agrees.Computed: The latest value in a series minus the value before it, divided by the earlier value, same series and unit.Computed: Count of dated values in a series, or of series matching the filters, across the committed corpus and the official statistics fetched on schedule.Computed: Count of postings currently listed on the public job boards Substrata reads, after the page’s filters. By default software and business roles that name no bottleneck are left out; "Every role" puts them back.Computed: A posting is filed under a bottleneck when its title names one of that bottleneck’s terms, or its description names them at least twice (title only for software and business roles); its role family is the first family whose title terms its title names.Computed: For each skill or credential in the published list, the number of open postings whose title or description names any of its terms.Computed: Count of programmes in research/learning-paths.json, each with the official page it was checked on.Computed: A feed is fresh within one scheduled interval plus half an interval (at least 20 minutes) of its last good run, late up to three intervals, stale beyond; failing when its newest failure is newer than its last good run.Computed: Now minus the finish time of the last good run (feeds), or whole UTC days since the date the committed file records it was checked (datasets).Computed: A sweep lead is open while nobody has reviewed it and it was found less than 30 days ago; unreviewed and 30 days or older, it is expired. The review queue is open leads only: late when its oldest has waited more than 7 days, stale past 31.Computed: Position of a country when the countries USGS lists individually are sorted by the same column, largest first; equal values share a rank.Computed: Latest year ÷ the year before − 1, same country, same column of the same table (USGS or EIA).Computed: A country's resources are ordered by its largest share of world output on any production column of each table (e.g. palladium within PGMs).