Safina

/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:backlog first. 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

  1. Reads your config (~/.claude/ilmiya-config.json)
  2. Runs git log --oneline -10 and shows recent commits
  3. Checks commit convention — flags non-conforming commits with [!] (advisory, not blocking)
  4. Identifies the ticket from commit trailers or asks
  5. 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
  1. Asks if you want to add context (blockers, status, QA notes)
  2. If QA-ready, appends to the comment:
**Ready for QA** — @adnantahir55
[QA notes]
  1. Posts the comment on the ticket (mandatory):

    • Tier 1: mcp__claude_ai_Linear__save_comment
    • Tier 2: gh issue comment
  2. 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 1Tier 2
Post commentLinear MCPgh issue comment or GitHub MCP
SlackSlack MCP (developer’s account)Same
Ticket ID formatTEAM-NNN#NNN