---
title: 2020-12-11 meeting notes
date: 2020-12-11
---
# Agenda
- https://github.com/NixOS/nix/pull/4330
- https://github.com/NixOS/nix/issues/4344
- https://github.com/NixOS/nix/pull/4348
# PR 4330
- `realisation` might not be the best term, but keep it for the moment
- Needs a rebase to fix a conflict (and the OSX test)
- Could merge the json thing
# Issue 4344
Goal: Prevent weird states where several outputs can come from a different build.
Problematic example:
- Alice pushes `foo_1!out` to the binary cache
- Bob pushes `foo_2!dev` (depending on `foo_2!out`)
- Alice tries to fetch `foo!dev` from the cache, and gets an incoherence.
```mermaid
graph LR
foo_1!dev --> foo_1!out
foo_2!dev -.-> foo_1!out
```
## Aside
To ensure that we don't have any incoherence, mapping must form a closure
## DB rules for runtime coherence
```
forall p0 p1.
p1 in runtimeClosure(p0)
```
```
forall drv out0 p0 p1.
all
( drv!out0 -> p0
, p1 != p0
, p1 in runtimeClosure(p0)
, inputDrvs(drv) = {} # resolved drv
)
=> oneof
( exists p2. all(p2 in inputSrcs(drv), p1 in runtimeClosure(p2))
, exists out1. drv!out1 = p1
)
```