Framework packages
All packages underpackages/ ship as one versioned release train. Use one release line across direct Firedrill dependencies; the package manager resolves the exact internal versions from the published manifests. The initial unpublished candidate is 0.1.0-rc.1.
The exact package names, directories, export paths, CLI binary, and supported toolchain are checked against the release’s public-surface.json. Changing that file is an intentional public-contract decision, not an incidental consequence of adding code.
Reusable Tool packs are independently versioned. A Tool declaration’s version must equal its npm package version, and its engine range declares which local runtime contract it supports.
Engine contract
The current Tool engine contract is0.1.0. Compatible framework prereleases and patches may implement that same engine contract. Compilation rejects a Tool whose declared semver range does not include the current engine; it never guesses at compatibility.
Repository source
The first public authored-source contract isschemaVersion: 1. Every typed JSON or YAML resource declares it. Firedrill validates the version before interpreting fields:
- version
1is accepted and normalized through the published schema; - a missing or malformed version fails normal schema validation; and
- an integer version other than
1fails with diagnosticFD1103and a source span.
Generated builds and reports
Generated builds are immutable, content-addressed artifacts rather than source. Build manifest, world IR, package lock, and run-setup schemas are version1. An unsupported generated schema fails with FD1604 before Tool behavior loads. Engine mismatch, changed bytes, or an unexpected artifact set also fails closed. Recompile the original source with a compatible Firedrill release instead of editing generated files.
Local report bundles carry their own schema versions and exact hashes. firedrill report verify is the compatibility and integrity gate before a report is inspected or compared. Unsigned local verification proves internal consistency, not producer identity.
This unpublished candidate also records controller-driven fault changes as
fault_control evidence, separately from a triggered fault. An older candidate
that does not recognize that evidence kind must reject the bundle; do not remove
entries to make it pass. Use the same release train for execution and inspection.
Release-candidate promise
Release candidates may still change public APIs and source shapes before0.1.0. Each candidate must nevertheless reject unknown versions clearly, keep coding-agent diagnostics stable within that candidate, and install all framework packages from the same release train. Breaking changes after a stable release require a new major version or an explicit compatible upgrade path.