docs(rfc): fleet-governance — per-agent identities + single merge-automation (DESIGN ONLY) #3194

Closed
core-devops wants to merge 0 commits from docs/fleet-governance-identity-and-merge-automation into main
Member

DESIGN / INVENTORY ONLY — do NOT merge. No Gitea users created/deleted, no tokens minted/revoked, no branch protection edited.

Proposal + draft artifacts for two coupled fleet-governance fixes, with a full current-state identity inventory and a remove-and-reassign plan (per CTO escalation 2026-06-23).

Problem 0 — Identity inventory (verified read-only)

  • Operator GITEA_TOKEN (the cron fallback incl. the Conductor) maps to devops-engineer.
  • Recently merged molecule-core #3185 / #3184 / #3181 are all author = merged_by = devops-engineer — zero attribution separation; #3181 was force-merged over a RED enforced context with a do-not-merge label.
  • 34 local Claude agents on this Mac, none setting MOL_AGENT_PERSONA → all inherit the shared devops-engineer token (this is how a different local agent authored #3187/#3193).
  • Two overlapping naming taxonomies (agent-secrets.env vs personas/), 3 orphan token-dirs (no Gitea user), retired-but-live hongming-codex-laptop (still admin on core) + hongming-kimi-laptop, several stale local tokens, and no bot identity (all 404).

Problem 1 / 1.5 — Per-agent identities + REMOVE-ALL + RE-ASSIGN

Target one-identity-per-actor map (name = function), explicit revoke/delete list, 5-phase execution order, owner-gated vs in-lane split.

Problem 2 — Two merge bots → one

Conductor (gitea-merge-queue.py, /5, bar 2, force-merge, identity devops-engineer) vs automerge-bot.py (/15, bar 1, no force-merge). Flags the bar-mismatch race (effective bar on molecule-core = weaker of the two) + force/required-context asymmetry. Proposes Conductor = canonical, retire automerge-bot, fold in bar=1 + required-contexts.txt-as-SSOT enforcement (#3192), dedicated molecule-merge-bot identity, single kill-switch matrix.

Each section ends with an owner-gated vs in-lane table.

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

**DESIGN / INVENTORY ONLY — do NOT merge.** No Gitea users created/deleted, no tokens minted/revoked, no branch protection edited. Proposal + draft artifacts for two coupled fleet-governance fixes, with a full current-state identity inventory and a remove-and-reassign plan (per CTO escalation 2026-06-23). ## Problem 0 — Identity inventory (verified read-only) - Operator `GITEA_TOKEN` (the cron fallback incl. the Conductor) maps to **`devops-engineer`**. - Recently merged molecule-core **#3185 / #3184 / #3181** are all **author = merged_by = devops-engineer** — zero attribution separation; #3181 was force-merged over a RED enforced context with a `do-not-merge` label. - 34 local Claude agents on this Mac, none setting `MOL_AGENT_PERSONA` → all inherit the shared `devops-engineer` token (this is how a *different* local agent authored #3187/#3193). - Two overlapping naming taxonomies (`agent-secrets.env` vs `personas/`), 3 orphan token-dirs (no Gitea user), retired-but-live `hongming-codex-laptop` (still **admin** on core) + `hongming-kimi-laptop`, several stale local tokens, and **no** bot identity (all 404). ## Problem 1 / 1.5 — Per-agent identities + REMOVE-ALL + RE-ASSIGN Target one-identity-per-actor map (name = function), explicit revoke/delete list, 5-phase execution order, owner-gated vs in-lane split. ## Problem 2 — Two merge bots → one Conductor (`gitea-merge-queue.py`, */5, bar 2, force-merge, identity devops-engineer) vs `automerge-bot.py` (*/15, bar 1, no force-merge). Flags the **bar-mismatch race** (effective bar on molecule-core = weaker of the two) + force/required-context asymmetry. Proposes **Conductor = canonical**, retire `automerge-bot`, fold in **bar=1** + **`required-contexts.txt`-as-SSOT** enforcement (#3192), dedicated `molecule-merge-bot` identity, single kill-switch matrix. Each section ends with an **owner-gated vs in-lane** table. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
core-devops added 1 commit 2026-06-23 22:47:10 +00:00
docs(rfc): fleet-governance — per-agent identities + single merge-automation (DESIGN ONLY, do-not-merge)
Block integration-tester contamination artifacts / Block staging-trigger / invalid manifest contamination (pull_request) Successful in 7s
CI / Python Lint & Test (pull_request) Successful in 8s
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 9s
E2E Peer Visibility (literal MCP list_peers) / detect-changes (pull_request) Successful in 7s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 7s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (local) (pull_request) Has been skipped
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 7s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 2s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request) Successful in 6s
E2E API Smoke Test / detect-changes (pull_request) Successful in 17s
CI / Detect changes (pull_request) Successful in 17s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 15s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 17s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 20s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 2s
CI / Platform (Go) (pull_request) Successful in 3s
PR Diff Guard / PR diff guard (pull_request) Successful in 17s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 3s
CI / Canvas (Next.js) (pull_request) Successful in 3s
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 20s
CI / Canvas Deploy Status (pull_request) Successful in 1s
gate-check-v3 / gate-check (pull_request_target) Failing after 16s
template-delivery-e2e / detect-changes (pull_request) Successful in 20s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 4s
sop-checklist / review-refire (pull_request_target) Has been skipped
template-delivery-e2e / Template-asset delivery (fresh seo-agent — config+prompts via asset channel, seo-all via plugin reconcile) (pull_request) Successful in 2s
CI / all-required (pull_request) Successful in 4s
sop-checklist / all-items-acked (pull_request) acked: 0/9 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +6 — body-unfilled: comprehensive-testing, local-postgres-e2
sop-checklist / na-declarations (pull_request) N/A: (none)
E2E Chat / detect-changes (pull_request) Successful in 36s
sop-checklist / all-items-acked (pull_request_target) Successful in 11s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (stub) (pull_request) Successful in 38s
E2E Chat / E2E Chat (pull_request) Successful in 5s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (real image + MiniMax LLM, advisory) (pull_request) Successful in 2m10s
E2E Staging SaaS (full lifecycle) / pr-validate (pull_request) Waiting to run
E2E Staging SaaS (full lifecycle) / E2E Staging SaaS (pull_request) Waiting to run
E2E Staging SaaS (full lifecycle) / Prune stale e2e DNS records (pull_request) Blocked by required conditions
E2E Staging SaaS (full lifecycle) / E2E Staging Platform Boot (pull_request) Waiting to run
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge user_tasks (pull_request) Waiting to run
E2E Staging SaaS (full lifecycle) / E2E Staging Workspace Requests (core#2606) (pull_request) Waiting to run
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Creates Workspace (pull_request) Waiting to run
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge (compile+skip) (pull_request) Waiting to run
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Platform Agent (pull_request) Waiting to run
E2E Staging SaaS (full lifecycle) / E2E Staging Plugin Install Lifecycle (pull_request) Waiting to run
security-review / approved (pull_request_target) Review check failed via pull_request_review trigger
security-review / approved (pull_request_review) Failing after 11s
reserved-path-review / reserved-path-review (pull_request_target) Review check failed via pull_request_review trigger
qa-review / approved (pull_request_target) Review check failed via pull_request_review trigger
reserved-path-review / reserved-path-review (pull_request_review) Failing after 13s
qa-review / approved (pull_request_review) Failing after 15s
audit-force-merge / audit (pull_request_target) Has been skipped
f270d7c096
Inventory + design for two coupled governance fixes:
1. Per-agent Gitea identities: remove shared devops-engineer, re-assign each
   agent its own identity (full current-state inventory + remove-and-reassign
   plan per CTO 2026-06-23 directive).
2. Single merge-automation: make the Conductor canonical, retire automerge-bot,
   fold in bar=1 + required-contexts.txt-as-SSOT enforcement (PR #3192).

Owner-gated (account/credential lifecycle) vs in-lane split called out for
each. No users/tokens/BP changed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
devops-engineer added the do-not-auto-mergedo-not-mergewip labels 2026-06-23 22:47:37 +00:00
agent-reviewer-cr2 requested changes 2026-06-24 02:25:45 +00:00
agent-reviewer-cr2 left a comment
Member

REQUEST_CHANGES: this design-only PR adds docs/design/rfc-fleet-governance-identity-and-merge-automation.md to public core. The document contains detailed operational identity and credential inventory: token cache paths, Infisical/per-persona paths, local credential filenames, persona/user mappings, stale-token findings, admin/merge identities, and automation wiring. That is sensitive operational security material and should not live in the public core repository. Please move this RFC to the appropriate private/internal location (or strip the sensitive operational inventory from the public doc) before this can be approved.

REQUEST_CHANGES: this design-only PR adds docs/design/rfc-fleet-governance-identity-and-merge-automation.md to public core. The document contains detailed operational identity and credential inventory: token cache paths, Infisical/per-persona paths, local credential filenames, persona/user mappings, stale-token findings, admin/merge identities, and automation wiring. That is sensitive operational security material and should not live in the public core repository. Please move this RFC to the appropriate private/internal location (or strip the sensitive operational inventory from the public doc) before this can be approved.

Pull request closed

Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#3194