# type-lang v0.1.0 — Scaffold
**The repository bootstrap.** v0.1.0 stands up the crate, the tooling, and the
quality gates the type system is built on — and nothing more. There is no domain
logic in this release on purpose: the type representation, the unification core,
the substitution machinery, and the inference scaffolding land across the 0.x
series, each behind a passing gate. This tag exists so that the first line of real
type-checking code is written against a green CI, a fixed toolchain contract, and a
documented plan, rather than into an empty directory.
## What is type-lang?
The type-system substrate of a compiler front-end. It represents types, unifies
them under a substitution, mints fresh inference variables, and reports the precise
reason a unification fails. It is the structural core that a language's own type
rules — its primitives, its subtyping, its coercions — layer on top of: this crate
owns the representation and the unification/substitution machinery; the policy of
any one language is expressed by the consumer in terms of that core. It does no
parsing and renders no diagnostics — it assigns types to an `ast-lang` tree,
resolves names through `symbol-lang`, and hands a structured type error to
`diag-lang` — and it is one of the semantic crates of the `-lang`
language-construction family.
## What's in 0.1.0
### Crate manifest and toolchain contract
`Cargo.toml` declares the full publish metadata — description, keywords,
categories, repository, homepage, dual `Apache-2.0 OR MIT` license, and authors —
on Rust 2024 edition with MSRV 1.85. The feature set is minimal and additive:
`std` on by default, with an opt-in `serde` feature reserved for serializing type
terms. No first-party dependency is wired yet; `ast-lang`, `symbol-lang`, and
`diag-lang` are added at v0.2.0 when the type-checking code first uses them, so the
scaffold carries no unused dependency.
### Quality gates, wired before the code
The CI matrix (`.github/workflows/ci.yml`) runs the full gate on Linux, macOS, and
Windows against both stable and the 1.85 MSRV: `cargo fmt --check`, clippy on
default and all features with `-D warnings`, the test suite on both feature sets,
and a documentation build with `-D warnings`. A separate security job runs
`cargo audit` and `cargo deny check`. `deny.toml`, `clippy.toml`, and `rustfmt.toml`
pin the license allow-list, the lint profile (MSRV-aware, breaking-API-change
guarded), and the import-grouping style. The crate root sets
`#![forbid(unsafe_code)]` and `#![deny(missing_docs)]` from the first commit.
### Documentation and plan
`README.md` and `docs/API.md` describe the crate's purpose and mark the public
surface as still to come, so the contract is legible before it is implemented.
`dev/DIRECTIVES.md` records the definition of done and the project-specific
invariants the property tests will hold to: unification is sound and symmetric,
yields a most-general unifier, and the occurs check rejects infinite types.
`dev/ROADMAP.md` front-loads the hard part — the type representation, unification,
and inference scaffolding at v0.2.0, where `ast-lang`, `symbol-lang`, and
`diag-lang` are also wired — and carries an anti-deferral rule: no listed hard task
slips to a later phase without the file recording the move and the reason.
## Breaking changes
**None.** This is the first tag.
## Verification
```bash
cargo fmt --all -- --check
cargo clippy --all-targets -- -D warnings
cargo clippy --all-targets --all-features -- -D warnings
cargo test
cargo test --all-features
RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --all-features
cargo +1.85 build --all-features
cargo audit
cargo deny check
```
All green on Linux (WSL2 Ubuntu) and Windows x86_64, Rust stable 1.95 and MSRV
1.85. Counts at this tag: 1 unit test (a build smoke test), 0 doctests — there is
no public surface to exercise yet.
## What's next
- **0.2.0 — Core (the hard part, not deferred).** Build the type representation,
the unification algorithm with its occurs check and path-compressed variable
resolution, the substitution machinery, and the inference scaffolding that
per-language rules layer on. Wire `ast-lang`, `symbol-lang`, and `diag-lang` as
they are first used. Soundness, symmetry, most-general-unifier, and occurs-check
rejection come under property tests; every public item ships with rustdoc and a
runnable example, and `docs/API.md` is authored in full. This is the core of the
crate, and it is proven now, not deferred.
## Installation
```toml
[dependencies]
type-lang = "0.1"
```
MSRV: Rust 1.85.
## Documentation
- [README](https://github.com/jamesgober/type-lang/blob/main/README.md)
- [API Reference](https://github.com/jamesgober/type-lang/blob/main/docs/API.md)
- [CHANGELOG](https://github.com/jamesgober/type-lang/blob/main/CHANGELOG.md)
---
**Changelog:** [`CHANGELOG.md`](https://github.com/jamesgober/type-lang/blob/main/CHANGELOG.md).