Beskid Projects (HCL-based)
Beskid projects are defined by a declarative root manifest and a deterministic dependency graph.
This document describes the project contract used by CLI, analysis, and LSP tooling.
Canonical project manifest
Section titled “Canonical project manifest”- File name:
Project.proj - Location: project root directory
- Format: HCL-based declarative manifest
Project.proj is the source of truth for:
- project identity,
- targets,
- dependencies,
- source roots and build-relevant metadata.
Canonical project layout
Section titled “Canonical project layout”Minimum expected layout:
MyProject/├── Project.proj├── src/│ └── main.bd # or library entry source├── obj/│ └── beskid/ # tool-managed materialized artifacts└── Project.lock # generated lockfileNotes:
obj/beskid/is tool-managed output and should not be edited manually.Project.lockis generated and updated by resolve/build flows.
Project model
Section titled “Project model”- Project: one root manifest + one workspace root.
- Target: a buildable unit (for example executable or library).
- Dependency: a typed edge in the project graph.
Dependency sources in contract:
path(active)gitandregistry(reserved schema extension points)
Resolution and determinism contract
Section titled “Resolution and determinism contract”- Dependency resolution must produce a deterministic graph.
- Cycles are invalid.
- Build/check/run operations consume the same resolved graph model.
- Compilation order follows topological dependency order.
- Unresolved dependencies fail fast with stable diagnostics.
Tooling contract
Section titled “Tooling contract”- CLI, analysis, and LSP must share one project-loading and resolution model.
- Manifest validation diagnostics should be stable and actionable.
- Formatter and migration tooling may transform manifest text, but must preserve manifest semantics.
Related docs
Section titled “Related docs”./manifest.md— manifest schema./examples.md— sample manifests./resolution.md— graph and resolution rules./build-workflow.md— resolve/materialize/build lifecycle./lockfile.md— lockfile behavior