Public dry run dryrun-309831e1e021

Source commit: 309831e1e021f962c118452336776fd9a94025f9

Public tree identity: sha256:6fa95c1745579bd6256dbeb3d476db0b07c2f24aa9213b0f7783ce1adfc8aca5
This commit is contained in:
Disasmer release dry run 2026-07-03 16:07:13 +02:00
commit f22d0a5791
113 changed files with 39348 additions and 0 deletions

145
latency_notes.md Normal file
View file

@ -0,0 +1,145 @@
# Disasmer Latency Notes
Low latency is a core design goal. Disasmer should avoid copying or sending data unless it is required.
## Core Rule
```text
Move metadata eagerly.
Move bytes lazily.
Run work where the bytes already are.
```
The coordinator should track locations, hashes, ownership, and versions. It should not sit in the middle of large file transfers.
## Local-First Execution
For a simple build, such as building a Linux binary from a Git repo that already exists locally, Disasmer should behave almost like a local build:
```text
/src -> bind mount existing checkout
/work -> local writable scratch space
/cache -> local persistent dependency cache
/out -> local artifact/output directory
```
No repo upload, no tarballing, no coordinator-routed file transfer, and no automatic artifact upload.
## Placement Policy
Task placement should prioritize data locality:
```text
prefer node with source checkout
prefer node with container/Nix environment cached
prefer node with dependency/build cache
prefer node with previous outputs needed by this task
avoid expected network transfer
```
If the local machine can run the task and already has the repo, it should usually win placement.
## VFS Semantics
The virtual filesystem should be copy-on-write and metadata-driven.
```text
flush()
Publishes filesystem metadata and artifact references.
Makes outputs visible to Disasmer.
Does not necessarily upload bytes.
sync()
Makes selected outputs durable or replicated.
May upload or transfer bytes.
```
This distinction is important: `flush()` should be cheap; `sync()` may be expensive.
## Git Inputs
A Git repo should be treated as a source provider, not as a directory to blindly copy.
A source snapshot is:
```text
commit hash
submodule state
dirty-file overlay
included input files
ignored-file policy
```
If the task runs locally, `/src` can be a direct bind mount. If it runs remotely, only missing or changed content should be sent.
## Artifacts
Publishing a large output should register metadata first:
```text
artifact id
path
node
size
digest/version
```
The actual bytes move only when needed:
```text
another node consumes the artifact
user exports/downloads it
sync() requires durability
replication policy requires it
```
Same-node reuse should use bind mounts, hardlinks, reflinks, or copy-on-write where possible.
## Environments
Containerfiles, Dockerfiles, and Nix flakes should be part of the Disasmer bundle as environment definitions.
Resolved container layers, built images, Nix store paths, and dependency caches should live in node-local caches and be reused by digest.
## Coordinator Responsibility
The coordinator should answer questions like:
```text
which node has source snapshot X?
which node has artifact Y?
which node has environment digest Z cached?
where should this task run?
```
It should not handle normal compiler file reads, linker writes, cache reads, or large artifact transfers.
## MVP Defaults
Disasmer should default to:
```text
local-first task placement
lazy byte transfer
metadata-only flush
explicit sync for durability
node-to-node bulk transfer
content-addressed storage
copy-on-write VFS overlays
no coordinator-routed bulk data
```
## Summary
For low latency, Disasmer should make the common local case stay local.
A local Linux build from a local Git repo should add only small runtime overhead:
```text
placement decision
debug/session metadata
VFS epoch metadata
artifact registration
```
It should not add unnecessary source copying, artifact uploading, image rebuilding, or network filesystem traffic.