Compose my "Work Last Week / Work This Week" row for the weekly meeting Confluence page from my merged/open PRs and active Jira, and output it as a copyable block by default. Writes to my row only if I explicitly ask. Per-project config in ~/.claude/reconcile/projects.json.
Instal·la
npx skillscat add taloncjones/dotfiles/weekly Instal·la des del registre de SkillsCat.
SKILL.md
Weekly
Compose my weekly-meeting update and, by default, output it as a copyable block
for me to paste myself. Never auto-write. Write to my row only on an explicit
request ("write it to my row"); the page is often edited live during the meeting,
so copy-paste is the safe default.
Steps
- Gather (deterministic):
bash ~/.claude/skills/lib/work-state.sh --repo "$PWD"
→{project, config, github:{merged,open,...}}. No config → stop with the
helper's message. - Work Last Week =
github.mergedgrouped Merged, plusgithub.open
grouped In review. - Work This Week = my active Jira (
status_in_flight,assignee = currentUser(), capped atjira_query_cap, warn if truncated),
bucketed intoconfig.group_buckets:- PRs/tickets needing hardware/bench/UAT → first bucket.
- other in-flight → "In progress".
- tickets labeled/flagged non-MVP or Blocked → last bucket.
- unmatched → "In progress" (fallback).
The page's "Top of Mind" only weights ordering / annotates — never filters or drops.
- Find the page: search
config.confluence_spacefor a title matchingconfig.weekly_page_patternwith{date}= the Monday of the current week,
formatYYYY-MM-DD, local timezone.- 0 matches → report and stop (page creation is out of scope).
1 match → abort; list candidates for the user to disambiguate.
- Read the prior Monday's page for format AND de-dup; if absent, skip de-dup and warn.
- De-dup "already reported" by identity precedence: (a) Jira key, (b)
repo-qualified PR<org>/<repo>#<n>, (c) exact title. Collapse multiple PRs for
one ticket; treat a reopened PR listed last week as reported; match prior-week
plain-text entries too. - Compose each cell as a short executive summary, not a list of links,
in Google developer documentation style (the technical-text half of~/.claude/rules/personal/writing-style.md): parallel bullets with one idea
each, present tense, outcomes as status words (merged, in review, blocked),
specific nouns over pronouns, no idioms. Lead each bullet withTopic: outcomein plain language; put Jira keys as trailing references in
parentheses — e.g. "Test-stand tooling: event schema and scanner UX merged
(PROJ-123, PROJ-124)." Collapse related tickets into one themed line. Cap
~3-4 bullets per column; summarize rather than enumerate
when there are more. Ticket-reference style depends on whether the line
summarizes the ticket: in a summary line, render keys as plain text
(PROJ-123) — no smart link; only when a line just lists a ticket without
summarizing it should the key be an inline Jira smart link. - Output — copyable block by default. Present the two cells as clean,
paste-ready text (markdown bullets, plain-text Jira keys), clearly labeled
Work Last Week / Work This Week. This is the default and final step —
do not write to the page unless I explicitly ask ("write it to my row").
Rationale: the page is frequently edited live during the meeting, and the
Confluence HTML round-trip is fragile (formatters/whitespace), so pasting
myself is safer and avoids clobbering concurrent edits. - Opt-in write (only when I explicitly ask). Write only my row; enforce,
do not assume:- Locate my row by
config.mein the Updates table; abort if 0 or >1 match. - Splice only my two cells into the raw fetched page body (never a
formatter-touched copy); diff and assert no bytes change outside my row
before writing — abort if they do. - Capture the page version on read; if it changed on write (concurrent teammate
edit), abort and re-fetch rather than overwrite.
- Locate my row by
Notes
- Default output is copy-paste; only the opt-in write (step 8) touches Confluence.
- For the opt-in write: operate on the raw fetched body, not a formatter-
touched staging file — HTML formatters silently rewrite other rows' whitespace,
which would change bytes outside my row. Preserve every other row and all
non-Updates content; never paste raw HTML into chat for review. - Best-effort: MCP down →
Jira: unavailable;ghdown →GitHub: unavailable.