title: SEC-KN-P6-ROTATE — EC2 MCP host code divergence (top freeze input) date: 2026-08-01 step: SEC-KN-P6-ROTATE-a model: Thinking authority: knowtation posture: Thinking session probes only — no secret rotation, no env/posture flip, no deploy frozen_input_for: docs/SEC-KN-P6-ROTATE-FREEZE.md
EC2 MCP host runs pre-current-main code (source SEC-KN-3 is on main)
Board correction
SEC-KN-3 tip 5954c433… is an ancestor of Muse main. GitHub origin/main contains
the SEC-KN-3 resolveHostedActorRole markers (first mirrored at git 69a7673, 2026-07-27).
The ROADMAP wording "SEC-KN-3 … not merged to main" was stale.
Live probe (same agent_access JWT on both hosts)
| Call | Gateway (api.knowtation.store) |
MCP (mcp.knowtation.store) |
|---|---|---|
GET health |
200 Netlify | 200 nginx/1.24.0 |
GET session introspection |
200 | 200 (shared secret still holds) |
POST discard nonexistent prop-p6-rotate-probe-nonexistent-0000 |
401 UNAUTHORIZED | 200 (empty body) |
GET same nonexistent id |
404 NOT_FOUND | 404 NOT_FOUND |
Token scopes were exactly propose + vault:read (no write/admin). On current main,
Phase C agentScopesPermitMethod refuses discard create-path → getUserId null → 401
(hub/lib/agent-credential-core.mjs:366-388; hub/gateway/server.mjs:1628-1634).
MCP returning 200 means that refuse path is absent on EC2 → runtime ≠ current main.
Frozen consequence
Deploy current main to EC2 before any SESSION_SECRET rotation
(docs/SEC-KN-P6-ROTATE-FREEZE.md D2). The 200 is not treated as a completed
admin-elevation proof (real approve not run); it is enough to gate deploy-first.