Skip to content

Prevent implicit global remediation tasks when scope identity is missing - #711

Merged
witbrock merged 1 commit into
mainfrom
codex/von-0f688667013cecbb
Sep 15, 2026
Merged

witbrock merged 1 commit into
mainfrom
codex/von-0f688667013cecbb

Conversation

@witbrock

Copy link
Copy Markdown
Member

Merge decision: ready — a namespaced critique with no user or organisation identity can no longer silently create a globally visible remediation task.

User outcome

Retain the critique and report a recoverable routing failure when missing identity would otherwise produce an unscoped task. The investigation found a real remediation task created with null identity fields and empty publication scope edges, linked to a namespaced critique with null user/org components.

Material changes

Add a narrow check immediately before new task creation. Reuse the existing failure receipt with remediation_task_scope_identity_missing; normal routing can retry when explicit identity is supplied. Namespace text is not converted into authority. This restriction addresses the demonstrated publication leak: read-back after global publication cannot reliably undo exposure, while retaining the critique preserves recovery.

Native assignment: #V#task_agent_9bea2c2283720d92f37b0ca4047f53f5. Target-specific evidence and controller correction instructions are retained in the worker result, outside the public repository.

Evidence

pdm run pytest tests/backend/test_episode_critique_routing_service.py -q — 4 passed. The nearest faithful routing service path verifies missing identity causes no creation, the reason is persisted, explicit identity restores scoped task creation inputs, existing task/Jira reuse works, and memory-only outcomes remain available. git diff --check passed.

Ship boundary

  • Minimum ship criteria: prevent the observed implicit global creation and preserve routing recovery and existing scoped behaviour; required CI passes.
  • Stop-ship conditions: missing identity still creates a task, or normal identity-bearing routing regresses.
  • Non-blocking observations: the historical producer revision was not retained. This does not establish where identity was first lost. Existing task scope correction requires the controller's governed preview, fingerprint, authority checks and canonical read-back; the worker cannot perform canonical mutations.
  • Non-goals: infer identity from namespace, bulk backfill, change publication semantics, repair adjacent Jira routing, or deploy this revision.

@witbrock
witbrock merged commit d3a0651 into main Sep 15, 2026
2 checks passed
@witbrock
witbrock deleted the codex/von-0f688667013cecbb branch September 15, 2026 14:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant