task-bank ↔ identity
Зачем нужно
Файл фиксирует, как банк задач использует organization/team permission grants для доступа к задачам, подборкам, activity/program templates and snapshots, не становясь владельцем организаций или команд.
Источник истины
| Данные | Владелец |
|---|---|
organization, organization_team, organization_membership | identity |
organization_permission_grant | identity |
problem, problem_version, problem_set, activity_template, program_template, content_export_snapshot, problem_usage | task-bank |
problem_attempt, answer_check, manual_review | task-bank |
| task-bank trust/XP/reputation | task-bank governance/reputation layer |
Сценарии
| Сценарий | Как работает |
|---|---|
problem_set виден организации | task-bank хранит access policy со ссылкой на identity_organization_id; identity подтверждает membership/permission |
activity_template или program_template виден организации | task-bank хранит owner/access policy refs; identity подтверждает membership/permission |
problem_set редактирует команда | grant или task-bank ACL ссылается на organization_team_id |
| доступ выдан участнику | grant с subject_type = membership и task-bank permission |
| автор подборки имеет расширенные права | task-bank хранит author/owner policy, identity даёт actor identity |
| trust/XP влияет на authoring flow | task-bank читает свой reputation signal и отдельно проверяет identity actor context |
Правила
- Identity не владеет
problem_set, collection, problem version или checking policy. - Task-bank не владеет
organization_team, membership, role или grant lifecycle. - Trust/XP Миролимпа не является identity role and cannot replace membership/permission grant.
- Permission names должны быть catalog keys, например
task-bank.collections.manage.organization. - Локальные names вроде
problem_bank.collections.editзапрещены. - Grant revocation должен инвалидировать task-bank access cache.
События identity
Task-bank подписывается на:
identity.organization.archived;identity.organization.merged;identity.organization_team.updated;identity.organization_team.archived;identity.organization_membership.suspended;identity.organization_permission_grant.created;identity.organization_permission_grant.revoked.
Идемпотентность и ошибки
- события обрабатываются по
messageId; - повторный grant event не создаёт дубль доступа;
- если identity недоступен, task-bank write actions в organization scope должны fail-closed;
- task-bank может показывать read-only published content по локальному snapshot, если это не раскрывает закрытые answers/solutions.
- locked snapshot может хранить historical identity refs for audit, но не копирует membership table.