diff --git a/.claude/commands/syncro.md b/.claude/commands/syncro.md index a93e7f5..5943b69 100644 --- a/.claude/commands/syncro.md +++ b/.claude/commands/syncro.md @@ -116,7 +116,7 @@ Two verified ways to add billable time. Both produce ticket line items that tran # Add curl -s -X POST "${BASE}/tickets/${ID}/add_line_item?api_key=${API_KEY}" \ -H "Content-Type: application/json" \ - -d '{"product_id": 1190473, "quantity": 0.5, "price_retail": 150.00, "name": "Labor - Remote Business", "description": "Work description", "taxable": false}' + -d '{"product_id": 1190473, "quantity": 0.5, "name": "Labor - Remote Business", "description": "Work description", "taxable": false}' # Remove curl -s -X POST "${BASE}/tickets/${ID}/remove_line_item?api_key=${API_KEY}" \ @@ -150,7 +150,7 @@ curl -s -X POST "${BASE}/tickets/${ID}/delete_timer_entry?api_key=${API_KEY}" \ - `description` — required (422 if missing) - `product_id` — labor product ID (see list below) - `quantity` — decimal hours (0.5 = 30 min, 1.0 = 1 hour) -- `price_retail` — **only price field that saves**; `price`, `retail_price`, `rate`, `price_cents` all silently ignored and leave line at $0.00 +- `price_retail` — **only price field that saves**; `price`, `retail_price`, `rate`, `price_cents` all silently ignored and leave line at $0.00. **Do not hardcode rates** — omit `price_retail` and Syncro auto-calculates from the product's configured rate. - `taxable: false` — **always set explicitly**; labor products default to no-tax in GUI but the API applies tax if this is omitted **Do NOT remove ticket line items after invoicing.** Leave them on the ticket — the "Add/View Charges" button and billing verification by techs depends on seeing line items there. @@ -231,7 +231,7 @@ curl -s -X POST "${BASE}/tickets/${ID}/comment?api_key=${API_KEY}" \ # 60 min = 1.0, 30 min = 0.5, 45 min = 0.75, etc. curl -s -X POST "${BASE}/tickets/${ID}/add_line_item?api_key=${API_KEY}" \ -H "Content-Type: application/json" \ - -d '{"product_id": 1190473, "quantity": 1.0, "price_retail": 150.00, "name": "Labor - Remote Business", "description": "..."}' + -d '{"product_id": 1190473, "quantity": 1.0, "name": "Labor - Remote Business", "description": "..."}' # Step 3: Create invoice curl -s -X POST "${BASE}/invoices?api_key=${API_KEY}" \ diff --git a/.claude/messages/for-howard.md b/.claude/messages/for-howard.md index 07e6160..082eca7 100644 --- a/.claude/messages/for-howard.md +++ b/.claude/messages/for-howard.md @@ -4,4 +4,8 @@ Check this file at sync. Delete items after you've addressed them. --- -_No active messages._ +## From Mike, 2026-04-21 — RE: Syncro labor rates + vault.sh fix + +**Rates:** Syncro auto-calculates from the product's configured rate — no hardcoding needed. I've updated syncro.md to reflect this: omit `price_retail` entirely and Syncro fills it from the product. Your $175 ticket is fine; that's what the product is set to. + +**vault.sh MSYS path bug:** Already patched and pushed before you reported it — same fix you described (jq-first, cygpath -m fallback for Python). Should work on HOWARD-HOME now. Pull and test. diff --git a/.claude/messages/for-mike.md b/.claude/messages/for-mike.md index 46d65b7..a5048bd 100644 --- a/.claude/messages/for-mike.md +++ b/.claude/messages/for-mike.md @@ -4,36 +4,4 @@ Check this file at sync. Delete items after you've addressed them. --- -## From Howard, 2026-04-21 — Confirm Syncro labor rates - -Closed/invoiced ticket #32179 (High Tech Mortgage - Rich Young, onsite power-outlet issue, 0.5 hr). I used **$175/hr for Labor - Onsite Business** (product_id 26118) since I wasn't sure what was current. - -Can you confirm what our current rates should be for the skill's reference? The /syncro skill currently lists $150/hr for Remote as an example but has no onsite or emergency rate documented. Useful ones to pin down: - -- `1190473` Labor - Remote Business -- `26118` Labor - Onsite Business (used $175 today) -- `26184` Labor - Emergency or After Hours Business -- `9269129` Labor - Prepaid Project Labor -- `26117` Fee - Travel Time - -If you can confirm, I'll update `.claude/commands/syncro.md` so future tickets don't guess. - ---- - -## From Howard, 2026-04-21 — vault.sh wrapper bug on Windows (MSYS path) - -`.claude/scripts/vault.sh` fails on HOWARD-HOME with `[ERROR] vault_path not set` even though identity.json has `"vault_path": "D:/vault"`. Traced it: - -The wrapper passes `$IDENTITY_FILE` as `/c/claudetools/.claude/identity.json` (Git-Bash MSYS form) to native Windows Python, which can't read MSYS paths. The `open()` silently fails inside the `$(...)` substitution, VAULT_ROOT stays empty, and the wrapper bails. - -Fix is small — convert with cygpath if available: - -```bash -IDENTITY_FILE_FOR_PY="$IDENTITY_FILE" -if command -v cygpath >/dev/null 2>&1; then - IDENTITY_FILE_FOR_PY=$(cygpath -m "$IDENTITY_FILE") -fi -# then pass $IDENTITY_FILE_FOR_PY to python -c -``` - -I worked around it for tonight by calling `sops -d` directly. Want me to patch the wrapper, or do you want it? +_No active messages._