architecture.

7 of 130 decisions. Back to the full index.

#TitleSummaryStatus
ADR-077Publish a nested record as a section of its parent site, staged by its own configsite.include_records mounts a whole record inside another’s vault. Each is staged by its own config, because the source-versus-view test reads from the reading config’s schemes — so a parent publishing a child’s files directly emits both a fragment and the view it renders into.Active
ADR-078A nested record’s views are generated and committed with the parent’sluria index regenerates every nested record’s views from the root, and --check fails on a stale one, so they are committed like this project’s own. include_records moves out of [luria.site] in the same change: it says a project contains other projects, which generation needs as much as publishing does.Active
ADR-094 v2A cited document gets a page, and where a citation points is configurableA render = "document" scheme’s sources are published as pages, and a new cite key chooses whether a citation of its codes resolves to that page or to an anchor in the assembled view. This record sets “page”; unset keeps today’s behaviour. Rejected: emitting anchors that survive each publisher, and shipping the key without the pages, which sends citations off-site.Active
ADR-095An acknowledgement can carry its own deadlineA directive may be written until <YYYY-MM-DD>; after that date find stops returning it, so every check behaves as if it were never written, and luria lint reports what expired. Rejected: a relative duration, which needs an anchor the file does not carry; and a version milestone, which needs a project-version concept luria does not have.Active
ADR-127A logic core in clingo, behind a procedural shellThe parts of luria that decide things about the record’s graph — converse pairs, invariants, chain edges, config consistency, and which acknowledgement answers for a citation — move from hand-written Python walks to Answer Set Programming rules evaluated by clingo, over facts the Python extracts. Python keeps parsing, rendering, editing, git and the network, and turns derived facts into findings, edits and pages. The move is one subsystem at a time, each held to byte-identical luria lint and luria index output against the last release on every real record. Rejected: a full rewrite, Cypher or an embedded graph database, SQLite recursive CTEs, a hand-rolled Datalog evaluator, and staying in Python.Proposed
ADR-128Configuration is the only source of relation semanticsNo relation is supplied by the code: the successor and influenced_by become ordinary declared references, roles point at declarations instead of creating them, references may target declared remotes, the facts give every reference value a declared type, and relations.lp no longer infers a type from an absence. luria upgrade explicit-relations writes down what older versions supplied. Rejected: emitting the built-ins as facts, an explicit any-scheme target, and undeclared roles with the old defaults.Proposed
ADR-130A view may be a Jinja template over the recordA record may declare views: a Jinja template, rendered by luria index into any file in the repository, with the record as its context. A template selects documents with doc, docs and vocabulary, and walks the graph with match, a path pattern written inline in ADR-129’s syntax. It writes codes bare, and the output passes through the link fixer in the output’s own frame, so no template spells a link target. Templates compose with Jinja’s own include, import and extends, so a hand-written file with a generated region is a template that holds the prose. The environment is sandboxed, strict about undefined names and blind to the clock, so a view stays a pure function of the tree. Rejected: generated regions in hand-written files, str.format, a logic-less engine, a Python hook, a link filter, named patterns only, and a manuscript scheme.Active