refactor(syncro): replace timer workflow with add_line_item, lock API sequences
- Billing now uses add_line_item directly; timer_entry/charge_timer_entry removed - Added Verified Response Shapes table for all endpoints (tested live against ACG internal customer) - Billing workflow rewritten as strict 5-step locked script with no branches - Added STOP rule: never try alternative endpoints/formats on unexpected responses - bot-alerts section: explicit success ([OK] + message_id) and failure ([WARNING]) criteria - Updated feedback memory to supersede the old timer-first rule Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,31 +1,18 @@
|
||||
---
|
||||
name: Syncro — log time entries first, never bare add_line_item
|
||||
description: All Syncro tickets must have a Syncro time entry recorded for any work done. Use timer_entry + charge_timer_entry to bill, NOT bare add_line_item. Bare add_line_item leaves Syncro time tracking at 00:00:00 and breaks reporting (hours per client, tech productivity, prepay burn rate). This applies even to warranty/free work; only cancelled tickets are exempt.
|
||||
name: Syncro — use add_line_item for billing, not timers
|
||||
description: Syncro billing uses add_line_item directly. Timer workflow (timer_entry → charge_timer_entry) is not used. Overrides previous rule about timers being required.
|
||||
type: feedback
|
||||
---
|
||||
|
||||
**Rule:** When billing a Syncro ticket, the workflow MUST be:
|
||||
**Rule:** Bill Syncro tickets with `POST /tickets/{id}/add_line_item` directly. Do NOT use `timer_entry → charge_timer_entry`.
|
||||
|
||||
1. Do the work.
|
||||
2. POST `/tickets/{id}/timer_entry` with `start_at`, `end_at`, `billable`, `product_id`, `notes`. This records hours in Syncro's time-tracking system.
|
||||
3. POST `/tickets/{id}/charge_timer_entry` with `{"timer_entry_id": N}` to convert the timer into a billable line item on the ticket.
|
||||
4. POST `/invoices` to roll the line item onto a customer invoice.
|
||||
5. PUT ticket status as needed.
|
||||
|
||||
**Why:** Syncro's reporting (hours per client, technician productivity, average resolution time, prepay burn rates) is built on the **time-entries** table, not on invoice line items. If we use bare `add_line_item` and type hours into the description ("Applied 1.5 Prepay Hours"), the invoice posts but Syncro's time tracking shows `00:00:00`. We lose all reporting visibility on actual work performed.
|
||||
**Why:** Mike confirmed 2026-05-21 that the timer workflow is not used. The previous rule requiring timers was wrong and caused repeated billing failures (wrong product on the timer, product_id silently ignored by charge_timer_entry, etc.).
|
||||
|
||||
**How to apply:**
|
||||
|
||||
- **Default billing path:** `timer_entry → charge_timer_entry → invoice`. Always.
|
||||
- **Bare `add_line_item` is NOT a default option.** Only acceptable when there is genuinely no time component to bill — e.g. selling a hardware product or a flat-fee service with zero labor. For any work-time billing, use the timer path.
|
||||
- **Even warranty/free work needs a time entry.** Set `billable: false` (or appropriate type) on the timer entry. Time still records, just doesn't generate a paid line item.
|
||||
- **Only cancelled tickets are exempt** from time entries.
|
||||
- `add_line_item` is the billing path for all work: labor, warranty, internal, hardware.
|
||||
- Set `product_id`, `quantity` (decimal hours), `price_retail` (fetched live), `name`, `description`, `taxable: false`.
|
||||
- Do not create timer entries as part of billing.
|
||||
- Timer endpoints still exist in Syncro but are not part of the ACG billing workflow.
|
||||
|
||||
**Real-world incident — 2026-04-30:** Mike audited 31 closed tickets and found ALL 31 had `00:00:00` in Syncro time tracking. 29 had proper invoices with revenue captured correctly, but the underlying time data was bypassed entirely. Examples: #32156 (Cascades) "Applied 8.0 Prepay Hours" — should have been an 8.0 hr time entry. #32218 (Instrumental) "Applied 1.5 Prepay Hours" — should have been a 1.5 hr time entry.
|
||||
|
||||
**Repeat incident — 2026-05-01:** I (Claude, Howard's session) billed three tickets the same broken way (#32225 Sombra $525, #32229 Mineralogical Record $262.50, #32214 Cascades $0 prepaid). Winter retroactively added time entries to fix them. The skill examples need to be updated to make timer-first the default, and that's tracked in the syncro skill rewrite work.
|
||||
|
||||
**Where the fix needs to land:**
|
||||
- `.claude/commands/syncro.md` — promote the timer-entry workflow to be the documented default. Demote `add_line_item` to a clearly-labeled fallback for non-time work only. Every example in the "Billing workflow" section should use the timer path.
|
||||
|
||||
**Skill author note:** Currently the skill presents both patterns as Option A (simpler — add_line_item) and Option B (timer + charge). That framing is wrong. Option B is the only correct path for time-bearing work; Option A is a fallback at best.
|
||||
**Previous rule (SUPERSEDED):** "All work-time billing MUST go through timer_entry → charge_timer_entry." That rule is no longer in effect as of 2026-05-21.
|
||||
|
||||
Reference in New Issue
Block a user