71 lines
3.8 KiB
Markdown
71 lines
3.8 KiB
Markdown
# Checked capability and component artifacts
|
|
|
|
`mkCaminoArtifacts` is the fresh package builder. It regenerates candidate
|
|
bindings, typechecks the entry's dependency closure, bundles declared targets,
|
|
generates a process service when requested, and emits content manifests and
|
|
receipts. It has no migration step or package-defined shell hooks.
|
|
|
|
```nix
|
|
# Inside a per-system flake output:
|
|
quixosPackages.checkedArtifacts =
|
|
{ plan, generator, core, sharedRuntime, typescript, packageRevisionId }:
|
|
helpers.mkCaminoArtifacts {
|
|
inherit pkgs plan core sharedRuntime typescript packageRevisionId;
|
|
protocol = generator;
|
|
src = ./.;
|
|
portable = {
|
|
entry = "src/portable.ts";
|
|
bindingOutput = "src/gen/qx.ts";
|
|
registryExport = "registry";
|
|
targets = [ "browser" "server" ];
|
|
};
|
|
};
|
|
```
|
|
|
|
The handler entry exports `registry = createRegistry(handlers)` from the generated
|
|
bindings. One registry contains many exports. The builder always supplies a server
|
|
implementation for the generated process service. A service-only package instead
|
|
omits `portable` and supplies `service.entry`, an ordinary JavaScript process entry
|
|
using the versioned stdin/stdout protocol. Custom services own their lifecycle and
|
|
may hold external resources. This first helper supports JavaScript custom service
|
|
entries; other languages can emit the same checked artifact contract independently.
|
|
|
|
Additional portable source dependencies can be provided as a locked `nodeModules` directory.
|
|
The workspace supplies the exact SDK and compiler; packages cannot replace those
|
|
with their own versions. Authored source symlinks and non-bundled portable imports
|
|
other than the SDK and server Node builtins are rejected. This is build closure
|
|
checking, not a purity proof or security sandbox.
|
|
|
|
The core/Automerge bundle and Replicache bundle are built once. Browser modules
|
|
import the core through a content-addressed gateway URL, independent of package
|
|
identity. Each manifest covers the shared bytes it uses. The gateway retains its
|
|
workspace authentication and explicit file registry; it never interprets an HTTP
|
|
path as a Nix store path. Applications cannot import Replicache through the SDK.
|
|
|
|
`checked-artifacts.nix` evaluates a package's `checkedArtifacts` output without
|
|
activation. `loadCheckedArtifactWorld` then verifies manifest bytes, the trusted
|
|
generator identity, and exact regenerated binding sources. Receipts are consistency
|
|
evidence from a trusted Nix build, not cryptographic attestations of remote builds.
|
|
The separate manifest-only loader is useful for candidate diagnostics; activation
|
|
must use the checked loader.
|
|
|
|
The root `camino-artifact-builds` check exercises actual reader/service outputs,
|
|
module and process execution, browser shared imports, rejection recovery, and
|
|
altered receipt rejection. The managed workspace host verifies these receipts
|
|
before activation. No adapter pretends this ABI works in the old server dispatcher.
|
|
|
|
Component packages add `components = { inherit (react) sdk runtime; entries; }`.
|
|
The ordinary execution candidate checker supplies the selected React build inputs
|
|
when the package declares components. Each entry maps a component ID to
|
|
`{ entry = "src/card.tsx"; export = "Card"; }`. See the
|
|
[React SDK](../camino-react/README.md) for bindings and hooks. CSS is emitted as a
|
|
checked artifact; local image/font imports are inlined. The helper rejects
|
|
undeclared external assets and substituted React/client dependencies.
|
|
Component-only packages produce no backend service.
|
|
|
|
`camino-component-artifacts` checks bad subject/SDK/dependency/asset inputs and
|
|
proves that a component-only edit preserves a mixed package's service digest.
|
|
Run `nix run .#camino-component-source-qualification` from the monorepo to
|
|
materialize separate retained Git resources and compile an ordinary Nix candidate.
|
|
This is a source/build qualification harness; it does not deploy a workspace.
|