Browse RC.8 documentation
RC.8 Documentation revision 1

Appendix: External Repository Configuration

Declare, lock, materialize, bind, and locally override external Repositories through the three RC.8 TOML contracts.

Audience: Developers, integrators, and release engineers

External Repository configuration#

RC.8 separates author intent, exact resolution, and local development overrides into three TOML files:

FileAuthority
ait-external.tomlDirect declarations authored by the Repository.
ait-external.lockComplete resolved graph with exact Snapshot pins; generated by AIT.
ait-external.links.tomlLocal path overrides managed by AIT commands.

ait-external.toml#

Each [[external]] row identifies one direct external Repository and where its content is materialized.

Code · toml
[[external]]
name = "shared-core"
repo_name = "shared-core"
repository_index = 23
remote = "origin"
line = "main"
snapshot = "SNP-0123456789AB"
materialize_to = ".ait-external/shared-core"
license = "Apache-2.0"
version = "1.2.0"

[external.bindings.rust]
kind = "cargo-path"
path = "rust/crates/shared-core"
package = "shared-core"

[external.bindings.python]
kind = "python-path"
path = "python"
package = "shared-core"
module = "shared_core"

Declaration fields#

FieldType and meaning
nameRequired nonempty local external name. It identifies the declaration and link override.
repo_nameRequired nonempty source Repository name.
repository_indexRequired unsigned 32-bit server Repository index.
remoteRequired nonempty configured remote name used to resolve the source.
lineRequired nonempty source Line.
snapshotRequired nonempty exact source Snapshot ID. This is the pin, not merely a branch hint.
materialize_toRequired normalized Repository-relative destination. Absolute paths and .. traversal are rejected.
licenseRequired nonempty declared license expression or label.
versionOptional nonempty human-facing version string. The Snapshot remains the content authority.
bindingsOptional map with at most one binding for each supported language.

Direct names must be unambiguous. Materialization and binding paths are validated as repository-relative paths and cannot escape their owning root.

Binding fields#

TableRequired fieldsOptional metadata
[external.bindings.rust]kind = "cargo-path", pathpackage
[external.bindings.python]kind = "python-path", pathpackage, module
[external.bindings.node]kind = "file-package", pathpackage
[external.bindings.go]kind = "replace-path", pathmodule

Each path is relative to the external Repository materialization. Metadata, when present, must be nonempty. Binding validation can also check the relevant language tool and dependency file; a valid TOML shape alone does not prove a usable package binding.

ait-external.lock#

Do not synthesize or casually hand-edit this file. ait external update resolves direct and transitive externals, normalizes ordering, validates the graph, and writes the lock atomically.

Code · toml
format = "ait.external.lock"

[[node]]
name = "shared-core"
repo_name = "shared-core"
repository_index = 23
remote = "origin"
line = "main"
snapshot = "SNP-0123456789AB"
parent_path = ""
materialize_to = ".ait-external/shared-core"
license = "Apache-2.0"
version = "1.2.0"

[[node.binding]]
language = "rust"
kind = "cargo-path"
path = "rust/crates/shared-core"
package = "shared-core"

Lock fields#

FieldContract
formatExact string ait.external.lock.
[[node]]Zero or more normalized direct and transitive graph nodes.
node.nameRequired nonempty name, unique together with parent_path.
node.repo_nameRequired nonempty source Repository name.
node.repository_indexRequired unsigned 32-bit source Repository index.
node.remoteRequired nonempty remote name.
node.lineRequired nonempty source Line.
node.snapshotRequired nonempty exact Snapshot ID.
node.parent_pathEmpty for a direct root node; otherwise a normalized relative ancestry path.
node.materialize_toRequired normalized relative destination.
node.licenseRequired nonempty license label.
node.versionOptional version string.
[[node.binding]]Zero or more normalized binding summaries.
node.binding.languagerust, python, node, or go.
node.binding.kindThe exact kind admitted for that language.
node.binding.pathNormalized relative path.
node.binding.packageOptional nonempty package name.
node.binding.moduleOptional nonempty module name.

The lock detects missing, extra, and field-drifted direct roots against ait-external.toml. A clean lock must be committed with the manifest so every worktree and remote build sees the same graph.

Local links let a developer temporarily materialize one named external from an existing directory instead of its locked Snapshot.

Code · toml
[[link]]
name = "shared-core"
path = "../shared-core"

Each row has exactly the operational values name and path. The name refers to an external declaration; the path must resolve to an existing directory. Use the owning commands:

Code · bash
ait external link shared-core ../shared-core
ait external unlink shared-core

AIT removes the file when the final link is removed. Local links are a developer override and are rejected by locked or release-ready materialization. They never modify the declared Snapshot or generated lock.

Update and verification flow#

Code · bash
ait external update
ait external status
ait external doctor
ait diff ait-external.toml ait-external.lock

Review a lock change like a dependency update: verify Repository index, Line, Snapshot, materialization destination, license, and binding drift before recording the resulting Snapshot.

Version authority

Checked against the exact RC.8 source

This page is public documentation, not a second product contract. Use the exact source and distribution contract for release authority.

Owning component Snapshots
  • ait-coreSNP-F136DB9A342B
  • ait-serverSNP-FBF302ADABC5
  • ait-runnerSNP-DF67532B0360
  • ait-pythonSNP-39225802847F
  • ait-nodeSNP-3D474B60B26F