Project Candidate Artifact Delta v1

September 10, 2026 · View on GitHub

Status: implemented bounded profile; HOSTED GREEN under the v0.4.0 release baseline. Historical local, authoring-time, ignored, or separately provisioned observations below retain their narrower scope; public promotion and broader product completion remain separately gated.

Audience: compiler contributors and agents reviewing generated package changes.

This additive report compares actual pathless Web, npm, OpenAPI or C carriers from a candidate's original base and final admitted Project revision. It connects candidate review to emitted file bindings and manifest-selected export identities. It does not infer installed consumers, package compatibility or runtime behavior from those facts.

API and replay

pub fn artifact_delta(&self, expected_candidate: &str, kind: ImageArtifactKind)
    -> Result<String, Vec<Diagnostic>>;
pub fn verify_artifact_delta(&self, expected_candidate: &str,
    kind: ImageArtifactKind, bytes: &[u8]) -> Result<String, Vec<Diagnostic>>;

ImageArtifactKind selects Web, Npm, OpenApi or C. The report schema is semaprax.project-candidate-artifact-delta.v1; verification uses semaprax.project-candidate-artifact-delta-verification.v1. The exact candidate digest and requested kind bind every invocation.

Report generation independently replays the complete candidate history and canonical candidate evidence before constructing either carrier. It derives base and candidate images, invokes the existing pathless builders, and uses their independent carrier verification through Artifact Projection v1. Verification repeats that process and compares every submitted report byte. Recomputing public digests around edited report facts cannot authenticate those edits.

Each side keeps the existing artifact projection: Project/image/graph bindings, carrier schema and payload digest, envelope SHA256/byte length, actual file paths, lengths and SHA256 values, selected exports and source-input provenance. Encoded file bodies are not embedded in this review report. Existing artifact projection and candidate/build formats remain unchanged.

base and candidate contain the complete existing projection values. files and exports contain their sorted path/identity unions with explicit side facts, equality flags and added, removed, modified or unchanged classification. comparison distinguishes artifact_bytes_equal, carrier_equal, exports_equal and source_bindings_equal; inventory counts changed and unchanged entries. Exports use exact source-fact equality, including provenance, not a claim that their callable interfaces are compatible.

File and export relationships

Files are compared by their union of carrier-relative paths. Every file row retains before/after facts, including unchanged files. Absence is explicit. Byte equality compares actual file lengths and SHA256 bindings; carrier metadata equality is separate. A carrier revision can change even when particular file contents remain identical. File path ordering is deterministic and does not change the order or content of the underlying carrier.

Exports are compared by persistent declaration identity and retain their exact source facts. Display names or source paths do not substitute for stable IDs. These exports belong to the selected carrier through the actual manifest and builder invocation. The report does not invent a claim that every emitted file exports every selected declaration or that an external application consumes it.

The complete source inventory identifies authenticated compiler inputs. It is not runtime or test coverage. Source, export and carrier comparisons remain separate from file-content comparisons. A preserved stable ID or equal output digest does not establish ABI/API compatibility, behavioral equivalence, successful installation or runtime correctness.

Admission and authority

Existing profile admission is unchanged: Web uses the existing scalar Project v1 pathless carrier, while npm uses its supported Project profiles. Unsupported profile/kind combinations propagate their owning diagnostics; they are not converted into empty successful output. OpenAPI artifacts use the existing scalar generator on real selected source declarations, with complete Project source replay. C artifacts bind the checked linked native source to exact header prototypes or explicit exclusions. Rust carriers and compiled C libraries remain outside this report's scope, not claimed to be absent from the platform. Existing Web/npm report bytes retain their prior outside_projection inventory; the OpenAPI kind excludes itself from that inventory. C source artifacts have their own scope and do not imply a public linkable ABI; earlier report bytes remain unchanged.

No compiler executable, native compilation process, interpreter, test runner, package manager or generated target runs. No files are installed or published. The existing source/manifest/export invariant checks remain mandatory, and no artifact report, verification receipt or digest grants commit authority.

V5 build grant

candidate/artifact-delta requires the existing startup build grant and candidate preparation. Candidate-only sessions cannot discover or invoke it. Required parameters are image_revision, candidate_revision and kind (web, npm, openapi or c); there is no target selector or request-selected build limit.

The method is classified under candidate_build, not ordinary semantic reads. It authenticates live source before and after preparation, leaves the candidate registry unchanged, and remains outside the parallel image-read batch. V1–v4 remain unchanged; candidate/build shares the additive artifact kinds.

The closed semaprax.image-artifact-delta-chunk.v1 envelope returns bounded UTF-8 chunks with image/candidate/kind/report bindings and offsets. Optional offset is 0–8 MiB and must be a boundary within the actual report; chunk_bytes is 1,024–65,536, default 16,384. Source authority, artifact materialization and target execution are explicitly false. Discovery and generated clients describe the envelope; the heterogeneous report remains explicitly listed as unbundled.

Bounds and evidence

Each side uses the existing fixed 16 MiB build/envelope limit and 1 MiB compact artifact projection limit. The delta report is capped at 8 MiB. Reports use compact canonical UTF-8 JSON with lexical object keys, deterministic inventory order and one terminal LF. Existing builder and carrier limits remain active; overflow fails instead of dropping files or exports. Logical fact work is bounded to 32 MiB, each file inventory to 64 entries, combined path/export union to 65,536 entries, compiler-projection JSON syntax to 1,048,576 visits and container depth to 128. These are structural and output bounds, not peak-memory or latency guarantees.

Fact and verification digests use semaprax.candidate-artifact-delta.fact.v1 and semaprax.candidate-artifact-delta.report.v1, respectively, followed by NUL, the little-endian u64 byte length and exact bytes. Each side's fact digest uses canonical sorted JSON plus one LF, while the original artifact-projection wire retains its no-LF contract. File/envelope SHA256 bindings and carrier payload digests retain their existing owning definitions.

SPX-G331 reports inconsistent delta facts, SPX-G332 capacity overflow and SPX-G333 exact replay mismatch. Existing source, candidate, profile, target and carrier diagnostics can propagate unchanged.

tests/project_candidate/artifact_delta.rs owns library evidence; tests/image_transport_v5/artifact_delta.rs covers build gating, discovery and chunking. The implemented tests have hosted-green release evidence.

Broader carrier types, installed consumer relationships, cross-package migration, artifact filesystem authority, runtime compatibility and the full graph-operational programme remain outstanding.

The additive Candidate Analysis Artifact Evidence v1 embeds one freshly replayed complete delta in the exact candidate coverage inventory. That composition changes only the generated_artifacts boundary to partial; it does not widen this report's carrier admission, authority or nonclaims.