---
# System prepended metadata

title: 2020-12-11 meeting notes

---

---
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
     )
```