Skip to content

chore(release): v0.5.1 - #12

Merged
svd merged 3 commits into
mainfrom
dev
Nov 9, 2026
Merged

svd merged 3 commits into
mainfrom
dev

Conversation

@svd

@svd svd commented Nov 9, 2026

Copy link
Copy Markdown
Owner
  • teams list, and any teams verb given a TEAM by display name, check for
    Team.ReadBasic.All (or another scope Graph accepts for /me/joinedTeams) before sending a
    request, and stop with error[MISSING_SCOPE] and the login --scopes extended hint. They used to
    accept Group.Read.All, which the default sign-in holds, and then fail with Graph's
    error[Forbidden]. A team given by id (GUID) still works with Group.Read.All. The skill's
    channel-post recipe and teams examples pass the team id, which the user copies from Teams'
    Get link to team (groupId).
  • The scope check counts User.ReadWrite.All, Directory.ReadWrite.All and
    TeamSettings.ReadWrite.All as holding their .Read.All forms.

svd added 3 commits November 5, 2026 22:45
.claude/ctx-guard.json gives the main role context notes at 300k, 400k
and 500k (then every 50k), the solo preset's usage triggers, and an
automatic clear-and-resume restart above 90k. .gitignore keeps the
personal ctx-guard.local.json and the .ctx-guard/ state folder out.
Graph refuses GET /me/joinedTeams to Group.Read.All and names
Team.ReadBasic.All, TeamSettings.Read.All, User.Read.All and
Directory.Read.All (or their ReadWrite forms). `teams list` declared
Team.ReadBasic.All|Group.Read.All, and a TEAM given by display name was
resolved through that path under the same gate, so the default sign-in
passed the local check and then got error[Forbidden] from Graph.

`teams list` now declares the joinedTeams read scopes, and every teams
verb gates them again before it resolves a TEAM by display name, so the
command stops with MISSING_SCOPE and the `login --scopes extended` hint
before any request. A team given by GUID or `id:` keeps the verb's own
gate, which Group.Read.All still satisfies. The scope implication table
maps User.ReadWrite.All, Directory.ReadWrite.All and
TeamSettings.ReadWrite.All to their read forms, so those tokens pass
while `teams list` declares only read scopes and stays read-only to MCP.

SKILL.md lists `teams list` and team-by-name among the verbs that need
`extended`, and its teams examples and channel-post recipe pass a team
GUID; the reference marks the by-name verbs "Beyond default".
- `teams list`, and any `teams` verb given a TEAM by display name, check
  for Team.ReadBasic.All (or another scope Graph accepts for
  /me/joinedTeams) before any request and stop with MISSING_SCOPE and
  the `login --scopes extended` hint; a team given by GUID still works
  with Group.Read.All
- the scope check counts User.ReadWrite.All, Directory.ReadWrite.All and
  TeamSettings.ReadWrite.All as holding their .Read.All forms
@svd
svd merged commit 3e5caaa into main Nov 9, 2026
12 checks passed
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