Skip to content

proposals: offline and air-gapped use - #163

Draft
Kinflou wants to merge 2 commits into
mainfrom
proposals/offline
Draft

Kinflou wants to merge 2 commits into
mainfrom
proposals/offline

Conversation

@Kinflou

@Kinflou Kinflou commented Nov 9, 2026

Copy link
Copy Markdown
Member

A draft proposal for how Comline works with no internet access, across every repository. It covers four situations:

  • an offline developer machine;
  • an isolated build or CI network;
  • an air-gapped deployment;
  • bringing the tooling itself into a sealed network.

Pages, under proposals/offline/:

  • index: the situations, a survey of where each repository touches the network today, the rules that hold whatever the details, a rollout and the open questions.
  • fetching:
    • choosing a dependency vs getting pinned bytes;
    • fetching on demand by default, with a hard offline switch and comline fetch;
    • package settings that only tighten (explicit fetching, required hashes);
    • the strictest setting wins, and a dependency's settings apply only to its own builds;
    • when a hash is mandatory: registry dependencies always; git when offline, when required, or when there is more than one source;
    • a hash mismatch is an error, never a fallback.
  • supply:
    • identity is the hash, location is replaceable;
    • several ordered sources per dependency, from the package, from machine or organisation mirrors, and added by the root for hashed transitive pins (add only, never replace);
    • a shared hash-keyed cache, vendoring, mirrors and signed bundles;
    • generated code's dependencies, with publishing the runtimes as a 1.0 requirement;
    • the tooling: release artifacts, reproducible builds, an SBOM, and an offline docs bundle.

The decisions were settled in discussion. The open questions are listed on the pages.

mkdocs build --strict passes.

How Comline works with no internet access: on an offline machine, in an
isolated build network, in an air-gapped deployment, and when bringing the
tooling itself in. Fetching (on demand with a hard offline switch, package
settings that only tighten, when a hash is mandatory) and supply (several
sources per dependency, a shared cache, vendoring, mirrors, bundles,
release artifacts, the runtimes published for 1.0).
…ndles, signing and the SBOM

- Fetch policy lives in the project's comline.toml (committed, never frozen,
  only the root's read); offline, mirrors, the cache and trusted keys in
  layered machine and organisation config.
- A dependency's sources are never frozen.
- The cache uses the platform cache dir, can sit over a read-only
  organisation layer, and is never evicted automatically.
- A mirror is the only route unless fallback = true.
- Bundles are deterministic .tar.zst archives, signed with minisign keys;
  unsigned ones are refused without --allow-unsigned.
- Releases are signed with minisign over checksums, plus GitHub artifact
  attestations; the SBOM is CycloneDX JSON.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant