| name | update-customer |
| description | Use when the user wants to update the Customer Team Change Log Confluence page with recently shipped DLRUSER items. Trigger on: '/update-customer', 'update customer changelog', 'update customer change log', 'log what shipped for customer', 'what went to prod this week for customer'. Queries the DLRUSER Jira board for Done items and appends them to https://carsales.atlassian.net/wiki/spaces/DEAL/pages/3230072918/Customer+Team+-+Change+Log |
| argument-hint | [optional: number of days to look back, default 7] |
Update Customer Team Change Log
Overview
Queries the DLRUSER Jira board for items recently moved to Done, shows a preview, and appends new entries to the Customer Team - Change Log Confluence page.
Phase 1: Fetch Recent DLRUSER Completions
Determine the lookback window:
- If the user passed a number of days, use that
- Otherwise default to 7 days
Run this JQL query using searchJiraIssuesUsingJql:
project = DLRUSER
AND status changed to "Done" AFTER -Xd
AND issuetype in (Story, Bug, Task)
ORDER BY updated DESC
cloudId: carsales.atlassian.net
- Fields to fetch:
summary, status, resolutiondate, updated, issuetype, labels, assignee, created
- Max results: 50
- Response format:
markdown
Filter out noise — exclude from the candidate list:
- Issues whose summary starts with "Deploy ", "Test ", "[Retro]", or "[Rollback]"
- Issues with no
resolutiondate
- Duplicate summaries
Phase 2: Read Current Changelog
Fetch the current page using getConfluencePage:
cloudId: carsales.atlassian.net
pageId: 3230072918
contentFormat: adf
Note the version number from the response — you'll need it for the update step.
Also note the date of the most recent entry so you can skip any Jira items already logged.
Phase 3: Preview & Confirm
Present the proposed new entries to the user in this format:
New entries to add (X items):
2026-03-23 — Customer details page released to all dealers [DLRUSER-XXXX](https://carsales.atlassian.net/browse/DLRUSER-XXXX)
2026-03-20 — Fixed customer listing page not loading for group dealers [DLRUSER-XXXX](https://carsales.atlassian.net/browse/DLRUSER-XXXX)
What would you like to do?
a) Add all and update the page
b) Remove specific entries (tell me which ones)
c) Edit a description (tell me which one and what to say)
d) Cancel
Grouping rule — club related tickets into a single entry:
Before writing descriptions, look for tickets that together form one coherent piece of value (e.g. multiple stories delivering one feature, a bug and its follow-up fix, front-end and back-end halves of the same change). Group these into a single entry with a combined description. List all contributing Jira keys as linked references at the end.
Description rules — written for ELT, not engineers:
- The audience is senior leadership. They care about business outcomes and dealer experience, not implementation details.
- Describe the value delivered, not the work done. Ask: what can a dealer now do that they couldn't before? or what problem is now solved?
- Plain English — no Jira jargon, no tech terms (no "endpoint", "migration", "refactor", "schema", "API")
- Present tense, sentence case (e.g. "Dealers can now see enriched call summaries on the customer profile")
- Max 120 characters for the description text
- Always link every Jira ticket referenced — never output a bare key. Format:
[DLRUSER-XXXX](https://carsales.atlassian.net/browse/DLRUSER-XXXX). For grouped entries, list all keys: [DLRUSER-100](…) [DLRUSER-101](…)
Good vs bad examples:
| Bad (output) | Good (value) |
|---|
| Migrated prospect records to customer schema | Dealer customer records are now unified — no more duplicate prospect entries |
| Implemented call transcript extraction API | Call summaries are automatically saved to the customer profile after every call |
| Fixed null pointer in enrichment service | Call enrichment now works reliably for all dealers, including group accounts |
If the user edits or removes entries, update your candidate list and loop back to the preview until they confirm.
Phase 4: Update the Confluence Page
Once approved, update the page using updateConfluencePage.
Month grouping
Always group entries by month. Each month heading includes a total change count:
March 2026 - 10 changes
When building the updated page:
- Count all entries (new + existing) that fall within each month
- Update the heading for the current month to reflect the new total (e.g. if there were 6 entries and you're adding 4, the heading becomes "March 2026 - 10 changes")
- If a month heading already exists in the page body, prepend the new entries immediately after the heading and update the count
- If no heading exists for this month yet, add a new month heading with the correct count above the previous month's section
ADF structure
Build the updated page body in ADF format.
Month heading block:
[
{
"type": "heading",
"attrs": { "level": 2 },
"content": [{ "type": "text", "text": "March 2026 - 10 changes" }]
}
]
Each new entry is a numbered list item with:
- A Confluence date inline node (
type: "date", attrs.timestamp: epoch ms in UTC at midnight)
- A text node for the description:
— [one-line description]
- A linked text node for the Jira key pointing to
https://carsales.atlassian.net/browse/DLRUSER-XXXX
Example ADF snippet for a single entry (wrap all entries in "type": "orderedList"):
{
"type": "listItem",
"content": [{
"type": "paragraph",
"content": [
{
"type": "date",
"attrs": { "timestamp": "1742688000000" }
},
{
"type": "text",
"text": " — Customer details page released to all dealers "
},
{
"type": "text",
"text": "[DLRUSER-XXXX]",
"marks": [{
"type": "link",
"attrs": { "href": "https://carsales.atlassian.net/browse/DLRUSER-XXXX" }
}]
}
]
}]
}
Update call
updateConfluencePage:
cloudId: carsales.atlassian.net
pageId: 3230072918
title: Customer Team - Change Log
version: <current version + 1>
body: <full updated ADF body>
After a successful update, output:
✓ Changelog updated — X new entries added
https://carsales.atlassian.net/wiki/spaces/DEAL/pages/3230072918/Customer+Team+-+Change+Log
Do not send any Teams, Slack, or other notifications. Updating the Confluence page is the only output.
Error Handling
| Scenario | Response |
|---|
| No Done items found in the lookback window | Tell the user, offer to extend the window |
| All candidates are filtered as noise | Show the raw list and ask the user to pick manually |
| Page version conflict (409) | Re-fetch the page, get new version number, retry once |
| Confluence update fails | Show the error, output the formatted entries as text so the user can paste manually |
| User has no Confluence write access | Output the formatted entries as text for manual copy-paste |