Design and tracking. Nothing here starts a build on its own. It records the contract and splits the work into six sub-issues.
What
The engine lives in chant, as a lexicon and a plugin surface beside describeResources(), observeResourcesDeep() and listArtifacts() (docs/src/content/docs/lexicons/overview.mdx:33-37). chant's typed source is already the resource graph a project holds, so no parsing of any infrastructure-as-code format is needed to build the request. behold consumes the result through chant graph --live --overlay, and never calls the engine itself.
The engine contract
The engine stays abstract, held to a stated shape and nothing more specific.
Input: a resource graph, entities with a kind, a provider, a region and a size, and the edges between them. This is what chant build already holds for any project, and what live-ls/live-plan hold for a choudoufu estate.
Output, per entity and per estate, at a stated traffic level: cost per hour, headroom (how far from saturation on CPU and latency), an error-rate expectation, a resilience verdict under a named failure such as one zone lost, and a right-size suggestion. Every number carries provenance, meaning which engine, which version, its stated tolerance, and whether the figure is modeled from list prices or validated against a bill.
The rules
A prediction is never presented as a bill. A missing or unreachable engine means no overlay and a refusal that names why, never a locally faked number, in the style of noGitlabNoteTokenMessage (packages/core/src/op/activities/reconcile.ts). The engine never sees credentials, and it never writes anything. The live path predicts the account as it stands, drift included. The declared path predicts the file. The two are shown as a delta.
Sub-issues
Refs INTENTIUS/behold#397, and #2314.
Design and tracking. Nothing here starts a build on its own. It records the contract and splits the work into six sub-issues.
What
The engine lives in chant, as a lexicon and a plugin surface beside
describeResources(),observeResourcesDeep()andlistArtifacts()(docs/src/content/docs/lexicons/overview.mdx:33-37). chant's typed source is already the resource graph a project holds, so no parsing of any infrastructure-as-code format is needed to build the request. behold consumes the result throughchant graph --live --overlay, and never calls the engine itself.The engine contract
The engine stays abstract, held to a stated shape and nothing more specific.
Input: a resource graph, entities with a kind, a provider, a region and a size, and the edges between them. This is what
chant buildalready holds for any project, and whatlive-ls/live-planhold for a choudoufu estate.Output, per entity and per estate, at a stated traffic level: cost per hour, headroom (how far from saturation on CPU and latency), an error-rate expectation, a resilience verdict under a named failure such as one zone lost, and a right-size suggestion. Every number carries provenance, meaning which engine, which version, its stated tolerance, and whether the figure is modeled from list prices or validated against a bill.
The rules
A prediction is never presented as a bill. A missing or unreachable engine means no overlay and a refusal that names why, never a locally faked number, in the style of
noGitlabNoteTokenMessage(packages/core/src/op/activities/reconcile.ts). The engine never sees credentials, and it never writes anything. The live path predicts the account as it stands, drift included. The declared path predicts the file. The two are shown as a delta.Sub-issues
Refs INTENTIUS/behold#397, and #2314.