Release environments, development, deployment agents, and lots of improvements #5
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "develop"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
An agent definition lists its labels in metadata.session_labels (key, label, tone, description, source). A run sets the `agent` ones by writing output/session-labels.json ({"add": [...], "remove": [...]}), applied after a completed execution and named in the workspace contract. A `twin_changes` label is derived from the session's Twin Changes proposals, or from those of the sessions it dispatched: "Apply to Twin" while one waits, "Applied to Twin" once applied, "Twin apply failed" when it needs attention. The labels show as badges in the session topbar, the agent session list and home activity. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>An api_wrapper approve rule refuses the agent's direct call (409 change_proposal_required). The agent now lists such calls in its proposal under `requests` ({method, path, body, label, reason}); the platform checks each against the tool's rules (it must match an approve rule, else it is an issue), shows them on the Changes page and in the confirmation, and makes them last, in order, once a person confirms. The calls' meaning stays in the agent definition. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>A request may carry the agent's own action word ("archived"); the Changes page header counts requests per action next to created and changed records ("− 4 archived"), and the requested calls section moves to the top, above the records the proposal creates. The empty "deleted" count is hidden. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>A proposal tool with change_proposals.kind "generic" names its tab and page texts (label, view) and the agent submits items to review and the calls to make. Nothing in the platform knows what the upstream is. - Items: context, resources with a field table of current and proposed values (nested lists and records as nested rows with their own marks), files, notes and a preview; header counts from resource actions. - Calls: run in order, reading earlier results ({{call.field}} or $result), with expect for what a good response looks like and captured uploads. - Checks: read when prepared and again before applying (snapshot, none_match, some_match with pagination, exists). - Wrapper rules carry approver_header instead of a fixed route list; the key is stored only when true, so existing tool fingerprints are unchanged. - The proxy holds back only approve-only calls; standalone prepares and stores generic revisions the same way. - The wisvids requests kind is replaced by this shape. A transitional converter turns stored Twin revisions into the generic shape. Parity check: all 185 stored Twin revisions available (20 local, 165 from production) render byte-identical HTML on the generic page in every case, mode and unchanged-fields setting (1383 views), plus a committed synthetic fixture with retirements, new providers, relations and nested rates. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>A 25-topic New EU grants proposal was 25.8 MB because every Knowledge Base carries the same regulation and annexes and each file text appeared in its upload call, the item resource and the item preview, and again in the stored operations and run requests (34.5 MB per row, 8.2 MB of it file text, 1.8 MB unique). Generic proposals now accept contents: { id: { content | content_base64 } } and content_ref on uploads and files. The stored operations and run requests keep the reference; the apply step puts the content in place for the request only, and the Changes page reads it from document.contents. Inline content still works. Unreferenced contents are dropped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>A generic call's expect could not name an earlier result: {{create.id}} stayed literal, so a correct update was marked uncertain, and reconcile only knew a few fixed routes, which left the proposal stuck with no way to submit a new revision. The runner now resolves references in expect (without URL-encoding), and reconcile checks an interrupted PATCH or PUT that has an expect by reading the same path back. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>A backup joined each fetch of 250 rows into one string. On Twin the execution rows average 2 MB (up to 35 MB) and proposals reach 52 MB, so that string passed the JavaScript string limit ("Invalid string length") and the download stopped after it had started. Rows are now written in blocks of about 8 MB, and each table starts with a small fetch that is then sized to stay near 32 MB. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>An environment can be a reference { name, from, environment } to the environment another agent declares. It resolves when the run asks for it, with the repository mapped to this agent's own checkout of the same upstream, so a deployment agent runs the developer's stack from the branch under review without a copy that drifts. A deployment session with a running environment gets Open app on its deploy review, to try the branch before merging. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>