issue-invoicelisted
Install: claude install-skill vanducng/skills
# issue-invoice
Monthly hourly invoicing for contract clients. One Google Sheet per client, one
tab per month (`202607`, `202608`, ...). Rows are billable work reconciled from
GitHub PRs, linked to their tracker tickets, plus meeting rows.
Every client-specific value - spreadsheet id, org, repos, Jira host, rate - lives
in a private rules file **outside this repo**. This skill ships no client data.
## Client rules
```
~/.config/vd/invoice-rules/<client>.invoice-rules.md
```
YAML frontmatter is machine-read by the harvest script; the prose below it is for
you. See `references/client.invoice-rules.example.md` for the schema and copy it to
onboard a new client.
```bash
scripts/harvest-prs.py --list # configured clients
```
Read the whole rules file before drafting rows. It defines the tab layout, column
formats, hour calibration, meeting cadence, and client quirks - all of which vary.
**Never write a client value into this skill.** If something is true for one client
only, it belongs in that client's rules file.
## Workflow
### 1. Read current state first
```bash
export GOG_HOME="$HOME/.config/vd/gog"
ACCT=<gog_account from rules, --account org with --user person>
SID=<spreadsheet from rules frontmatter>
gog --account "$ACCT" sheets metadata "$SID" --json
# FORMULA or the next write flattens HYPERLINK/SUM
gog --account "$ACCT" sheets get "$SID" '<tab>!A1:F60' --render FORMULA --json
```
Locate the Total row and its exact `SUM` ranges - they drift as rows a