toolplane: say what a create would make, so a person can approve it - #41
Merged
Merged
Conversation
A create takes its flavour, image and network from a file on this node, and the SaaS had no way to learn them. The sentence a person approved therefore said those values were "the cluster's own settings" — true, and not something anyone can consent to. Validating the write path end to end on the 1cc lab R630 showed a VM created and reaching ACTIVE with the approver never told what it would be. describe_instance_profile reports them. It is a control operation: this process answers it from state its own operator wrote, running no command and calling no API, so it is a read that creates nothing and changes nothing. Three properties are worth stating because each was a choice. It reports values and not a sentence. The wording a person reads is product copy that should improve without an agent release on every cluster; the values are facts only this node holds. Each side owns the half it is authoritative for. It is Unlisted — served to the SaaS, never offered to the model. The model already cannot choose a flavour or an image, which is the profile's entire purpose, so advertising a tool that reports them would widen what the model sees without widening what it can do. The flag is published through toolcatalog rather than left for the SaaS to infer, because an exception typed out on that side is the hand-kept copy that package exists to abolish. It reports Configured false for a half-configured profile, not merely for an absent one. A profile missing any of the three refuses every create, so reporting it as configured would put values in front of a person for a call that cannot run. callControl now answers this operation before it looks for a probe runner. The guard it bypasses was written for exactly this case — its comment anticipated "a future control tool that is not scratch-class" — and an agent built without a probe plane still has to be able to say what a create would make. InstanceProfile lives in tunnelproto because both repositories read it: a wire shape only one side can import gets restated on the other, which is how cube-ai-advisor#121 and cube-advisor-agent#24 came to be green while disagreeing about a frame. Signed-off-by: Travis Wu <travis.wu@bigstack.co>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
describe_instance_profile— an unlisted, read-class control tool that reports the flavour, image, network and project acreate_instancewould use, so the SaaS can name them in the sentence a person approves.Adds
tunnelproto.InstanceProfileas the shared wire shape, andTool.Unlisted/Entry.Unlistedso the SaaS can tell a deliberate absence from its own tool list from a stale copy.Why
Validating the write path end to end on the 1cc lab R630 created a VM, watched it reach
ACTIVE, and recorded what its approver had read:Every word true, and a category rather than a machine. The values live in a file on this node; the SaaS composing the prompt had no way to learn them. There is no undo at the
operatelevel, so the person clicking approve is the last check, and they were being shown the least useful true sentence available.Reviewer notes
It reports values, not a sentence. The wording a customer reads is product copy that should improve without an agent release on every cluster; the values are facts only this node holds. Each side renders the half it is authoritative for.
Unlisted, and why it is published rather than inferred. The model already cannot choose a flavour or an image — that is the profile's entire purpose — so a tool reporting them would widen what the model sees without widening what it can do. It is not a security boundary: the executor serves the name to whoever holds the tunnel, and the level and impact checks are what decide whether a call runs. Without the flag the SaaS's catalogue comparison would need an exception typed out over there, which is the hand-kept copytoolcatalogexists to abolish.Configuredis false for a half-configured profile, not only an absent one. A profile missing any of the three refuses every create, so reporting it as configured would put values in front of a person for a call that cannot run.callControlanswers this before it looks for a probe runner. The guard it bypasses was written for this case — its comment anticipated "a future control tool that is not scratch-class" — and an agent built without a probe plane still has to be able to say what a create would make.TestDescribeWorksWithoutAProbeRunnerpins it.Break and restore, each watched to fail and then restored:
TestDescribeReportsTheProfileACreateWouldUseUnlistedTestEveryAllowlistEntryIsPublished, naming the toolFull suite
GO_TEST_RC=0, zero--- FAIL:lines.go vetclean;gofmtclean exceptcmd/agent/main_test.go, which is unclean ondevelopalready and untouched here.Docs
bigstack-handbook#638 — A person approves what they can see, in
read-only-plane-end-to-end.mdbeside the other slices.