fix: mount every relay-helpers provider — scope audit of all personas (#40 class)
User description
What
agents#40 fixed the pr-reviewer's silently-dead Slack pings (scope-less write-only integration → nothing mounts the subtree → drafts die on unmounted disk with no error). This PR sweeps every persona for the same class and fixes five more personas with six dead legs:
| persona | dead leg | fix |
|---|---|---|
| hn-monitor | every topic-match post (cron-only, slack: {}) | scope: { paths: '/slack/channels/**' } |
| vendor-monitor | every release post (same shape) | scope: { paths: '/slack/channels/**' } |
| spotify-releases | every DM — DMs write to /slack/users/{userId}/messages, a different subtree than channel posts | scope: { paths: '/slack/users/**' } |
| repo-hygiene | the Notion journal write and the Slack summary post (github trigger covers only its github writes) | notion: /notion/databases/**, slack: /slack/channels/** |
| granola | the whole granola→Linear ask pipeline — issue creation (/linear/issues) + PR-link comment (/linear/issues/{id}/comments) | linear: { scope: { paths: '/linear/issues/**' } } |
Class-killing test
tests/persona-integration-scopes.test.mjs: every provider an agent.ts touches — named factory clients (slackClient()), generic clients (relayClient('linear')), or raw VFS path literals (`/notion/...`) — must appear in the agent's triggers or carry a non-empty scope that survives persona-kit parsing (empty scope: {} is discarded client-side and doesn't count). Proven red against the unfixed personas: it reported exactly the six legs above, then green after the fixes. New personas can't reintroduce the trap.
npm test: 21/21. Typecheck clean. All five compiled artifacts verified to carry their scopes (agentworkforce persona compile).
Notes
- Fixes activate on each persona's next deploy.
- granola caveat: it's also in the ctx.llm trio — its classify path stays broken until the workforce#193 rollout chain redeploys it. This scope fix is necessary-but-not-sufficient for full granola recovery (called out so the scope fix isn't mistaken for it).
repo-hygiene/persona.jsonis still git-tracked (the #24 untracking missed it) — the regenerated artifact is committed in-sync here; untracking it to match the other personas is a separate cleanup.
🤖 Generated with Claude Code
Summary by cubic
Mount missing integration scopes across multiple personas to stop silent Slack/Linear/Notion writes. Adds a guard test that fails if a provider used by an agent lacks a trigger or a non-empty scope.
-
Bug Fixes
- Slack channel posts: add
scope: { paths: '/slack/channels/**' }forhn-monitorandvendor-monitor(cron-only). - Slack DMs: add
scope: { paths: '/slack/users/**' }forspotify-releases. - Linear issues/comments: add
linearscopes forgranola—'/linear/issues/**'and'/linear/teams/**'(teams fallback). - Notion + Slack in
repo-hygiene: addnotion'/notion/databases/**'andslack'/slack/channels/**'; GitHub remains trigger-mounted. - Guard test:
tests/persona-integration-scopes.test.mjsenforces that any provider used via relay-helpers/VFS is mounted via a trigger or non-empty scope, and now derives the provider list from@relayfile/adapter-core/writeback-pathsto auto-cover new integrations.
- Slack channel posts: add
-
Migration
- Redeploy affected personas to mount the new scopes.
- Note:
granola’s classify path still depends on theworkforce#193rollout; this PR only restores its Linear issue/comment writes.
CodeAnt-AI Description
Keep persona integrations mounted so their Slack, Notion, and Linear actions actually run
What Changed
- Fixed several personas where messages, journal entries, or issue creation were silently not happening because the needed integration was not mounted
- Slack digests now work for HN monitor and vendor monitor, and Spotify release alerts can now DM users
- Repo hygiene now writes its Notion journal and Slack summary reliably
- Granola now creates Linear issues and follow-up comments reliably
- Added a test that catches personas touching an integration without a trigger or a real scope
Impact
✅ Fewer silent Slack misses
✅ Reliable Notion journals and Slack summaries
✅ Reliable Linear issue creation from Granola
💡 Usage Guide
Checking Your Pull Request
Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.
Talking to CodeAnt AI
Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:
@codeant-ai ask: Your question here
This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.
Example
@codeant-ai ask: Can you suggest a safer alternative to storing this secret?
Preserve Org Learnings with CodeAnt
You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:
@codeant-ai: Your feedback here
This helps CodeAnt AI learn and adapt to your team's coding style and standards.
Example
@codeant-ai: Do not flag unused imports.
Retrigger review
Ask CodeAnt AI to review the PR again, by typing:
@codeant-ai: review
Check Your Repository Health
To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.