An architecture decision is useful only when it names the alternative, the reason and the cost. The complete register spans the specification for D1 to D82 and the machine-readable architecture program from D52 onward, including D83 and D84. This page is the interview path through the choices with the largest product consequences.
| ID | Choice | Rejected alternative | Cost admitted |
|---|---|---|---|
| D53 | Store repeated wording once and map every dated occurrence to its content hash | Duplicate every unchanged provision in every state | Readers reconstruct a version through occurrence mappings |
| D54 | Package a pinned local encoder and gate hybrid retrieval by holdout evidence | Buy managed search before corpus or traffic requires it | Lex owns model packaging, vectors and relevance measurement |
| D57 | Return an explicit publisher gap | Synthesize a consolidated text | Some states remain metadata-only |
| D58 | Pin trust outside the artifact and sign the complete manifest | Trust a public key carried beside the data it authenticates | Rotation is an explicit dual-trust release |
| D75 | Admit only source-backed official identity and discovery metadata | Manual aliases or model-generated legal identity | Publisher vocabularies and collisions become build concerns |
| D76 | Resolve subject first, freeze a typed plan, execute once, compose only on request | A ReAct loop with model observation and retries | More explicit application contracts |
| D83 | Keep Legilux and EUR-Lex classifications as distinct weak discovery lanes | Invent one cross-publisher taxonomy | Facets and multilingual alignment remain deferred |
Three decisions to challenge
Why no ReAct loop? The measured dangerous failures were identity and evidence failures. Letting a model observe a deterministic refusal and try a different law can convert an honest gap into a plausible answer. One correction before execution fixes contract syntax without changing authority.
Why build semantic retrieval and leave it off? Because architecture is a reversible hypothesis. The vectors and encoder prove the path can run; the frozen holdout decides whether it should serve. The next activation can be category-specific rather than a global switch.
Why not unify taxonomies? EuroVoc and Legilux classifications have different authorities, languages and semantics. Preserving the source scheme makes a match explainable. A unified label would be a new assertion owned by Lex and would need its own governance and evaluation.
Why is the legislative history not the git log? Because they answer different questions. The corpus tree carries what the law said and when it said it, which is the publisher's timeline. The commit history carries when Lex observed and wrote it, which is ours. Collapsing them would be convenient and wrong: re-ingesting a work would appear to amend it, a correction we fetched late would date from the day we noticed, and no reader could separate a change in the law from a change in our knowledge of it. Keeping both axes is what makes a point-in-time answer defensible and a publisher correction visible as its own event rather than a silent overwrite.
Status vocabulary records implementation maturity, not current traffic: shipped means included in
the release line, gated means activation still depends on evidence, building means the
implementation is in progress, and planned means no product claim yet. Mounted identities and signed promotion receipts separately establish what a running
revision serves.
The decisions above are the ones worth arguing with. The specification carries D1 to D82 with each rejected alternative and admitted cost, and the program register carries the recent decisions in machine-readable form; this page does not reprint them, because a register nobody finishes reading persuades nobody.