New projects from conversation (M2.5, PR B)
- propose_project(name, purpose, decisions) in a conversation goes up for a go-ahead (checked: a slug, not an existing project, no trailing question). - On go, the provisioning checklist (D1): a repository with a README, protection on its default branch, the agent as a collaborator, a build VM, a deploy key, and the project entry as YAML with <...> to fill in. - On "done", the agent reads its configuration again and adds the new project live (build_loop_agent(load=...); only additions), then checks what was provided (D4, verified, not assumed): permissions and protection as it sees them, then on a throwaway branch with an empty commit, a branch push must succeed and a push to the default branch and merging its own PR must be refused. The check's PR is closed and its branch deleted. Failures are said per item; nothing starts. - Checked: the tracking issue (the distilled decisions, carrying the new item's ID), and the project's item, agreed and labelled `design`, whose first milestone is ARCHITECTURE.md and the build plan. A conversation waiting on provisioning doesn't close as idle. - The walk replays exactly from its seed (item IDs too), and event IDs stay unique across simulated restarts, as a server's are. - The test config holds output to 8192 tokens, under the test key's per-request cost cap. Tests: new-project unit tests (checklist and its YAML parse as config, done before the entry, what isn't set up, a checked project's record and first PR, an existing name), protection enforced by a hook on the fake forge, the walk proposing projects and saying done, and an e2e new project in a repository the test operator provisions from the agent's checklist. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
This commit is contained in:
1 parent
9a86ccb2a4
commit
ad2d090143
13 files changed
+723
-54
No files matched your search
@@ -85,6 +85,20 @@ PROPOSE_WORK = _tool(
|
||||
"whole brief.",
|
||||
)
|
||||
|
||||
PROPOSE_PROJECT = _tool(
|
||||
"propose_project",
|
||||
"The conversation has become a new project: propose it. The operator "
|
||||
"agrees to it as to a restatement; then you list what it needs set up "
|
||||
"(a repository, a build VM, the project's entry), and once it is ready "
|
||||
"and checked, the project's architecture is your first piece of work. "
|
||||
"Ends your turn.",
|
||||
name="The project's name: lowercase letters, digits and -.",
|
||||
purpose="What it is for, in a paragraph.",
|
||||
decisions="The decisions setting it up depends on: language and toolchain "
|
||||
"(which pick the build VM), services, secrets, network access beyond the "
|
||||
"default; and anything else agreed so far.",
|
||||
)
|
||||
|
||||
WAITING = frozenset(
|
||||
{
|
||||
"restate",
|
||||
@@ -94,6 +108,7 @@ WAITING = frozenset(
|
||||
"wait_for_review",
|
||||
"reply",
|
||||
"propose_work",
|
||||
"propose_project",
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
Reference in new issue
Block a user