Files
accounted/.claude/skills/swarm-ticket-drafter/SKILL.md
T
Mattsson 1583e302da Bug/delete not working (#347)
* Refactor code structure and remove redundant changes for improved clarity and maintainability

* feat: add booking template usage tracking and related policies

* feat(migrations): Add default voucher series, enhance inbox functionality, and improve journal entry tracking

- Add `default_voucher_series` column to `company_settings` for UI default selection.
- Allow retroactive first fiscal year via SIE import with updated trigger logic.
- Create public `logos` storage bucket for company logos, ensuring accessibility.
- Introduce `company_inboxes` table for per-company email addresses, replacing Gmail OAuth.
- Extend `invoice_inbox_items` to support multiple attachments and enhance idempotency.
- Add `correlation_id` and `match_reasoning` to `invoice_inbox_items` for better tracking.
- Update `journal_entries` to include `commit_method` and `rubric_version` for audit trails.
- Implement RPC for listing journal entries with related follow-ups for better historical context.
- Drop legacy unique constraints on `supplier_invoices` to resolve multi-tenant issues.
- Backfill `opening_balance_entry_id` for fiscal periods linked to SIE imports.
- Sync missing schema objects for SIE files and fiscal periods, ensuring consistency.
- Add immutability trigger to `processing_history` to prevent deletions.
- Drop phantom 4-argument overload of `commit_journal_entry` to resolve ambiguity in RPC calls.

* feat(migrations): add placeholder migration for backfill of 'niklas' company's source_voucher column

* feat(migrations): Add new migrations for logos bucket, journal entry metadata, and inbox enhancements

- Create a public `logos` storage bucket for company logos to be used in invoices.
- Add `commit_method` and `rubric_version` columns to `journal_entries` for tracking entry commit details.
- Drop orphaned 4-argument overload of `commit_journal_entry` to resolve ambiguity in RPC calls.
- Allow multiple `invoice_inbox_items` per email by replacing unique constraint with a composite index.
- Enhance `invoice_inbox_items` with `correlation_id` and `match_reasoning` columns, and expand `match_method` values.
- Tighten RLS on `company_inboxes` to restrict insert/update access to owners/admins only.
- Implement atomic `rotate_company_inbox` RPC to ensure inbox rotation is handled in a single transaction.
- Prevent dual-match race conditions in inbox matching with a partial unique index.
- Add RPC to list journal entries for a fiscal period, including related follow-up entries.
- Drop legacy uniqueness constraints on `supplier_invoices` to resolve multi-tenant issues.
- Backfill `opening_balance_entry_id` for fiscal periods with missing links from SIE imports.
- Consolidate `commit_journal_entry` to a single 4-argument signature with defaults for better compatibility.
- Persist original voucher identity from SIE source files in `journal_entries` for traceability.
- Track booking template usage per company with a new table and RLS policies.
- Add `updated_at` column to `booking_template_usage` for audit consistency.
- Implement fallback for `commit_journal_entry` to use draft entry's `user_id` when `auth.uid()` is NULL.
- Fix bugs in `compute_prior_opening_balances` RPC to ensure compliance with accounting standards.

* Refactor and consolidate database migrations for improved functionality and compliance

- Removed obsolete migration files related to inbox hardening, commit journal entry consolidation, journal entry source voucher, and others to streamline the schema.
- Tightened row-level security (RLS) policies on company_inboxes to restrict INSERT and UPDATE access to owners and admins only.
- Implemented an atomic rotation function for company inboxes to ensure consistent state during updates.
- Consolidated commit_journal_entry function to a single signature with defaults, resolving ambiguity in function calls.
- Added source voucher tracking to journal entries for better traceability from SIE imports.
- Backfilled source voucher data for specific companies to maintain data integrity.
- Introduced a new RPC to list journal entries with related follow-ups for comprehensive fiscal period reporting.
- Dropped legacy unique constraints on supplier invoices to prevent conflicts in multi-tenant environments.
- Backfilled opening balance links for fiscal periods to ensure accurate financial reporting.
- Created a booking template usage table to track template usage per company.
- Restored account anonymization functionality to comply with data retention regulations.
- Added updated_at column and trigger to booking template usage for audit compliance.
2026-04-22 15:33:04 +02:00

3.5 KiB

name, description
name description
swarm-ticket-drafter Turn approved audit findings into GitHub issues on erp-mafia/gnubok. Used by /swarm after user approval, but also standalone when you have findings from another source (manual review, old report files). Handles dedup against open issues, issue formatting, label assignment, and batch creation with partial-failure tolerance.

swarm-ticket-drafter

Converts a list of approved audit findings into GitHub issues on erp-mafia/gnubok. One finding → one issue.

When to use

  • Invoked by the /swarm orchestrator in step 8 (post-approval ticket creation).
  • Standalone: you have a findings report file (e.g., an old .swarm/{timestamp}/findings.md) and want to turn approved items into tickets.

Input shape

For each finding:

Field Example
agent vat (short name)
title Missing VIES timeout handling
severity critical | high | medium | low
file lib/vat/vies-client.ts:47
description When VIES responds slowly, the request hangs with no timeout, blocking the invoice save flow.
suggestedFix Wrap the fetch in AbortController with 10s timeout; show Swedish "VIES-valideringen tog för lång tid" on timeout.

Workflow

1. Dedup check (skip if orchestrator already did it)

mcp__github__list_issues(owner="erp-mafia", repo="gnubok", state="open", perPage=100)

Paginate if needed. For each finding, check open issues for:

  • Title keyword overlap (3+ significant words)
  • Same file path mentioned in body
  • Same domain + similar symptom

Flag matches as duplicates. Duplicates are not created.

2. Confirm approval

If the caller hasn't explicitly provided an approval list, show the proposed issues and ask:

Create these N issues? (yes / no / specific numbers)

Never create issues without confirmation.

3. Create issues

For each approved, non-duplicate finding, call:

mcp__github__issue_write(
  method="create",
  owner="erp-mafia",
  repo="gnubok",
  title="[{agent}] {title}",
  body=<see template below>,
  labels=["audit", "severity-{severity}"]
)

Body template (exact format — don't paraphrase):

**Severity**: {severity}
**File**: `{file}`

### Description
{description}

### Suggested fix
{suggestedFix}

---
_Generated by `/swarm` audit._

4. Handle label failures gracefully

If the issue creation fails with a "label not found" error, retry the exact same call with labels=[]. Don't abort the batch.

Record which issues got labels and which didn't, for the final report.

5. Report results

Return a compact summary:

Created N issues on erp-mafia/gnubok:
- #123 [vat] Missing VIES timeout handling → https://github.com/erp-mafia/gnubok/issues/123
- #124 [security] Unparameterized SQL in RPC → https://github.com/erp-mafia/gnubok/issues/124

Skipped M duplicates:
- {title} (already tracked: #142)

Failed K:
- {title}: {error reason}

Rules

  • One issue per finding. Never batch multiple findings into a single issue.
  • Never create without approval. Approval comes from the caller (usually the user via /swarm).
  • Never create for duplicates. If a dupe was flagged, skip and note it.
  • Partial failure tolerance. A single ticket failure must not stop the batch.
  • Issue title convention: [{agent-short-name}] {title}. Keep titles under 80 chars — truncate with if needed.
  • No automation of comments, assignments, or project-board moves. Just create the issue with title, body, and labels.