feat(agents): the floating DevOps agent - devops-1, ROBOCO_DEVOPS_ENABLED delegation lane, conventions-declared infra review gate - #1109
Merged
Conversation
…1 board-team floater on the cell-pr-reviewer-2 template, gateway role config, A2A matrix, agentrole enum migration 103, hummin high-thinking tier, headcount 25 -> 26; inert until a dispatcher routes to it
…S_ENABLED - generic dev dispatch admits the flag-armed floater, the full authoring verb set (claim through i_am_done incl. sync_branch and the NEEDS_REVISION rework edge), claim-team exemption, and Board materialization target_agent honored by the roadmap/pest_control/coroner materializers; flag-off stays byte-for-byte inert
…tions standard - optional infra: glob section on ConventionsStandard (None = defaults, [] = opt-out, declared = curated-replaces), shipped DEFAULT_INFRA_GLOBS, round-trip through render_yaml and the panel Conventions tab, flag-independent effective_infra_globs accessor, and a JSONB cache-schema stamp so pre-stamp cache rows recompute instead of masking the declaration
…marker-based, primary reviewer ownership untouched), a blocking pr_pass precondition requiring a devops verdict for the current head SHA (re-arms on head advance, devops's own pass is its verdict), record_devops_review intent, devops_review findings origin, the /api/v1/flow/devops router, and a dispatcher slot spawning devops-1 after the primary reviewer; glob predicate over the project's effective infra globs with self-review exclusion
…RUF100, pre-existing from #1079)
|
Thanks for opening your first pull request on RoboCo! Quick checklist before review (most of these are enforced by CI, but worth a glance):
See CONTRIBUTING.md for the full workflow and the Code of Conduct for the community standards we follow. Welcome aboard — a maintainer will review shortly. |
…cker/agent-devops.Dockerfile FROM agent-base with a pinned multi-arch infra toolchain (docker CLI for compose config validation only, no daemon/socket ever, compose plugin, kubectl, helm, terraform, hadolint, yamllint, shellcheck), build service added byte-identically to both compose files, registry pre-pull entry, release.yml IMAGES entry, dockerfile_map + AGENT_IMAGES repoint, image-registry test pin
…ount 26 + org-chart floater line, task-lifecycle.md gains the infra review gate paragraph (globs source, marker co-claim, record_devops_review, devops_review origin, full-second-reviewer ruling, self-review exclusion, delegation lane, flag-off inertia)
… org-chart floater line, infra co-review lifecycle bullet, infra: globs in the conventions paragraph, provider list synced to AGENTS.md (OpenRouter/Nebius/Hummin were missing)
…1110) The agent image never pre-creates ~/.config/opencode, and main() wrote opencode.json without mkdir-ing its parent, so every OpenRouter-routed spawn exited 1 on FileNotFoundError before the CLI ever started (same crash on fe-dev-1, fe-pm, the auditor). The bash-guard plugin write already mkdir'd its parents; the config write now does the same. Regression test mirrors the plugin-write parents test with a missing .config/opencode prefix.
deploy/nginx.conf includes /etc/nginx/front/active-upstreams.conf (the blue-green color switch), but docker-compose.registry.yml never mounted the repo's ./front directory, so fresh `make quickstart` crash-looped roboco-nginx on the missing include while everything else came up healthy. The build compose has carried the directory mount since the 2026-09-17 blue-green flip; the registry compose now carries the byte-identical block. Directory bind, not a file bind: a file bind pins the inode and deploy-nas.sh's atomic tmp+mv swap would never reach the running container. Guard test pins the ./front:/etc/nginx/front:ro mount in BOTH compose files and that front/active-upstreams.conf exists in the repo, so a future compose fork cannot reintroduce the fresh-install crash.
rennf93
force-pushed
the
feat/devops-agent
branch
from
September 21, 2026 06:53
0be3f22 to
40bd83c
Compare
This was referenced Sep 21, 2026
This was
linked to
issues
Sep 21, 2026
…d the arcs caught four real gaps Three scripted arcs in tests/e2e_smoke/test_devops_gate.py over the REAL choreographer verbs: (1) the infra review gate end to end — an assembled cell->root PR touching DEFAULT_INFRA_GLOBS refuses the primary reviewer's pr_pass until devops-1 co-claims via claim_gate_review and records a passed record_devops_review verdict, then composes; both rejections walked (verdict-less pr_pass, record before co-claim); (2) flag-off inertia: the identical chain passes with no devops involvement; (3) the delegation lane: a PM-assigned infra leaf flows through the normal authoring lifecycle as devops-1. The arcs immediately paid for themselves — four production gaps fixed: - roboco/mcp/flow_server.py never exposed record_devops_review: the manifest advertised it but a real devops-1 could not record a verdict. Tool added + registered. - content_notes had no devops section entry while i_am_done demands dev_notes>=min: the delegation lane could never complete. devops now authors the developer section (it IS a worktree author). - _agent_access_claim_guard had no flag-gated devops exemption (the task-level carve-out alone): every delegation-lane claim was wedged behind the assigned-cell rule. - content_actions refused the co-claimant's journal note (the verdict verbs demand a learning entry; the marker now authorizes content). Plus: the smoke harness mounts the flow_devops router (it predated the feature); devops-1 joins the seeded canonical company (static seed UUID like main-pm); dev_arc creates nested work-file parents; the i_am_done files_changed evidence leg forwards the submitting agent instead of the post-transition assignee; agent-image-smoke.yml gains a devops toolchain-smoke job (build + every pinned binary executes, no daemon).
test(e2e): the devops gate + delegation lane join the live smoke
This comment was marked as outdated.
This comment was marked as outdated.
… write The Playwright job carries an explicit permissions block; the devops job inherited the default read-only token, so its always() PR-comment step died with 403 Resource not accessible by integration (the build and the toolchain check themselves passed). Same grant added, and the comment step now tolerates a missing report file: a failed build never creates one, and a comment-step ENOENT must not bury the actual failure.
DevOps image toolchain smoke resultsDevOps toolchain smoke check (agent-devops)docker-cli 28.4.0 |
Agent Image Smoke (Playwright) resultsPlaywright image size delta (real
|
| image | before | after | delta |
|---|---|---|---|
| agent-qa-fe | 2096MB | 2096MB | +0MB |
| agent-ux | 2014MB | 2014MB | +0MB |
Headless chromium launch smoke check
PLAYWRIGHT_SMOKE_OK
PLAYWRIGHT_SMOKE_OK
Playwright MCP server smoke check
Version 0.0.78
Version 0.0.78
Headless browser verification screenshot (ux-qa image)
Screenshot of a live panel page (/login), taken from inside agent-ux:after. See the ux-qa-panel-screenshot build artifact.
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Summary
Implements docs/internal/devops-agent-spec.md (4 stages): one floating DevOps agent (
devops-1,Role.DEVOPS, board-team floater on the cell-pr-reviewer-2 template) that authors and reviews infra work on ANY project, RoboCo included. Default-off behindROBOCO_DEVOPS_ENABLED; flag off is byte-for-byte inert.Stage 0: identity + headcount (ffeedc2)
Role.DEVOPS,devops-1seeded (UUID ...0004-000000000009), gateway role config with notify_ack, A2A matrix (initiates only to cell_pm/main_pm),GATEWAY_ENABLED_ROLES, image reuse (roboco-agent-dev-be, no new Dockerfile/compose), hummin high-thinking tier, migration 103 (agentrole enum), headcount 25 -> 26 (docs-drift anchor + README), panel roster/labels/fallbacks.Stage 1: delegation lane (8331c80)
target_agenthonored by roadmap/pest_control/coroner materializers.Stage 2: the infra declaration (ea001fe)
infra:glob section onConventionsStandard(None = shippedDEFAULT_INFRA_GLOBS, [] = opt-out, declared = curated-replaces); round-trips through render_yaml + the panel Conventions tab (no strip-on-save); flag-independenteffective_infra_globsaccessor; JSONB cache-schema stamp recomputes pre-stamp cache rows instead of masking the declaration.Stage 3: the review gate (dc84668)
pr_passprecondition: when changed files hit the project's effective infra globs (self-review excluded, waiver path unaffected), a devops verdict for the current head SHA is required; re-arms on head advance. devops-1 co-claims via a marker (primary reviewer's ownership/claim/verbs untouched), records pass verdicts via the newrecord_devops_reviewintent, files pr_fail findings under the newdevops_reviewledger origin. Dispatcher spawns devops-1 after the primary reviewer. Full/api/v1/flow/devops/*router (closed a Stage 1 gap: the verbs had no routes).Test plan
make foundation-checkgreen post-commit at every stage (identity/lifecycle drift, seeds, postgres enum parity, artifact renders)