구조
ADR-0001: T0 Lang is its own Cargo workspace; TTT hosts it through a bridge crate
이 페이지는 영어입니다. 하나의 언어로 유지된 사양은 하나의 내용만 말합니다.
Status: accepted (2026-10-09)
Context#
T0 Lang must be maintained independently of TTT (own versioning, tests,
docs, releases) while TTT is where users run it. The repository already
holds independent build units (data-engine/ is a separate Cargo workspace
with no path dependency on the terminal). Pushing to GitHub is blocked in
this environment, so creating a second remote repository is not something
that can be done or verified here.
Decision#
t0-lang/at the repository root is a separate Cargo workspace. It has no dependency on anytrading-terminalcrate, and the dependency direction is one-way: TTT depends on T0, never the reverse.- The TTT side of the integration (the host bridge) is a crate inside the
terminal workspace,
trading-terminal/crates/t0-host. It depends on the T0 crates by path and on TTT's own crates. TTT's UI uses it fromterminal-app;terminal-uionly gets plain display data. - The workspace can be split into its own repository later with
git subtree split --prefix t0-langand consumed as a git submodule (thewebsite/precedent); nothing in it refers outsidet0-lang/.
Alternatives#
- A new GitHub repository now -- cannot be created or pushed from here; a submodule pointing at an unpublished repository would break every clone.
- Crates inside
trading-terminal/-- the language would share the terminal's lockfile, lints and release cadence, and nothing would stop a compiler crate from importing a terminal crate.
Consequences#
- Two lockfiles. The T0 crates use only
serde,serde_json,sha2beyondstd, which keeps version friction with the terminal small. - A test in
t0-hostchecks the manifest it publishes against the contract snapshot committed int0-lang/contracts/so the two sides cannot drift silently (ADR-0006).
Revisit when#
The language gets a second host or external users: then split the repository and publish versioned crates.