Skip to content

Build: enforce owned local dependencies and offline builds #462

Description

@chrisbbreuer

Parent: #459

Goal

Enforce a zero-unowned-production-dependency policy: zig-js may depend only on Zig's standard library/toolchain and owner-maintained sibling repositories resolved locally under ~/Code/**.

The engine dependencies already use local ../zig-regex and ../zig-gc. Documentation deliberately uses the owner-maintained BunPress ecosystem from ../../Tools/bunpress; defects and missing capabilities belong in those source repositories rather than in replacement code inside zig-js.

Required policy

  • Classify every external edge as exactly one of: Zig/compiler toolchain; standard platform SDK/runtime interface; owner-maintained local build/runtime dependency; explicit checksum-pinned test/conformance/benchmark oracle; generated-data acquisition input; or prohibited/unclassified. The classification states whether it can affect shipped semantics.
  • Production Zig package dependencies are an explicit allowlist of owner-maintained local paths; initially ../zig-regex and ../zig-gc.
  • Owner-maintained tools and libraries under ~/Code/Tools and ~/Code/Libraries remain dependencies and are improved at their source. Do not replace them merely to reduce dependency count.
  • No unowned network dependency resolution, vendored third-party runtime/library, C/C++ engine, opaque binary, or system JavaScript engine may enter the library or its normal build.
  • Platform SDK/runtime APIs required to expose a platform feature (for example Foundation/Objective-C on macOS) are declared separately from portable engine dependencies and must not provide JavaScript semantics.
  • System JavaScriptCore and external standards corpora remain differential/conformance/benchmark oracles only, behind explicitly named non-library targets.
  • Generators must consume checked-in, checksum-pinned inputs or explicit one-shot acquisition commands; ordinary builds and tests do not fetch the network.
  • CI sibling checkouts use exact owner-maintained revisions and the same local-path graph as development.
  • Repository Python and semantic shell implementation tools migrate under Tooling: consolidate durable repository tools in TypeScript on Home #497. JavaScript/TypeScript tools that are part of an owner-maintained package remain in that package and are improved there; unowned registry/runtime/bootstrap edges still require an explicit pin and classification.
  • WABT, wasm-tools, upstream engines, and standards corpora may remain explicit pinned test/benchmark oracles, but never enter the normal package graph, shipped library, ordinary offline build, or source of runtime semantics.

Audit

  • Scan build.zig.zon, Zig imports, link directives, C/Objective-C includes, package manifests, scripts, subprocesses, dynamic loading, and generated-file provenance.
  • Fail on an unclassified dependency edge or network access from a normal build/test/docs command.
  • Produce a machine-readable inventory with owner, purpose, scope, local path, pin, license, and whether it can affect runtime semantics.

Acceptance

  • A CI gate rejects any unapproved dependency/link/fetch edge.
  • The normal library build succeeds with network disabled and only owner-maintained sibling checkouts present.
  • libffi removal is completed in ObjC: replace libffi with an owned native ABI dispatcher #463.
  • BunPress is consumed and improved as an exact owner-maintained local dependency in Docs: consume and improve owned BunPress tooling locally #464.
  • Repository Python/semantic-shell gates, generators, audits, and publication tools migrate under Tooling: consolidate durable repository tools in TypeScript on Home #497 without deleting owner-maintained packages.
  • README, build.zig.zon, and developer docs state the exact policy without claiming that test-only standards inputs are production dependencies.
  • No compatibility shim or fallback weakens a feature merely to avoid implementing its owned replacement.
  • Toolchain, owner-maintained dependency, platform SDK, test oracle, acquisition input, and shipped dependency boundaries are machine-readable and fail on ambiguity.

Foundation

The local-path dependency graph is established in build.zig.zon; the engine/JSC separation is documented in README and enforced by the separate comparison executables.

Metadata

Metadata

Assignees

No one assigned

    Labels

    dependenciesDependency ownership and offline build policyenhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions