Dependency resolution¶
A PLeX package is a directory with a synps.toml. The root project and its
reusable dependencies use the same package format.
Local dependencies¶
[dependencies]
codec = { path = "../Quantizations/F16" }
The path is relative to the declaring manifest.
Git dependencies¶
[dependencies]
model = { git = "https://github.com/useplx/Qwen3.5.git", version = "v1.0.0" }
The resolver caches Git sources under ~/.cache/synapse. Selection preference
for Git dependencies is an explicit rev, then a declared version selector,
then the repository's default HEAD when neither is supplied.
Use subdir when one repository contains multiple packages:
[dependencies]
f16 = { git = "https://github.com/useplx/Quantizations.git", version = "v1.0.0", subdir = "F16" }
The resolved subdirectory must remain inside the checked-out repository.
Use a commit rev when source identity matters.
Registry sources¶
Version/registry syntax exists in the manifest model, but registry resolution
currently reports Registry::Unavailable. Public docs should not present a
registry workflow as usable yet.
synps.lock¶
synps install
writes a lockfile describing the just-resolved package graph.
Current behavior
Normal dependency resolution does not call Lockfile::load(). The lockfile
is therefore a snapshot, not a source of pinning for subsequent build or
install operations in this implementation. synps update currently calls
the same install/resolution path and rewrites the snapshot.
Do not rely on lockfile consumption for reproducibility until the resolver uses
it. Pin Git commits in synps.toml instead.
Aliases¶
The key under [dependencies] is the local alias:
[dependencies]
text = { path = "../TextPackage" }
[packages.text]
context = 2048
That alias is also used where the configuration refers to a dependency package.
Capabilities¶
Packages can declare abstract requirements:
[capabilities]
provides = ["generator"]
requires = ["tokenizer"]
When one provider satisfies a requirement, resolution can select it. When the choice is ambiguous, the root chooses explicitly:
[bindings]
tokenizer = "text-tools"
Variables¶
A reusable package publishes a schema:
[package.variables]
context = { type = "uint32", default = 2048, min = 1, define = "MODEL_CONTEXT", facets = ["graph", "orchestration"] }
The root may configure variables of a direct dependency:
[packages.text]
context = 4096
Unknown names, type mismatches, and bounds violations are errors. Facet-scoped definitions participate only in the fingerprints of the facets that consume them.
Inspect resolution¶
synps graph
synps inspect
graph is the compact view of dependency/capability resolution. inspect
continues into the effective build/compiler plan.