fix: mount every relay-helpers provider — scope audit of all personas (#40 class)

Merged
KH
5mo ago
+146-8

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:

personadead legfix
hn-monitorevery topic-match post (cron-only, slack: {})scope: { paths: '/slack/channels/**' }
vendor-monitorevery release post (same shape)scope: { paths: '/slack/channels/**' }
spotify-releasesevery DM — DMs write to /slack/users/{userId}/messages, a different subtree than channel postsscope: { paths: '/slack/users/**' }
repo-hygienethe Notion journal write and the Slack summary post (github trigger covers only its github writes)notion: /notion/databases/**, slack: /slack/channels/**
granolathe 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.json is 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/**' } for hn-monitor and vendor-monitor (cron-only).
    • Slack DMs: add scope: { paths: '/slack/users/**' } for spotify-releases.
    • Linear issues/comments: add linear scopes for granola — '/linear/issues/**' and '/linear/teams/**' (teams fallback).
    • Notion + Slack in repo-hygiene: add notion '/notion/databases/**' and slack '/slack/channels/**'; GitHub remains trigger-mounted.
    • Guard test: tests/persona-integration-scopes.test.mjs enforces 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-paths to auto-cover new integrations.
  • Migration

    • Redeploy affected personas to mount the new scopes.
    • Note: granola’s classify path still depends on the workforce#193 rollout; 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.