/safina:update
Post a smart commit summary to the right ticket and notify Slack. This closes the working loop — linking what was built to why it was built.
When to run it
- After committing work
- When handing off to QA (Adnan)
- At natural pause points when you want to leave context for the team
Prerequisites
Two gates run before anything else.
Gate 1 — Ticket context
“Which ticket is this update for?”
If you don’t know your ticket or haven’t run /safina:backlog this session:
Stop. Run
/safina:backlogfirst. An update without a ticket won’t be linked and Taha won’t have context.
Gate 2 — Hunt check (QA and PR only)
If you’re saying this work is QA-ready or headed to a PR:
“Have you run
/safina:hunt? Were all Errors remediated?”
If hunt hasn’t been run, or Errors remain: the QA-ready flag is withheld. You’ll be sent back to run hunt and fix what it found.
What it does
- Reads your config (
~/.claude/ilmiya-config.json) - Runs
git log --oneline -10and shows recent commits - Checks commit convention — flags non-conforming commits with [!] (advisory, not blocking)
- Identifies the ticket from commit trailers or asks
- Composes a smart comment:
**Update from [Name] — YYYY-MM-DD**
[2-3 sentence summary synthesized from commit messages]
**Commits:**
- `sha` type(scope): description
- `sha` type(scope): description
[!] Note: some commits don't follow the Ilmiya convention — check config/commit-convention.md
- Asks if you want to add context (blockers, status, QA notes)
- If QA-ready, appends to the comment:
**Ready for QA** — @adnantahir55
[QA notes]
-
Posts the comment on the ticket (mandatory):
- Tier 1:
mcp__claude_ai_Linear__save_comment - Tier 2:
gh issue comment
- Tier 1:
-
Notifies Slack via Slack MCP:
- Default: “[Name] pushed updates on [TICKET: title]. [URL]”
- QA-ready: “@adnan — [Name] has [TICKET: title] ready for QA. [URL]”
If Slack isn’t connected: “Connect Slack at claude.ai/settings. Issue comment was posted.”
Commit convention check
Commits are checked against config/commit-convention.md. Non-standard commits are flagged as advisory — they don’t block the update, but they’re surfaced so the developer is aware.
type(scope): description
Linear: TEAM-NNN ← Tier 1
Refs: #NNN ← Tier 2
What it does NOT manage
Update is a communication tool, not a git tool. It does not:
- Stage or commit code
- Push branches
- Create PRs
Those stay with the developer. Update reads what’s already committed and links it to the right issue.
By developer tier
| Tier 1 | Tier 2 | |
|---|---|---|
| Post comment | Linear MCP | gh issue comment or GitHub MCP |
| Slack | Slack MCP (developer’s account) | Same |
| Ticket ID format | TEAM-NNN | #NNN |