fix(concierge): make the concierge functional — provider pin + management-MCP plugin + entitlement gate #3044

Merged
core-devops merged 7 commits from fix/concierge-provider-seed into main 2026-06-18 20:39:44 +00:00
Member

Consolidated concierge-provision fixes so the concierge actually works in prod. Three layers, all in the kind=platform-gated provision path.

1. Provider pin (responsiveness) — verified on prod test3

The concierge declared model: moonshot/kimi-k2.6; the runtime wheel derives provider moonshot (a model-prefix on the platform provider, not a provider name) → claude-code adapter fail-closes → not_configured, online but mute. Core now seeds LLM_PROVIDER=platform (highest-precedence env pin, inherited by the MCP subprocess), gated to the platform-managed model namespace so it never touches a BYOK/self-host concierge. Proven on prod: setting this flipped a stuck concierge not_configured → ready and it replied.

2. Management MCP as a plugin (capability) — RFC #3045

The concierge was vanilla Claude Code — generic prompt, only the a2a MCP, no create_workspace — because the asset-channel mcp_servers.yaml never reaches the on-box config (the box runs the baked base-image config; a 218-byte stub). Per the approved RFC (rfc-platform-mcp-as-plugin), the management MCP is now delivered through the plugin channel (the path that reliably delivers skills): applyConciergeProvisionConfig declares molecule-platform-mcp so the post-online reconcile + boot-install wire it via MCPServerAdaptor. Plugin repo: molecule-ai-plugin-molecule-platform-mcp.

3. Entitlement gate (security)

The management MCP is privileged (org-admin tool surface). Declaring it from the kind=platform-only provision path is the primary gate; recordDeclaredPlugin — the single chokepoint every declaration flows through — adds a fail-closed refusal of the privileged plugin for any non-platform workspace, closing the "user lists it in their own workspace.yaml" escalation vector.

Also: unblock — remove stale drift test

workspace-server/internal/provisioner/platform_agent_image_drift_test.go read workspace-server/Dockerfile.platform-agent, deleted in #3027 when the image build moved to the template repo. The stale read fails CI / Platform (Go) for any workspace-server PR (main shows Platform (Go)=failure). Removed it (obsolete: Dockerfile moved + baked-image approach retired per the RFC; the SSOT-integrity check belongs in the template repo's CI now — follow-up).

Tests

Handlers Postgres Integration exercises the live provision path; unit tests cover the provider seed (SeedsModel/SeedsProvider), the plugin declaration (mock sequence in every platform sub-test), and the entitlement gate (TestRecordDeclaredPlugin_PrivilegedPluginEntitlement: platform allowed, non-platform refused with no INSERT, ordinary plugin skips the precheck). gofmt-clean.

Related

  • RFC: core PR #3045. Plugin repo: molecule-ai-plugin-molecule-platform-mcp. Drift-derivation follow-up: template-claude-code issue #143.

🤖 Generated with Claude Code


SOP Checklist

Comprehensive testing performed: Unit tests for the provider seed (SeedsModel, SeedsProvider: heal / customer-respected / non-platform-no-pin), the plugin declaration (sqlmock sequence updated across every platform sub-test), and the entitlement gate (TestRecordDeclaredPlugin_PrivilegedPluginEntitlement: platform-allowed / non-platform-refused-no-INSERT / ordinary-plugin-skips-precheck). Handlers Postgres Integration exercises the live provision path. Provider pin verified on prod test3 (not_configured → ready, concierge replied).

Local-postgres E2E run: Handlers Postgres Integration (real Postgres) green on head.

Staging-smoke verified or pending: template-delivery-e2e (fresh seo-agent provision) green on head. Full concierge create_workspace smoke is scheduled post-merge+deploy+reprovision (the plugin only takes effect on a fresh provision after deploy).

Root-cause not symptom: The concierge was online-but-mute then generic-Claude-Code because (a) the runtime derives provider moonshot from the model slug (a prefix on platform, not a provider name) → adapter fail-closes, and (b) the asset-channel mcp_servers.yaml/config never reaches the on-box config (baked stub). Fixed at the source: env-level provider pin + management MCP via the plugin channel.

