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-regexand../zig-gc. - Owner-maintained tools and libraries under
~/Code/Toolsand~/Code/Librariesremain 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 #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.
libffiremoval is completed in #463.- BunPress is consumed and improved as an exact owner-maintained local dependency in #464.
- Repository Python/semantic-shell gates, generators, audits, and publication tools migrate under #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.