Pharos Framework

← Back

Native Artifact Contract

Pharos native binary artifacts are not published yet. This contract defines the artifact shape required before any native target can be promoted to release_ready.

Required artifact layout

Each target must produce this layout under dist/native/<target-id>/:

pharos
ARTIFACT-MANIFEST.json
pharos.sha256
native-smoke-result.json

Windows targets may use pharos.exe instead of pharos.

Required manifest fields

ARTIFACT-MANIFEST.json must include:

  • schema: pharos.native_artifact_manifest.v1;
  • target_id;
  • os;
  • cpu;
  • abi;
  • artifact_kind: native_executable;
  • native_binary_release: true;
  • compiler_identity;
  • source_revision;
  • source_file;
  • source_files;
  • runtime_source_execution: not_supported;
  • runtime_source_consumption_mode: contract_spec_with_shell_native_adapters;
  • runtime_source_modules_packaged: false;
  • runtime_source_dependency_status: blocked_on_explicit_runtime_source_contract;
  • sha256;
  • smoke_result;
  • release_gate_status.

Required smoke result fields

native-smoke-result.json must include:

  • schema: pharos.native_smoke_result.v1;
  • target_id;
  • runner;
  • status: green;
  • commands;
  • timestamp_utc;
  • artifact_sha256.

Current status

This is a contract only. The active release path remains source-bootstrap, and native release remains blocked until native artifacts, hosted smoke, and checksums exist for all six targets.

The current native implementation uses a modular source layout under src/native_runtime/c/ while preserving this artifact contract.

The explicit runtime_source_* manifest fields are important: they prevent generated source companions or shared declarative runtime metadata ownership modules from being misread as proof that the native artifact already executes those source modules directly at runtime.

Native-first convergence testing

The native artifact path is also the preferred local convergence test surface when the host can build a runnable native target.

Preferred local check command:

scripts/check.sh native-compiled-flow

That flow currently:

  • builds the host-compatible native target
  • runs native CLI smoke
  • runs native target verification
  • runs native server smoke where the local route-contract wrapper exists today

This does not mean the native listener / compiled host boundary is already unified. It means local testing should exercise that boundary earlier and more often so drift trends toward zero instead of being discovered only in release packaging.