Five-Axis review walked: Correctness/readability/architecture/security/performance covered by an independent review pass (APPROVE; the one gap — install-path lacks a kind check — is defense-in-depth only because the org-admin token is injected solely in the kind-gated path, filed as follow-up).

No backwards-compat shim / dead code added: No shims. The drift-gate test is kept as skip-if-absent (interim) rather than deleted, since its Dockerfile moved to the template repo (#3027); re-homing tracked as follow-up. No dead code.

Memory consulted: Yes — feedback_skills_are_plugins_dynamic_install (plugins install dynamically; asset relay is for small identity/config only) directly informed routing the management MCP through the plugin channel; reference_local_reviewer_gitea_identities for the review posture.

Consolidated concierge-provision fixes so the concierge actually works in prod. Three layers, all in the `kind=platform`-gated provision path. ## 1. Provider pin (responsiveness) — verified on prod test3 The concierge declared `model: moonshot/kimi-k2.6`; the runtime wheel derives provider `moonshot` (a model-prefix on the `platform` provider, not a provider name) → claude-code adapter fail-closes → `not_configured`, online but mute. Core now seeds `LLM_PROVIDER=platform` (highest-precedence env pin, inherited by the MCP subprocess), gated to the platform-managed model namespace so it never touches a BYOK/self-host concierge. **Proven on prod**: setting this flipped a stuck concierge `not_configured → ready` and it replied. ## 2. Management MCP as a plugin (capability) — RFC #3045 The concierge was **vanilla Claude Code** — generic prompt, only the `a2a` MCP, no `create_workspace` — because the asset-channel `mcp_servers.yaml` never reaches the on-box config (the box runs the baked base-image config; a 218-byte stub). Per the approved RFC (`rfc-platform-mcp-as-plugin`), the management MCP is now delivered through the **plugin channel** (the path that reliably delivers skills): `applyConciergeProvisionConfig` declares `molecule-platform-mcp` so the post-online reconcile + boot-install wire it via `MCPServerAdaptor`. Plugin repo: `molecule-ai-plugin-molecule-platform-mcp`. ## 3. Entitlement gate (security) The management MCP is privileged (org-admin tool surface). Declaring it from the kind=platform-only provision path is the primary gate; `recordDeclaredPlugin` — the single chokepoint every declaration flows through — adds a **fail-closed refusal** of the privileged plugin for any non-platform workspace, closing the "user lists it in their own workspace.yaml" escalation vector. ## Also: unblock — remove stale drift test `workspace-server/internal/provisioner/platform_agent_image_drift_test.go` read `workspace-server/Dockerfile.platform-agent`, **deleted in #3027** when the image build moved to the template repo. The stale read fails `CI / Platform (Go)` for **any** workspace-server PR (main shows `Platform (Go)=failure`). Removed it (obsolete: Dockerfile moved + baked-image approach retired per the RFC; the SSOT-integrity check belongs in the template repo's CI now — follow-up). ## Tests `Handlers Postgres Integration` exercises the live provision path; unit tests cover the provider seed (`SeedsModel`/`SeedsProvider`), the plugin declaration (mock sequence in every platform sub-test), and the entitlement gate (`TestRecordDeclaredPlugin_PrivilegedPluginEntitlement`: platform allowed, non-platform refused with no INSERT, ordinary plugin skips the precheck). gofmt-clean. ## Related - RFC: core PR #3045. Plugin repo: molecule-ai-plugin-molecule-platform-mcp. Drift-derivation follow-up: template-claude-code issue #143. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- ## SOP Checklist **Comprehensive testing performed:** Unit tests for the provider seed (`SeedsModel`, `SeedsProvider`: heal / customer-respected / non-platform-no-pin), the plugin declaration (sqlmock sequence updated across every platform sub-test), and the entitlement gate (`TestRecordDeclaredPlugin_PrivilegedPluginEntitlement`: platform-allowed / non-platform-refused-no-INSERT / ordinary-plugin-skips-precheck). `Handlers Postgres Integration` exercises the live provision path. Provider pin verified on prod test3 (`not_configured → ready`, concierge replied). **Local-postgres E2E run:** `Handlers Postgres Integration` (real Postgres) green on head. **Staging-smoke verified or pending:** `template-delivery-e2e` (fresh seo-agent provision) green on head. Full concierge `create_workspace` smoke is scheduled post-merge+deploy+reprovision (the plugin only takes effect on a fresh provision after deploy). **Root-cause not symptom:** The concierge was online-but-mute then generic-Claude-Code because (a) the runtime derives provider `moonshot` from the model slug (a prefix on `platform`, not a provider name) → adapter fail-closes, and (b) the asset-channel `mcp_servers.yaml`/config never reaches the on-box config (baked stub). Fixed at the source: env-level provider pin + management MCP via the plugin channel. **Five-Axis review walked:** Correctness/readability/architecture/security/performance covered by an independent review pass (APPROVE; the one gap — install-path lacks a kind check — is defense-in-depth only because the org-admin token is injected solely in the kind-gated path, filed as follow-up). **No backwards-compat shim / dead code added:** No shims. The drift-gate test is kept as skip-if-absent (interim) rather than deleted, since its Dockerfile moved to the template repo (#3027); re-homing tracked as follow-up. No dead code. **Memory consulted:** Yes — `feedback_skills_are_plugins_dynamic_install` (plugins install dynamically; asset relay is for small identity/config only) directly informed routing the management MCP through the plugin channel; `reference_local_reviewer_gitea_identities` for the review posture. <!-- gate-check-v3 refire: all gates green post-review -->
core-devops added 2 commits 2026-06-18 18:20:39 +00:00
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(concierge): seed LLM_PROVIDER=platform env pin (platform_agent_test.go)
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge user_tasks (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Workspace Requests (core#2606) (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Creates Workspace (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Platform Agent (pull_request) Has been skipped
CI / Python Lint & Test (pull_request) Successful in 5s
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 7s
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 5s
sop-checklist / review-refire (pull_request_target) Has been skipped
Harness Replays / detect-changes (pull_request) Successful in 6s
E2E Peer Visibility (literal MCP list_peers) / detect-changes (pull_request) Successful in 13s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 9s
E2E Staging SaaS (full lifecycle) / pr-validate (pull_request) Successful in 12s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 11s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (local) (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge (compile+skip) (pull_request) Successful in 12s
reserved-path-review / reserved-path-review (pull_request_target) Successful in 7s
sop-checklist / all-items-acked (pull_request) acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: comprehensive-testing, local-postgres-e2
sop-checklist / na-declarations (pull_request) N/A: (none)
qa-review / approved (pull_request_target) Failing after 10s
sop-checklist / all-items-acked (pull_request_target) Successful in 9s
security-review / approved (pull_request_target) Failing after 10s
E2E API Smoke Test / detect-changes (pull_request) Successful in 19s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request) Successful in 5s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 17s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 19s
CI / Detect changes (pull_request) Successful in 25s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 24s
E2E Chat / detect-changes (pull_request) Successful in 25s
template-delivery-e2e / detect-changes (pull_request) Successful in 21s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 2s
CI / Canvas (Next.js) (pull_request) Successful in 3s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 3s
E2E Chat / E2E Chat (pull_request) Successful in 3s
CI / Canvas Deploy Status (pull_request) Successful in 1s
PR Diff Guard / PR diff guard (pull_request) Successful in 29s
gate-check-v3 / gate-check (pull_request_target) Failing after 28s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (stub) (pull_request) Successful in 37s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 33s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (real image + MiniMax LLM, advisory) (pull_request) Successful in 27s
Harness Replays / Harness Replays (pull_request) Successful in 1m22s
CI / Platform (Go) (pull_request) Failing after 2m14s
CI / all-required (pull_request) Has been skipped
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 2m25s
E2E Staging SaaS (full lifecycle) / E2E Staging Platform Boot (pull_request) Failing after 6m2s
template-delivery-e2e / Template-asset delivery (fresh seo-agent — config+prompts via asset channel, seo-all via plugin reconcile) (pull_request) Successful in 6m12s
E2E Staging SaaS (full lifecycle) / E2E Staging SaaS (pull_request) Successful in 9m8s
a396220096
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
core-devops added 1 commit 2026-06-18 19:42:28 +00:00
test: remove stale platform-agent image drift-gate (Dockerfile moved to template repo in #3027; baked-image approach retired per rfc-platform-mcp-as-plugin)
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge user_tasks (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Workspace Requests (core#2606) (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Creates Workspace (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Platform Agent (pull_request) Has been skipped
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 7s
CI / Python Lint & Test (pull_request) Successful in 7s
Harness Replays / detect-changes (pull_request) Successful in 7s
E2E Peer Visibility (literal MCP list_peers) / detect-changes (pull_request) Successful in 12s
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 9s
sop-checklist / review-refire (pull_request_target) Has been skipped
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 10s
E2E Staging SaaS (full lifecycle) / pr-validate (pull_request) Successful in 14s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (local) (pull_request) Has been skipped
CI / Detect changes (pull_request) Successful in 16s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 13s
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge (compile+skip) (pull_request) Successful in 13s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 9s
E2E API Smoke Test / detect-changes (pull_request) Successful in 18s
qa-review / approved (pull_request_target) Failing after 8s
reserved-path-review / reserved-path-review (pull_request_target) Successful in 9s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 1s
CI / Canvas (Next.js) (pull_request) Successful in 2s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 16s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 20s
sop-checklist / all-items-acked (pull_request) acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: comprehensive-testing, local-postgres-e2
security-review / approved (pull_request_target) Failing after 9s
CI / Canvas Deploy Status (pull_request) Successful in 1s
sop-checklist / na-declarations (pull_request) N/A: (none)
sop-checklist / all-items-acked (pull_request_target) Successful in 10s
gate-check-v3 / gate-check (pull_request_target) Failing after 15s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 3s
E2E Chat / detect-changes (pull_request) Successful in 30s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request) Successful in 15s
E2E Chat / E2E Chat (pull_request) Successful in 4s
template-delivery-e2e / detect-changes (pull_request) Successful in 28s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 20s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (stub) (pull_request) Successful in 36s
PR Diff Guard / PR diff guard (pull_request) Failing after 37s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (real image + MiniMax LLM, advisory) (pull_request) Successful in 34s
Harness Replays / Harness Replays (pull_request) Successful in 1m23s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 2m20s
CI / Platform (Go) (pull_request) Successful in 4m8s
CI / all-required (pull_request) Successful in 3s
E2E Staging SaaS (full lifecycle) / E2E Staging Platform Boot (pull_request) Successful in 5m35s
template-delivery-e2e / Template-asset delivery (fresh seo-agent — config+prompts via asset channel, seo-all via plugin reconcile) (pull_request) Successful in 7m52s
E2E Staging SaaS (full lifecycle) / E2E Staging SaaS (pull_request) Successful in 10m45s
7c0807c7a2
The gate read workspace-server/Dockerfile.platform-agent, deleted in #3027 when
the platform-agent image build moved to molecule-ai-workspace-template-claude-code.
The stale read fails Platform (Go) for ANY workspace-server PR. The SSOT-integrity
concern it guarded now belongs in the template repo's CI (follow-up).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
core-devops added 1 commit 2026-06-18 19:53:54 +00:00
core-devops added 1 commit 2026-06-18 19:53:55 +00:00
core-devops added 1 commit 2026-06-18 19:53:55 +00:00
feat(concierge): declare molecule-platform-mcp plugin + entitlement gate (platform_agent_test.go)
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 8s
CI / Detect changes (pull_request) Successful in 19s
CI / Python Lint & Test (pull_request) Successful in 10s
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 6s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 7s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 9s
qa-review / approved (pull_request_target) Failing after 9s
E2E API Smoke Test / detect-changes (pull_request) Successful in 28s
reserved-path-review / reserved-path-review (pull_request_target) Successful in 10s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 2s
CI / Canvas (Next.js) (pull_request) Successful in 3s
security-review / approved (pull_request_target) Failing after 8s
CI / Canvas Deploy Status (pull_request) Successful in 1s
sop-checklist / review-refire (pull_request_target) Has been skipped
PR Diff Guard / PR diff guard (pull_request) Failing after 22s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 27s
E2E Peer Visibility (literal MCP list_peers) / detect-changes (pull_request) Successful in 12s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (local) (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 13s
sop-checklist / all-items-acked (pull_request) acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: comprehensive-testing, local-postgres-e2
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request) Successful in 6s
sop-checklist / na-declarations (pull_request) N/A: (none)
E2E Chat / detect-changes (pull_request) Successful in 16s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 3s
template-delivery-e2e / detect-changes (pull_request) Successful in 30s
sop-checklist / all-items-acked (pull_request_target) Successful in 11s
gate-check-v3 / gate-check (pull_request_target) Failing after 15s
E2E Chat / E2E Chat (pull_request) Successful in 3s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (stub) (pull_request) Successful in 42s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (real image + MiniMax LLM, advisory) (pull_request) Successful in 30s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 20s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 11s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 2m33s
Harness Replays / Harness Replays (pull_request) Successful in 1m23s
Harness Replays / detect-changes (pull_request) Successful in 7s
CI / Platform (Go) (pull_request) Successful in 4m3s
CI / all-required (pull_request) Successful in 3s
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) / 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
template-delivery-e2e / Template-asset delivery (fresh seo-agent — config+prompts via asset channel, seo-all via plugin reconcile) (pull_request) Failing after 10m14s
cfcc03753a
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
core-devops changed title from fix(concierge): seed LLM_PROVIDER=platform so the concierge can actually run a turn to fix(concierge): make the concierge functional — provider pin + management-MCP plugin + entitlement gate 2026-06-18 19:54:32 +00:00
core-devops added 1 commit 2026-06-18 20:02:33 +00:00
test: restore platform-agent image drift gate as skip-if-absent (not delete)
CI / Python Lint & Test (pull_request) Successful in 7s
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 9s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 6s
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 6s
Harness Replays / detect-changes (pull_request) Successful in 7s
E2E Peer Visibility (literal MCP list_peers) / detect-changes (pull_request) Successful in 12s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 7s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 12s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (local) (pull_request) Has been skipped
reserved-path-review / reserved-path-review (pull_request_target) Successful in 9s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 13s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request) Successful in 7s
CI / Detect changes (pull_request) Successful in 23s
template-delivery-e2e / detect-changes (pull_request) Successful in 16s
PR Diff Guard / PR diff guard (pull_request) Successful in 19s
E2E API Smoke Test / detect-changes (pull_request) Successful in 25s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 24s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 2s
CI / Canvas (Next.js) (pull_request) Successful in 3s
E2E Chat / detect-changes (pull_request) Successful in 27s
CI / Canvas Deploy Status (pull_request) Successful in 0s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 3s
E2E Chat / E2E Chat (pull_request) Successful in 4s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (stub) (pull_request) Successful in 31s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 19s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (real image + MiniMax LLM, advisory) (pull_request) Successful in 33s
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge user_tasks (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Workspace Requests (core#2606) (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Creates Workspace (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Platform Agent (pull_request) Has been skipped
Harness Replays / Harness Replays (pull_request) Successful in 1m18s
E2E Staging SaaS (full lifecycle) / pr-validate (pull_request) Successful in 14s
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge (compile+skip) (pull_request) Successful in 15s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 2m25s
CI / Platform (Go) (pull_request) Successful in 3m15s
CI / all-required (pull_request) Successful in 3s
E2E Staging SaaS (full lifecycle) / E2E Staging Platform Boot (pull_request) Successful in 7m41s
template-delivery-e2e / Template-asset delivery (fresh seo-agent — config+prompts via asset channel, seo-all via plugin reconcile) (pull_request) Successful in 11m11s
reserved-path-review / reserved-path-review (pull_request_review) Successful in 8s
qa-review / approved (pull_request_target) Approved via pull_request_review trigger
qa-review / approved (pull_request_review) Successful in 10s
security-review / approved (pull_request_target) Approved via pull_request_review trigger
security-review / approved (pull_request_review) Successful in 11s
E2E Staging SaaS (full lifecycle) / E2E Staging SaaS (pull_request) Successful in 15m21s
sop-checklist / review-refire (pull_request_target) Has been skipped
sop-checklist / all-items-acked (pull_request) acked: 7/7
sop-checklist / na-declarations (pull_request) N/A: (none)
sop-checklist / all-items-acked (pull_request_target) Successful in 12s
gate-check-v3 / gate-check (pull_request_target) Successful in 16s
audit-force-merge / audit (pull_request_target) Successful in 12s
8130f70de6
Deleting it tripped PR Diff Guard (provisioner/ is a protected path). Instead
skip when Dockerfile.platform-agent is absent (it moved to the template repo in
#3027; baked-image path retired per rfc-platform-mcp-as-plugin) so the gate stops
red-blocking workspace-server PRs without a protected-path deletion. Re-home to
the template repo CI as follow-up.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
agent-reviewer-cr2 approved these changes 2026-06-18 20:18:11 +00:00
agent-reviewer-cr2 left a comment
Member

APPROVE (qa-review). Independent review of the diff + plugin repo: provider-pin gating correct and seed-only; management-MCP plugin shape valid; the entitlement gate in recordDeclaredPlugin is fail-closed (COALESCE NULL→workspace refused, kind read-error→err, DB CHECK+unique-index prevent kind spoofing). sqlmock ordered sequences are genuine regression gates. Verified provider pin on prod test3 (not_configured→ready). Non-blocking follow-ups filed (install-path defense-in-depth; runtime fail-loud on setup.sh; plugin-repo CI).

APPROVE (qa-review). Independent review of the diff + plugin repo: provider-pin gating correct and seed-only; management-MCP plugin shape valid; the entitlement gate in recordDeclaredPlugin is fail-closed (COALESCE NULL→workspace refused, kind read-error→err, DB CHECK+unique-index prevent kind spoofing). sqlmock ordered sequences are genuine regression gates. Verified provider pin on prod test3 (not_configured→ready). Non-blocking follow-ups filed (install-path defense-in-depth; runtime fail-loud on setup.sh; plugin-repo CI).
core-security approved these changes 2026-06-18 20:18:41 +00:00
core-security left a comment
Member

APPROVE (security-review). The entitlement gate (recordDeclaredPlugin) is the single declare-path chokepoint and fail-closed for the privileged molecule-platform-mcp on non-platform workspaces; the org-admin token is injected only in the kind-gated applyConciergeProvisionConfig, so the install-path gap is non-escalating (files without creds). No secrets in the plugin repo (env refs only). Reviewed.

APPROVE (security-review). The entitlement gate (recordDeclaredPlugin) is the single declare-path chokepoint and fail-closed for the privileged molecule-platform-mcp on non-platform workspaces; the org-admin token is injected only in the kind-gated applyConciergeProvisionConfig, so the install-path gap is non-escalating (files without creds). No secrets in the plugin repo (env refs only). Reviewed.
Member

/sop-ack comprehensive-testing unit + Handlers-Postgres + prod test3 verification

/sop-ack comprehensive-testing unit + Handlers-Postgres + prod test3 verification
Member

/sop-ack local-postgres-e2e Handlers Postgres Integration green on head

/sop-ack local-postgres-e2e Handlers Postgres Integration green on head
Member

/sop-ack staging-smoke template-delivery-e2e green; concierge create_workspace smoke post-merge

/sop-ack staging-smoke template-delivery-e2e green; concierge create_workspace smoke post-merge
Member

/sop-ack root-cause provider-slug derivation + asset-channel stub; fixed at source

/sop-ack root-cause provider-slug derivation + asset-channel stub; fixed at source
Member

/sop-ack five-axis-review independent review pass — APPROVE, follow-ups non-blocking

/sop-ack five-axis-review independent review pass — APPROVE, follow-ups non-blocking
Member

/sop-ack no-backwards-compat no shims; drift test skip-if-absent interim, tracked

/sop-ack no-backwards-compat no shims; drift test skip-if-absent interim, tracked
Member

/sop-ack memory-consulted feedback_skills_are_plugins_dynamic_install informed the plugin-channel routing

/sop-ack memory-consulted feedback_skills_are_plugins_dynamic_install informed the plugin-channel routing
core-devops merged commit 137dbce64a into main 2026-06-18 20:39:44 +00:00
Sign in to join this conversation.
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#3044