Skip to content

The shapes we already tried and removed#88

Open
czpython wants to merge 4 commits into
mainfrom
commonzenpython/agents-settled-boundaries
Open

The shapes we already tried and removed#88
czpython wants to merge 4 commits into
mainfrom
commonzenpython/agents-settled-boundaries

Conversation

@czpython

Copy link
Copy Markdown
Owner

A sandbox agent gets the repo, the skills, and the prompts. It does not get the history — so it re-proposes things this codebase already tried and removed. Recent live examples: an input class for workflow parameters, @step on run(), a deploy-time drain around in-flight runs, isinstance switching over a typed stream, a settings column for a schedule interval.

None of that is discoverable from the code. Deleted things leave no trace, which is the point of deleting them and also why they come back.

What this adds

A ## Settled shapes section under Architectural boundaries: 22 rules across the durable SDK, state and durability, layering, and the wire. Each is one specific prohibition with the reason attached, because a rule without its cost reads as arbitrary and gets argued with.

The source was a pass over the decision record built up across this project's design sessions. The filter was three questions: would an implementer plausibly propose the discarded side, can it be stated as one specific prohibition, and is it still true today.

What was deliberately left out

  • Status and arc history. "Shipped in X, merged on Y" is what a changelog is for. Every entry here is present tense.
  • Anything already enforced. If the SDK raises on it, the code teaches it faster than a document can.
  • Session workflow. Branch hygiene, review cadence, when to push — that governs a human-in-the-loop session, not a sandbox.
  • Code style. Comment diet, naming, control-flow shape and the rest belong to the house-rules skill, which the profiler already ships into the sandbox. Duplicating them here would put the same rule in two places that drift apart.
  • Anything superseded. One candidate was dropped on inspection: model-namespace routing described model_prefixes, which was deleted from the harnesses recently. That is the failure mode this section has to stay ahead of.

Verification

Every symbol and path asserted here was checked against this branch: run_multistep, steps_reuse_sandbox, get_prompt_context, dispatch, Gate.answer, Workflow.cancel, Gate.__init_subclass__'s name pin, druks/mcp/, druks/notifications/. One bullet was corrected during that pass — the frontend client is frontend/src/api/client.ts plus per-extension api.ts files, not a single root api.ts, so the rule names neither path.

No ticket references, PR numbers, or dates, per the repo-content rule.

The file goes from 113 to 190 lines. Worth watching: a long instruction file gets obeyed selectively — specific rules land, generic ones get skimmed — which is why every entry here is a concrete prohibition rather than a principle.

czpython added 4 commits July 26, 2026 16:55
A sandbox agent reads the repo, not its history, so it keeps proposing the side
of a decision this codebase already discarded — an input class, @step on run(),
a deploy drain around in-flight runs, isinstance over a typed stream. Deleted
code leaves no trace to read, which is why it comes back.

Twenty-two of those, each as one prohibition carrying the reason it exists.
Present tense only: no arc history, nothing the SDK already raises on, no code
style (that lives in the house-rules skill), and nothing superseded.
The first pass restated two rules the SDK already raises on and six that
docs/writing-an-extension.md owns, wrapped in a section framed as history.
What is left are nine boundaries an agent crosses with nothing to stop it,
appended to the list that already holds that kind of rule.
The Run bullet claimed build still couples to Run; build has no Run reference at
all and Run is off the author surface, so the export list already teaches it.

The projection bullet forbade the subscriber that records a work item's handoff
outcome. Liveness is what must derive from run state; an extension's own outcome
is its fact to keep, written by reacting to run lifecycle.
@czpython
czpython force-pushed the commonzenpython/agents-settled-boundaries branch from a16664b to c6facaa Compare July 26, 2026 09:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant