Repository navigation
feat!: cloudfall runs entirely on treaty; MCP server is cloudfall mcp serve - #14
Merged
Merged
Conversation
…l mcp serve` The last argparse commands move to treaty 1.0.0rc29: - `operator run` streams one event per watch pass, with `effect` per pass (treaty #175); the loop is `operator.watch()`, testable with a fake feed - `dashboard serve` streams one event once it listens, then serves until stopped; request lines go through ctx.log - `changelog` is treaty's built-in, from a packaged schema-changelog.json - root --help, --version and --schema are treaty's; cli.py calls app.run, and arguments.py, manifest.py and output.py are gone `cloudfall-mcp` becomes `cloudfall mcp serve` (treaty #239, #240, #281, #285): the tools are the commands, chosen per fleet mode, with the fleet, schema, engine and shared evidence directories bound for the run. Engine work without a command (build_artifact, converge_*) and one tool per declared operation are provided tools. init, operations approve, operator run and dashboard serve are never MCP tools. mcp_server.py, fleet_tools.py and AgentToolset are gone; stdio end-to-end tests cover the server. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… gateway URL A project-mode call could name api_url and api_key_file together and send any controller file as the bearer key to a host of its choosing, write decrypted values to any path through secrets_render's output_file, or point operator_approve's verification at its own gateway. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The startup flag was read as a secret, so --secrets-dir was refused and only --secrets-dir-from-env/--secrets-dir-from-file were offered, unlike cloudfall-mcp and the secrets guide. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ger has Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… directory A project-mode tool call could name an absolute receipts, output_dir, env_dir or plan_file path and write outside the project: an import's env files hold the application's real values. Binding needs one field name per directory, so the CLI flags that named the same directory differently are renamed: observe --output-dir is --observed, services inspect --output-dir is --service-observed, and --receipts is --releases, --backups, --data-migrations or --env-receipts by what it holds. A non-default --observed or --env-receipts now reaches observe and secrets render too. dashboard serve reports only a failed bind as dashboard_listen_failed; the eager snapshot read is no longer caught as one. The site and fleet-goals no longer call every MCP write confirm-gated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Finishes the move off argparse. Every
cloudfallcommand, root--help/--version/--schema, and the MCP server now run on treaty 1.0.0rc29.CLI
operator runstreams one event per watch pass, withdata.passanddata.effect(treaty #175). The loop moved intooperator.watch()dashboard servestreams one event once it listens, then serves until stopped. Request lines go throughctx.logchangelogis treaty's built-in, served from a packagedschema-changelog.json. It is generated at release time withtreaty changelog-add, as described in CONTRIBUTINGcli.pyjust callsapp.run.arguments.py,manifest.pyandoutput.pyare deleted, along with their testsAGENTS.mdthatcloudfall initwrites describes treaty's envelopeoperator runis listed with the commands that change servers, since a declaredOperatorPolicylets it run proposalsMCP:
cloudfall-mcpbecomescloudfall mcp serveUses treaty #239, #240, #281 and #285, filed for this port.
--projector--repository)build_artifact, andconverge_baseline/services/domains. The converges are destructive and needconfirm_destructiveoperation_*tool per declared operation, which runs check mode and records a proposalinit,operations approve,operator runanddashboard servearemcp=Falsemcp_server.py,fleet_tools.pyandAgentToolsetare deleted.AgentConfigstays formigrateBreaking for callers
cloudfall mcp serveinstead ofcloudfall-mcp. Tool names follow the commands, for examplelist_operationsbecomesoperations_listoperator_approve,backup_runandbackup_verifyrun in one call over MCP. They were confirm-gated beforeoperator_watchis goneoperator runexits 143 on SIGTERM. A systemd unit needsSuccessExitStatus=143(the operator guide has it)operator approvereports an unusable gateway as 4PRECONDITIONand an unreachable one as 12UNAVAILABLEChecks
ruff check .andmypyare cleanpytest: 353 passed. This includes stdio end-to-end MCP tests intest_agent_server.pyand a subprocess test ofdashboard servetreaty audithas no new findings beyond the empty schema changelogTreaty bugs found along the way: #288 (stdout stand-in lacks
reconfigure()) and #289 (UNKNOWN_TOOLomits provided tools).🤖 Generated with Claude Code