{"id": "chat-denver", "file": "chat-denver.md", "source": "chat", "title": "#denver", "date": "2026-01-06", "text": "# #denver\n\nDenver office.\n\n- 2026-01-06T07:55:00-08:00 Carlos Mendes (CHM-0006): roads are bad this morning, take your time\n- 2026-01-06T08:20:00-08:00 Diego Alvarez (CHM-0007): bus took 50 min lol\n- 2026-01-16T12:00:00-08:00 Tariq Aziz (CHM-0038): lunch order going in at 12:15, thai place\n- 2026-01-16T12:04:00-08:00 Jack Sullivan (CHM-0039): pad see ew pls\n- 2026-01-22T16:00:00-08:00 Rachel Moss (CHM-0047): who keeps moving the good monitor arm 😤\n- 2026-01-22T16:03:00-08:00 Ryan O'Neill (CHM-0048): not me. probably\n- 2026-01-29T12:31:00-08:00 Megan Holt (CHM-0058): omw\n- 2026-02-09T08:00:00-08:00 Tariq Aziz (CHM-0074): parking garage is closed today, use the lot on 3rd\n- 2026-02-17T08:10:00-08:00 Hannah Becker (CHM-0104): Denver: fire drill at 10:30 today\n- 2026-02-17T08:12:00-08:00 Lena Vogel (CHM-0105): noted\n- 2026-03-04T07:45:00-08:00 Carlos Mendes (CHM-0150): snow again 🙄 wfh if you need to\n- 2026-03-20T12:00:00-07:00 Isabel Moreno (CHM-0180): cake in the kitchen for Megan's birthday 🎂\n- 2026-03-20T12:02:00-07:00 Megan Holt (CHM-0181): thank youuu\n- 2026-03-31T16:50:00-07:00 Ryan O'Neill (CHM-0201): denver crew, we're at the usual place\n"}
{"id": "chat-eng", "file": "chat-eng.md", "source": "chat", "title": "#eng", "date": "2026-01-06", "text": "# #eng\n\nEngineering.\n\n- 2026-01-06T09:30:00-08:00 Arjun Nair (CHM-0008): Routes v2.3 planning doc is up. Main change: explicit sequence column on route_stops so reordering is cheaper.\n- 2026-01-06T09:44:00-08:00 Jonas Berg (CHM-0009): nice. are we doing that as a table rebuild or in place?\n- 2026-01-06T09:51:00-08:00 Arjun Nair (CHM-0010): rebuild, it's cleaner. migration 0042\n- 2026-01-13T11:20:00-08:00 Ben Carter (CHM-0026): first PR up, just README typos but it counts 😅\n- 2026-01-13T11:25:00-08:00 Lucy Park (CHM-0027): it absolutely counts\n- 2026-01-14T10:02:00-08:00 Arjun Nair (CHM-0033): looking at the Summit skills bug. cross-tech pass doesn't pass constraints, ugh\n- 2026-01-19T18:40:00-08:00 Sofia Marques (CHM-0040): web release 2026.01.19 is out\n- 2026-01-20T08:02:00-08:00 Sofia Marques (CHM-0042): on it. chunk load errors, looks like stale index.html at the edge\n- 2026-01-20T08:32:00-08:00 Sofia Marques (CHM-0043): purged the CDN. we delete old chunks too early on deploy, will keep them 24h\n- 2026-01-23T09:00:00-08:00 Elena Petrova (CHM-0050): nightly job metrics export is running, first warehouse tables are up\n- 2026-02-10T13:30:00-08:00 Arjun Nair (CHM-0076): deploying routes-engine v2.3.0 at 14:00, migration 0042 included\n- 2026-02-10T14:06:00-08:00 Arjun Nair (CHM-0077): v2.3.0 is out\n- 2026-02-10T14:24:00-08:00 Fatima Haddad (CHM-0078): routes optimization latency alert firing, p95 at 28s. investigating\n- 2026-02-11T15:30:00-08:00 Oliver Grant (CHM-0099): phone extension support in CSV import merged (Foxglove)\n- 2026-02-12T09:35:00-08:00 Fatima Haddad (CHM-0100): p95 latency alert for optimization now set at 10s, should page way earlier next time\n- 2026-02-17T10:00:00-08:00 Fatima Haddad (CHM-0106): status page now has a 'Routes' component of its own\n- 2026-02-19T09:10:00-08:00 Amara Obi (CHM-0113): webhook retries from us have no delay on 5xx, Juniper's endpoint got hammered. escalated to Oliver\n- 2026-02-20T16:10:00-08:00 Arjun Nair (CHM-0115): CI now fails any migration that drops an index without recreating it. +EXPLAIN check on the 5 hottest queries\n- 2026-02-20T16:12:00-08:00 Marcus Okafor (CHM-0116): 👏\n- 2026-02-26T15:00:00-08:00 Oliver Grant (CHM-0124): Ben, webhook PR walkthrough in 5 min, room 4B\n- 2026-02-26T15:01:00-08:00 Ben Carter (CHM-0125): 👍\n- 2026-03-02T09:15:00-08:00 Fatima Haddad (CHM-0131): heads up: the on-call runbook still lists Oliver as secondary escalation 🙃 who's taking that?\n- 2026-03-02T09:20:00-08:00 Leo Fischer (CHM-0132): Jonas. updating the page now\n- 2026-03-02T09:41:00-08:00 Leo Fischer (CHM-0133): done, runbook updated. Jonas is secondary escalation, Ben joins the rotation as secondary from March 9.\n- 2026-03-02T16:50:00-08:00 Kwame Mensah (CHM-0134): Field app 4.12.0 rolling out to the app store at 17:00\n- 2026-03-03T10:30:00-08:00 Jonas Berg (CHM-0144): fwiw the ios thing is the second incident in a month that started with a release. maybe we talk about staged rollouts everywhere\n- 2026-03-03T10:41:00-08:00 Marcus Okafor (CHM-0145): agreed, let's put it on the planning agenda\n- 2026-03-06T15:25:00-08:00 Ben Carter (CHM-0158): webhook backoff shipped. exponential + jitter, 8 attempts max\n- 2026-03-06T15:30:00-08:00 Jonas Berg (CHM-0159): nice one Ben\n- 2026-03-09T08:10:00-07:00 Lucy Park (CHM-0161): found it: recurring series store the UTC offset from creation time instead of the zone. fixing\n- 2026-03-10T11:22:00-07:00 Lucy Park (CHM-0163): DST fix deployed + backfill repaired existing series\n- 2026-03-16T09:30:00-07:00 Ben Carter (CHM-0173): looking at the SAML multi-cert thing for Ironwood\n- 2026-03-18T15:15:00-07:00 Ben Carter (CHM-0175): SAML multi-cert fix deployed\n- 2026-03-25T11:00:00-07:00 Ben Carter (CHM-0187): first secondary on-call week done, quiet one. thanks Fatima for the shadow shift tips\n- 2026-03-27T10:00:00-07:00 Jonas Berg (CHM-0191): reminder: ironwood go-live monday, no risky deploys friday-monday pls\n"}
{"id": "chat-general", "file": "chat-general.md", "source": "chat", "title": "#general", "date": "2026-01-05", "text": "# #general\n\nCompany-wide announcements and chatter.\n\n- 2026-01-05T08:35:00-08:00 Ingrid Solberg (CHM-0001): Happy new year everyone! Kickoff email is out, see you at all-hands Thursday.\n- 2026-01-05T08:41:00-08:00 Yuki Tanaka (CHM-0002): happy new year 🎉\n- 2026-01-05T09:02:00-08:00 Kenji Watanabe (CHM-0003): Reminder: new building badges are at the Portland front desk. Old ones stop working Jan 16.\n- 2026-01-06T10:00:00-08:00 Kenji Watanabe (CHM-0011): PSA: you can carry over max 5 PTO days into next year, so plan your 2026 time off 🌴\n- 2026-01-08T10:02:00-08:00 Aisha Khan (CHM-0013): All-hands starting now, link in the calendar invite.\n- 2026-01-08T11:05:00-08:00 Ingrid Solberg (CHM-0014): Slides from all-hands are in the shared drive. Thanks for the great questions about the pricing change.\n- 2026-01-12T09:00:00-08:00 Leo Fischer (CHM-0022): Please welcome Ben Carter to the Platform team! 👋\n- 2026-01-12T09:03:00-08:00 Ben Carter (CHM-0023): Hi all! Happy to be here. I'm in Portland, come say hi.\n- 2026-01-12T09:05:00-08:00 Fatima Haddad (CHM-0024): welcome Ben!\n- 2026-01-12T09:06:00-08:00 Carlos Mendes (CHM-0025): Welcome!\n- 2026-01-21T15:00:00-08:00 Noah Brennan (CHM-0046): New case study is live: how a 30-tech HVAC shop cut drive time 18% with Routes. Please share!\n- 2026-01-23T14:00:00-08:00 Grace Whitfield (CHM-0051): Webinar on Feb 12: 'Fewer miles, more jobs'. Please invite customers who'd make good speakers!\n- 2026-02-02T09:00:00-08:00 Priya Raman (CHM-0061): Please welcome Zoe Adams, our new SDR in Denver!\n- 2026-02-02T09:04:00-08:00 Zoe Adams (CHM-0062): Hi everyone, thrilled to join!\n- 2026-02-02T09:06:00-08:00 Ryan O'Neill (CHM-0063): welcome Zoe 🙌\n- 2026-02-05T10:00:00-08:00 Aisha Khan (CHM-0068): February all-hands in 1 minute\n- 2026-02-10T17:15:00-08:00 Leo Fischer (CHM-0097): Routes incident resolved at 17:10. Thanks everyone who jumped in. Postmortem Friday.\n- 2026-02-20T15:05:00-08:00 Aisha Khan (CHM-0114): Oliver's last day is Feb 27, farewell lunch on the 26th. Details in email.\n- 2026-02-27T16:30:00-08:00 Oliver Grant (CHM-0126): Last day signing off. thank you all, it's been a blast. keep the routes fast 🚀\n- 2026-02-27T16:32:00-08:00 Jonas Berg (CHM-0127): we'll miss you Oliver\n- 2026-02-27T16:33:00-08:00 Ingrid Solberg (CHM-0128): Thank you for five great years, Oliver.\n- 2026-03-04T13:45:00-08:00 Mei Chen (CHM-0153): Field app 4.12.1 is live, iOS sync fixed. Thanks Kwame for the quick turnaround.\n- 2026-03-05T10:00:00-08:00 Ingrid Solberg (CHM-0154): March all-hands now. Big thanks to the Ironwood team, contract is close!\n- 2026-03-12T17:30:00-07:00 Ingrid Solberg (CHM-0169): Ironwood Facility Services signed today, our largest customer ever. Thank you Ryan, Victor and everyone who supported the deal.\n- 2026-03-12T17:33:00-07:00 Arjun Nair (CHM-0170): 🚀\n- 2026-03-19T17:00:00-07:00 Ingrid Solberg (CHM-0178): Board meeting done. They were happy with Q1. Thanks all.\n- 2026-03-23T09:00:00-07:00 Kenji Watanabe (CHM-0183): Reminder: Q1 expense reports due Friday\n- 2026-03-26T11:05:00-07:00 Kenji Watanabe (CHM-0188): handbook updated: PTO carryover cap is now 10 days (was 5)\n- 2026-03-26T11:08:00-07:00 Lucy Park (CHM-0189): 🙌\n- 2026-03-30T11:00:00-07:00 Tariq Aziz (CHM-0196): Ironwood went live this morning 🎉\n- 2026-03-30T11:03:00-07:00 Ingrid Solberg (CHM-0197): Fantastic work everyone. What a quarter.\n"}
{"id": "chat-inc-2026-02-10-routes", "file": "chat-inc-2026-02-10-routes.md", "source": "chat", "title": "#inc-2026-02-10-routes", "date": "2026-02-10", "text": "# #inc-2026-02-10-routes\n\nIncident channel for INC-2026-001.\n\n- 2026-02-10T14:30:00-08:00 Leo Fischer (CHM-0079): Declaring SEV-2. I'm IC. Symptoms: optimize timing out for larger routes since ~14:05.\n- 2026-02-10T14:31:00-08:00 Carlos Mendes (CHM-0080): I'll handle comms. Status page post going up now.\n- 2026-02-10T14:34:00-08:00 Fatima Haddad (CHM-0082): p95 optimization 28s, timeouts at 30s. only routes > ~40 stops. small routes fine\n- 2026-02-10T14:36:00-08:00 Leo Fischer (CHM-0083): timing matches the v2.3.0 deploy. Arjun, can we roll back?\n- 2026-02-10T14:41:00-08:00 Arjun Nair (CHM-0085): not cleanly, 0042 rebuilt route_stops. rollback would mean another rebuild. looking at queries\n- 2026-02-10T15:05:00-08:00 Jonas Berg (CHM-0086): query plan for the stop-sequence lookup is a seq scan on route_stops. that used to be an index scan\n- 2026-02-10T15:12:00-08:00 Carlos Mendes (CHM-0088): 5 customers have tickets so far, all told manual ordering works\n- 2026-02-10T15:40:00-08:00 Arjun Nair (CHM-0089): confirmed: migration 0042 didn't recreate the composite index on (route_id, sequence). my miss\n- 2026-02-10T15:42:00-08:00 Leo Fischer (CHM-0090): no blame. Jonas, can you build it concurrently so we don't lock the table?\n- 2026-02-10T15:44:00-08:00 Jonas Berg (CHM-0091): yes, starting. table is big, will take a while\n- 2026-02-10T16:20:00-08:00 Jonas Berg (CHM-0092): index build ~60% done\n- 2026-02-10T16:48:00-08:00 Jonas Berg (CHM-0093): index done. p95 dropping fast\n- 2026-02-10T16:58:00-08:00 Fatima Haddad (CHM-0094): p95 at 1.9s, error rate zero for 10 min\n- 2026-02-10T17:10:00-08:00 Leo Fischer (CHM-0095): Resolving. Postmortem draft tomorrow, review Friday 11:00. Thanks all.\n- 2026-02-10T17:12:00-08:00 Carlos Mendes (CHM-0096): status page updated to resolved, replying to tickets now\n"}
{"id": "chat-inc-2026-03-03-ios-sync", "file": "chat-inc-2026-03-03-ios-sync.md", "source": "chat", "title": "#inc-2026-03-03-ios-sync", "date": "2026-03-03", "text": "# #inc-2026-03-03-ios-sync\n\nIncident channel for INC-2026-002.\n\n- 2026-03-03T08:47:00-08:00 Carlos Mendes (CHM-0138): Opening incident: iOS completed jobs not syncing since 4.12.0. Copperline and Pinecrest so far. Android fine.\n- 2026-03-03T08:55:00-08:00 Mei Chen (CHM-0139): I'm IC. Kwame, Nina please join.\n- 2026-03-03T09:10:00-08:00 Kwame Mensah (CHM-0140): reproduced. upload task gets suspended when the app is backgrounded. jobs are queued locally, not lost\n- 2026-03-03T09:14:00-08:00 Mei Chen (CHM-0141): Carlos: message to customers is 'data is safe on the phone, don't uninstall'\n- 2026-03-03T09:16:00-08:00 Carlos Mendes (CHM-0142): 👍 sending that\n- 2026-03-03T11:30:00-08:00 Kwame Mensah (CHM-0146): fix is ready: switching to a background processing task. Nina testing on devices\n- 2026-03-03T15:20:00-08:00 Nina Kowalski (CHM-0147): tested on 4 physical iOS devices, offline + background, all jobs upload. good to submit\n- 2026-03-03T15:40:00-08:00 Chloe Dubois (CHM-0148): submitted 4.12.1 with expedited review request\n- 2026-03-04T06:55:00-08:00 Kwame Mensah (CHM-0149): still waiting on review, nothing left on our side. queued jobs will upload once people update\n- 2026-03-04T13:30:00-08:00 Chloe Dubois (CHM-0151): 4.12.1 approved and live in the app store\n- 2026-03-04T13:35:00-08:00 Mei Chen (CHM-0152): Resolving. Follow-ups: staged rollout (Kwame), device E2E test (Nina). Review Friday 10:00.\n"}
{"id": "chat-product", "file": "chat-product.md", "source": "chat", "title": "#product", "date": "2026-01-08", "text": "# #product\n\nProduct management and design.\n\n- 2026-01-08T14:00:00-08:00 Sam Whitaker (CHM-0015): Halvorsen Routes demo went well per Victor. They want Routes on all 120 techs eventually.\n- 2026-01-08T14:06:00-08:00 Chloe Dubois (CHM-0016): 🔥\n- 2026-01-13T15:00:00-08:00 Yuki Tanaka (CHM-0030): New board filter mockups are in the design file. Feedback by Thursday pls\n- 2026-01-13T15:20:00-08:00 Chloe Dubois (CHM-0031): looks great. can we keep the job type chips on one line?\n- 2026-01-22T17:40:00-08:00 Arjun Nair (CHM-0049): Skills fix for cross-tech optimization merged, ships tomorrow morning.\n- 2026-01-28T10:30:00-08:00 Chloe Dubois (CHM-0056): Pricing page in the wiki is updated for Feb 1.\n- 2026-02-04T11:00:00-08:00 Sam Whitaker (CHM-0066): Routes v2.3 release notes drafted. Release is Tuesday the 10th\n- 2026-02-13T12:30:00-08:00 Sam Whitaker (CHM-0102): Postmortem review done. Doc is in the wiki: postmortem-2026-02-10-routes\n- 2026-02-18T13:00:00-08:00 Rafael Ortega (CHM-0107): Q2 roadmap draft is up. Top themes: SCIM, Routes reliability, Portal payments\n- 2026-02-18T13:12:00-08:00 Sam Whitaker (CHM-0108): +1 on SCIM, Halvorsen and Marlowe are both asking\n- 2026-03-10T12:00:00-07:00 Chloe Dubois (CHM-0164): Adding a DST test case to the release checklist. Again in November!\n- 2026-03-17T09:30:00-07:00 Chloe Dubois (CHM-0174): Release checklist now includes a DST test and the iOS background upload test\n- 2026-03-24T11:40:00-07:00 Arjun Nair (CHM-0184): Depot lock for first stop is in, Sam can announce it\n- 2026-03-30T14:00:00-07:00 Sam Whitaker (CHM-0198): Westvale portal trial link sent\n"}
{"id": "chat-random", "file": "chat-random.md", "source": "chat", "title": "#random", "date": "2026-01-05", "text": "# #random\n\nOff-topic.\n\n- 2026-01-05T10:15:00-08:00 Lucy Park (CHM-0004): who else did a january running challenge and already regrets it\n- 2026-01-05T10:18:00-08:00 Sofia Marques (CHM-0005): me. day 4. calves on fire\n- 2026-01-09T16:30:00-08:00 Victor Huang (CHM-0019): Friday question: best burrito in Portland. Go.\n- 2026-01-09T16:34:00-08:00 Jonas Berg (CHM-0020): the cart by the river. not up for debate\n- 2026-01-09T16:41:00-08:00 Yuki Tanaka (CHM-0021): strong disagree but I respect it\n- 2026-01-13T12:10:00-08:00 Ava Lindgren (CHM-0028): anyone want to split a farm box subscription? it's too much kale for one person\n- 2026-01-13T12:14:00-08:00 Noah Brennan (CHM-0029): I'm in, I'll take your kale\n- 2026-01-29T12:30:00-08:00 Nina Kowalski (CHM-0057): denver friends: the taco truck is back on Larkspur\n- 2026-01-30T17:10:00-08:00 Ben Carter (CHM-0059): first three weeks done. learned that 'quick question' in #eng is never quick\n- 2026-01-30T17:12:00-08:00 Lucy Park (CHM-0060): welcome to the real onboarding\n- 2026-02-06T15:45:00-08:00 Elena Petrova (CHM-0071): my sourdough starter has survived 3 weeks. new personal best\n- 2026-02-06T15:50:00-08:00 Lucy Park (CHM-0072): name?\n- 2026-02-06T15:51:00-08:00 Elena Petrova (CHM-0073): Doughvid Bowie\n- 2026-02-13T16:00:00-08:00 Ava Lindgren (CHM-0103): happy friday the 13th 👻\n- 2026-02-23T09:30:00-08:00 Kwame Mensah (CHM-0117): Austin is 78°F today, sorry everyone\n- 2026-02-23T09:32:00-08:00 Fatima Haddad (CHM-0118): boise is 31. blocking you\n- 2026-02-25T12:00:00-08:00 Paul Duarte (CHM-0121): it's tax season, if I seem tired, that's why\n- 2026-03-06T12:00:00-08:00 Kenji Watanabe (CHM-0157): DST this sunday, don't be late monday ⏰\n- 2026-03-11T15:00:00-07:00 Zoe Adams (CHM-0166): my first closed-won as an SDR source happened last week and I'm still riding the high\n- 2026-03-20T11:11:00-07:00 Yuki Tanaka (CHM-0179): spring equinox today, it's officially patio season (it's raining)\n- 2026-03-27T13:00:00-07:00 Yuki Tanaka (CHM-0192): office plants have been watered. you're welcome, ficus\n- 2026-03-31T16:45:00-07:00 Victor Huang (CHM-0199): end of Q1. drinks at 5?\n- 2026-03-31T16:47:00-07:00 Sofia Marques (CHM-0200): yes\n"}
{"id": "chat-sales", "file": "chat-sales.md", "source": "chat", "title": "#sales", "date": "2026-01-06", "text": "# #sales\n\nDeals, pipeline, wins.\n\n- 2026-01-06T10:05:00-08:00 Priya Raman (CHM-0012): Pipeline review moved to Tuesdays 9:00 for Q1. Bring your top 3 deals.\n- 2026-01-15T16:10:00-08:00 Laura Jensen (CHM-0036): Ridgeline signed Routes for 45 users! 🎉\n- 2026-01-15T16:12:00-08:00 Priya Raman (CHM-0037): great work Laura\n- 2026-01-26T09:15:00-08:00 Tomas Lindqvist (CHM-0052): Pricing rules for Feb 1 are in your inbox. Short version: new = $49, existing renewals keep $45 until June 30, added seats $49.\n- 2026-01-26T09:20:00-08:00 Diego Alvarez (CHM-0053): does the $45 quote for Meadowbrook still count? they signed already\n- 2026-01-26T09:22:00-08:00 Tomas Lindqvist (CHM-0054): Meadowbrook is Starter, not affected.\n- 2026-01-27T17:05:00-08:00 Laura Jensen (CHM-0055): Juniper signed! At $45 since they beat the Feb 1 deadline\n- 2026-02-03T11:30:00-08:00 Ryan O'Neill (CHM-0065): Halvorsen wants 25% on the expansion. Not happening, but I'll work it.\n- 2026-02-06T11:30:00-08:00 Isabel Moreno (CHM-0069): Thistle Creek is not renewing. switching to a bundle with their accounting software. Data export requested.\n- 2026-02-06T11:33:00-08:00 Priya Raman (CHM-0070): Thanks Isabel. Sad but expected after their accountant changed.\n- 2026-02-09T16:00:00-08:00 Laura Jensen (CHM-0075): Lakeshore renewed + 10 seats 🎉 40 stay at $45, the 10 new ones at $49\n- 2026-02-11T08:00:00-08:00 Ryan O'Neill (CHM-0098): fyi Erik at Halvorsen asked about yesterday's outage. sending him a summary\n- 2026-02-18T17:02:00-08:00 Ryan O'Neill (CHM-0109): Halvorsen 22% approved by Priya 🎉 order form goes out tmrw\n- 2026-02-18T17:05:00-08:00 Diego Alvarez (CHM-0110): nice!!\n- 2026-02-19T08:25:00-08:00 Priya Raman (CHM-0111): small correction: Ingrid approved the 22%, not me (it's over my 20% limit). Ryan pls fix the approver in the CRM 🙏\n- 2026-02-19T08:31:00-08:00 Ryan O'Neill (CHM-0112): fixed, sorry!\n- 2026-02-24T10:20:00-08:00 Laura Jensen (CHM-0120): Sunfield lost, price. They went with something cheaper\n- 2026-02-27T17:00:00-08:00 Ryan O'Neill (CHM-0129): Halvorsen expansion SIGNED. 40 seats + Routes on 120 ✍️\n- 2026-02-27T17:02:00-08:00 Priya Raman (CHM-0130): huge. well done Ryan\n- 2026-03-05T15:30:00-08:00 Diego Alvarez (CHM-0155): Brambleton signed (Zoe's first sourced deal!) 🎉\n- 2026-03-05T15:31:00-08:00 Zoe Adams (CHM-0156): 🥳🥳\n- 2026-03-10T16:00:00-07:00 Victor Huang (CHM-0165): Granitevale walkthrough of the Routes postmortem done. Howard seemed reassured\n- 2026-03-12T17:20:00-07:00 Ryan O'Neill (CHM-0167): IRONWOOD IS SIGNED. 200 Enterprise + Routes + Portal. kickoff tomorrow\n- 2026-03-12T17:21:00-07:00 Priya Raman (CHM-0168): 🎉🎉🎉 biggest deal in company history\n- 2026-03-13T16:20:00-07:00 Tariq Aziz (CHM-0171): Ironwood go-live moves from Mar 16 to Mar 30, their IT change freeze runs to the 27th. training stays week of the 23rd\n- 2026-03-18T16:05:00-07:00 Diego Alvarez (CHM-0176): Alder & Finch signed, annual prepay 10% off\n- 2026-03-23T09:00:00-07:00 Ryan O'Neill (CHM-0182): Marlowe: Priya will approve the 18% once security review clears. Victor is on the questionnaire\n- 2026-03-24T16:00:00-07:00 Laura Jensen (CHM-0185): Pinecrest added 6 seats for the season\n- 2026-03-26T11:10:00-07:00 Tariq Aziz (CHM-0190): Summit Air will renew!! paperwork today\n- 2026-03-27T16:05:00-07:00 Laura Jensen (CHM-0193): Summit Air renewal signed. quarterly billing, 2 months credit on the first invoice\n- 2026-03-27T16:07:00-07:00 Hannah Becker (CHM-0194): Great save, Tariq and Laura.\n"}
{"id": "chat-support", "file": "chat-support.md", "source": "chat", "title": "#support", "date": "2026-01-09", "text": "# #support\n\nSupport desk coordination.\n\n- 2026-01-09T13:12:00-08:00 Lena Vogel (CHM-0017): is there a macro for the calendar double-sync question? third one this week\n- 2026-01-09T13:20:00-08:00 Carlos Mendes (CHM-0018): added one: 'Calendar: duplicate events'\n- 2026-01-14T09:46:00-08:00 Amara Obi (CHM-0032): Summit Air: Routes ignores skills when optimizing across techs. Reproduced, escalated to Arjun.\n- 2026-01-15T10:30:00-08:00 Lena Vogel (CHM-0034): can someone sanity check my answer on the timesheet export question? want to make sure there's no payroll integration I'm missing\n- 2026-01-15T10:34:00-08:00 Amara Obi (CHM-0035): nope, CSV only. log it as a feature request\n- 2026-01-20T07:56:00-08:00 Jack Sullivan (CHM-0041): Granitevale board is blank for all dispatchers, P1. pulling in eng\n- 2026-01-20T12:40:00-08:00 Carlos Mendes (CHM-0044): Reminder from Hannah's email: Enterprise P1 first response = 1 hour. Team = 2h. Starter = 4h. The old macro said 4h for everyone, fixed now.\n- 2026-01-20T12:43:00-08:00 Jack Sullivan (CHM-0045): yeah that was me quoting the macro. lesson learned\n- 2026-02-03T09:05:00-08:00 Amara Obi (CHM-0064): Summit's 'two techs same address' was a duplicate import, not Routes. Closed with Kim.\n- 2026-02-05T09:20:00-08:00 Jack Sullivan (CHM-0067): Foxglove import fails on phone extensions, workaround is notes column for now. Oliver is on the fix\n- 2026-02-10T14:33:00-08:00 Carlos Mendes (CHM-0081): multiple customers reporting Optimize spinning/timing out. incident channel is #inc-2026-02-10-routes\n- 2026-02-10T14:41:00-08:00 Amara Obi (CHM-0084): Halvorsen too (Marco). big routes only\n- 2026-02-10T15:12:00-08:00 Lena Vogel (CHM-0087): Ridgeline as well. telling everyone manual ordering works\n- 2026-02-12T10:06:00-08:00 Lena Vogel (CHM-0101): Lakeshore says their invoice charges $49 for all 50 seats. Paul is looking\n- 2026-02-24T09:10:00-08:00 Carlos Mendes (CHM-0119): Summit Air asked about the cancellation notice period. handed to Tariq.\n- 2026-02-25T15:30:00-08:00 Carlos Mendes (CHM-0122): nice work on the ticket backlog this week folks, we're down to 4 open\n- 2026-02-26T14:15:00-08:00 Lena Vogel (CHM-0123): Thistle Creek export running\n- 2026-03-03T08:20:00-08:00 Carlos Mendes (CHM-0135): two customers saying iOS jobs aren't syncing since yesterday's update. anyone else?\n- 2026-03-03T08:42:00-08:00 Jack Sullivan (CHM-0136): Pinecrest too\n- 2026-03-03T08:46:00-08:00 Carlos Mendes (CHM-0137): opening an incident. #inc-2026-03-03-ios-sync\n- 2026-03-03T09:52:00-08:00 Amara Obi (CHM-0143): Ridgeline as well 😬 they were in the Routes incident too, Ken is not thrilled\n- 2026-03-09T07:50:00-07:00 Jack Sullivan (CHM-0160): Bluestem recurring jobs all +1 hour since DST. escalated to Lucy\n- 2026-03-09T09:02:00-07:00 Amara Obi (CHM-0162): Osprey portal slots off by an hour too, same thing probably\n- 2026-03-16T09:05:00-07:00 Amara Obi (CHM-0172): Ironwood SAML metadata with two signing certs gets rejected. escalated to Ben\n- 2026-03-19T14:00:00-07:00 Isabel Moreno (CHM-0177): Kestrel asked about Routes on our iOS follow-up call, passed to Diego\n- 2026-03-25T10:15:00-07:00 Lena Vogel (CHM-0186): Ironwood training day 2 done, dispatchers picking it up fast\n- 2026-03-30T10:35:00-07:00 Amara Obi (CHM-0195): Ironwood is live! SSO on, 186 users logged in already\n"}
{"id": "email-THR-001", "file": "email-THR-001.md", "source": "email", "title": "Q1 kickoff: priorities for January to March", "date": "2026-01-05", "text": "# Q1 kickoff: priorities for January to March\n\nEmail thread THR-001 (internal), 2 messages.\n\n## EM-0001: Ingrid Solberg <ingrid.solberg@brightfjord.example>, 2026-01-05T08:30:00-08:00\n\nSubject: Q1 kickoff: priorities for January to March\nTo: all@brightfjord.example\n\nHi all,\n\nHappy new year. Three priorities for Q1:\n\n1. Routes v2: make optimization faster and reliable at scale. Arjun and Sam own the roadmap; v2.3 is planned for early February.\n2. Enterprise: close Ironwood and Marlowe, and expand Halvorsen.\n3. Pricing: the Team plan goes from $45 to $49 per user per month on February 1 for new customers. Tomas will send the grandfathering details.\n\nAll-hands is Thursday January 8 at 10:00.\n\nIngrid\n\n## EM-0002: Marcus Okafor <marcus.okafor@brightfjord.example>, 2026-01-05T09:10:00-08:00\n\nSubject: Re: Q1 kickoff: priorities for January to March\nTo: all@brightfjord.example\n\nAdding one for engineering: Ben Carter joins the Platform team on January 12. Please say hi.\n\nMarcus\n"}
{"id": "email-THR-002", "file": "email-THR-002.md", "source": "email", "title": "Welcome Ben! Your first weeks", "date": "2026-01-12", "text": "# Welcome Ben! Your first weeks\n\nEmail thread THR-002 (internal), 3 messages.\n\n## EM-0003: Leo Fischer <leo.fischer@brightfjord.example>, 2026-01-12T08:15:00-08:00\n\nSubject: Welcome Ben! Your first weeks\nTo: ben.carter@brightfjord.example\nCc: lucy.park@brightfjord.example, kenji.watanabe@brightfjord.example\n\nWelcome to Brightfjord, Ben!\n\nYour onboarding buddy for the first 30 days is Lucy Park (Product Engineering). We pick buddies from a different team on purpose, so you get a second view of the codebase.\n\nWeek 1: laptop and accounts with Kenji, local dev environment, read the handbook and the on-call runbook.\nWeek 3: shadow an on-call shift with Fatima.\nMarch: first on-call shift as secondary.\n\nLeo\n\n## EM-0004: Ben Carter <ben.carter@brightfjord.example>, 2026-01-12T08:40:00-08:00\n\nSubject: Re: Welcome Ben! Your first weeks\nTo: leo.fischer@brightfjord.example\nCc: lucy.park@brightfjord.example, kenji.watanabe@brightfjord.example\n\nThanks Leo! Excited to get started. Kenji, I'm at the front desk.\n\n## EM-0005: Lucy Park <lucy.park@brightfjord.example>, 2026-01-12T08:52:00-08:00\n\nSubject: Re: Welcome Ben! Your first weeks\nTo: ben.carter@brightfjord.example\n\nWelcome Ben! Coffee at 10? I'll show you around the repos after.\n"}
{"id": "email-THR-003", "file": "email-THR-003.md", "source": "email", "title": "Brightfjord proposal for Juniper Water Treatment", "date": "2026-01-12", "text": "# Brightfjord proposal for Juniper Water Treatment\n\nEmail thread THR-003 (external), 4 messages.\n\n## EM-0006: Laura Jensen <laura.jensen@brightfjord.example>, 2026-01-12T11:00:00-08:00\n\nSubject: Brightfjord proposal for Juniper Water Treatment\nTo: diane.okoro@juniper-water.example\n\nHi Diane,\n\nThanks for the time today. As discussed: Team plan, 18 users at $45 per user per month, annual prepay: $9,720 per year.\n\nOne note: our Team list price increases to $49 on February 1. If you sign before then, the $45 rate applies for your 12-month term.\n\nBest,\nLaura Jensen\n\n## EM-0007: Diane Okoro <diane.okoro@juniper-water.example>, 2026-01-13T09:30:00-08:00\n\nSubject: Re: Brightfjord proposal for Juniper Water Treatment\nTo: laura.jensen@brightfjord.example\n\nThanks Laura, our owner is reviewing. Does the $45 also apply when we renew next year?\n\n## EM-0008: Laura Jensen <laura.jensen@brightfjord.example>, 2026-01-13T10:05:00-08:00\n\nSubject: Re: Brightfjord proposal for Juniper Water Treatment\nTo: diane.okoro@juniper-water.example\n\nGood question. Existing customers keep $45 on renewals signed on or before June 30, 2026. Your first term would run January 28, 2026 to January 27, 2027, so your first renewal would be at the list price at that time. Happy to talk options then.\n\n## EM-0009: Diane Okoro <diane.okoro@juniper-water.example>, 2026-01-26T15:45:00-08:00\n\nSubject: Re: Brightfjord proposal for Juniper Water Treatment\nTo: laura.jensen@brightfjord.example\n\nWe're good to go. Signed order form coming tomorrow.\n"}
{"id": "email-THR-004", "file": "email-THR-004.md", "source": "email", "title": "Getting started with Routes", "date": "2026-01-16", "text": "# Getting started with Routes\n\nEmail thread THR-004 (external), 2 messages.\n\n## EM-0010: Sam Whitaker <sam.whitaker@brightfjord.example>, 2026-01-16T10:00:00-08:00\n\nSubject: Getting started with Routes\nTo: ivy.calderon@ridgeline-solar.example\nCc: laura.jensen@brightfjord.example\n\nHi Ivy,\n\nRoutes is now enabled for your 45 users. Three tips: set start and end points per crew, tag technicians with skills, and keep routes under 150 stops (the current limit).\n\nSam\n\n## EM-0011: Ivy Calderon <ivy.calderon@ridgeline-solar.example>, 2026-01-16T13:20:00-08:00\n\nSubject: Re: Getting started with Routes\nTo: sam.whitaker@brightfjord.example\n\nThanks Sam, we'll try it with the Albuquerque crews first.\n"}
{"id": "email-THR-005", "file": "email-THR-005.md", "source": "email", "title": "Re: this morning's outage and P1 response time", "date": "2026-01-20", "text": "# Re: this morning's outage and P1 response time\n\nEmail thread THR-005 (external), 2 messages.\n\n## EM-0012: Hannah Becker <hannah.becker@brightfjord.example>, 2026-01-20T12:10:00-08:00\n\nSubject: Re: this morning's outage and P1 response time\nTo: howard.pike@granitevale-elevator.example, nadia.sorensen@granitevale-elevator.example\nCc: carlos.mendes@brightfjord.example, tariq.aziz@brightfjord.example\n\nHi Howard, hi Nadia,\n\nI'm sorry about this morning's dispatch board outage, and for the incorrect information on TCK-1010. Your Enterprise plan includes a 1-hour first response for P1 tickets, not 4 hours. Our first response this morning came 1 hour 35 minutes after the ticket was opened, which missed that target.\n\nThe cause was a cached web page after our release the night before; we now keep the previous release's files for 24 hours after every deploy.\n\nPer your agreement we'll apply a service credit of 5% of one month's fee to your April invoice.\n\nHannah Becker\nVP Customer Success\n\n## EM-0013: Howard Pike <howard.pike@granitevale-elevator.example>, 2026-01-20T13:02:00-08:00\n\nSubject: Re: Re: this morning's outage and P1 response time\nTo: hannah.becker@brightfjord.example\nCc: nadia.sorensen@granitevale-elevator.example\n\nAppreciated, Hannah. Please make sure your whole team knows the SLA. Let's talk tomorrow.\n"}
{"id": "email-THR-006", "file": "email-THR-006.md", "source": "email", "title": "SLA reminder (Enterprise P1 = 1 hour)", "date": "2026-01-20", "text": "# SLA reminder (Enterprise P1 = 1 hour)\n\nEmail thread THR-006 (internal), 3 messages.\n\n## EM-0014: Hannah Becker <hannah.becker@brightfjord.example>, 2026-01-20T12:30:00-08:00\n\nSubject: SLA reminder (Enterprise P1 = 1 hour)\nTo: carlos.mendes@brightfjord.example, amara.obi@brightfjord.example, jack.sullivan@brightfjord.example, lena.vogel@brightfjord.example\n\nTeam, quick reminder after this morning: first response targets for P1 are 1 hour on Enterprise, 2 hours on Team and 4 hours on Starter. The support-sla page in the wiki is the source of truth.\n\nJack, no blame here: the P1 macro still had the Starter number in it. Carlos, can you fix the macro?\n\nHannah\n\n## EM-0015: Carlos Mendes <carlos.mendes@brightfjord.example>, 2026-01-20T14:15:00-08:00\n\nSubject: Re: SLA reminder (Enterprise P1 = 1 hour)\nTo: hannah.becker@brightfjord.example\nCc: amara.obi@brightfjord.example, jack.sullivan@brightfjord.example, lena.vogel@brightfjord.example\n\nMacro fixed. I also added the SLA timer to the ticket view so it's visible while you work.\n\n## EM-0016: Jack Sullivan <jack.sullivan@brightfjord.example>, 2026-01-20T14:20:00-08:00\n\nSubject: Re: SLA reminder (Enterprise P1 = 1 hour)\nTo: hannah.becker@brightfjord.example\n\nThanks Hannah. Sorry about that one, I'll double check the plan before quoting SLAs.\n"}
{"id": "email-THR-007", "file": "email-THR-007.md", "source": "email", "title": "Team price change on Feb 1: grandfathering rules", "date": "2026-01-26", "text": "# Team price change on Feb 1: grandfathering rules\n\nEmail thread THR-007 (internal), 3 messages.\n\n## EM-0017: Tomas Lindqvist <tomas.lindqvist@brightfjord.example>, 2026-01-26T09:00:00-08:00\n\nSubject: Team price change on Feb 1: grandfathering rules\nTo: sales@brightfjord.example\nCc: paul.duarte@brightfjord.example, rachel.moss@brightfjord.example, hannah.becker@brightfjord.example\n\nHi all,\n\nRules for the Team plan price change (from $45 to $49 per user per month):\n\n1. New customers: $49 from February 1. Quotes sent before February 1 at $45 are honored if signed by January 31.\n2. Existing customers: renewals signed on or before June 30, 2026 keep $45 for their existing seats.\n3. Seats added by existing customers: $49.\n4. Starter ($29) and Enterprise ($59) are unchanged.\n\nThe pricing page in the wiki is updated on January 28. Discount approval limits are unchanged.\n\nTomas\n\n## EM-0018: Rachel Moss <rachel.moss@brightfjord.example>, 2026-01-26T09:40:00-08:00\n\nSubject: Re: Team price change on Feb 1: grandfathering rules\nTo: tomas.lindqvist@brightfjord.example\nCc: paul.duarte@brightfjord.example\n\nI'll update the price book in billing on January 30 so new invoices pick up $49.\n\n## EM-0019: Laura Jensen <laura.jensen@brightfjord.example>, 2026-01-26T10:02:00-08:00\n\nSubject: Re: Team price change on Feb 1: grandfathering rules\nTo: tomas.lindqvist@brightfjord.example\n\nThanks Tomas. Lakeshore renews Feb 9 with 10 extra seats, so that one will be mixed: 40 at $45, 10 at $49.\n"}
{"id": "email-THR-008", "file": "email-THR-008.md", "source": "email", "title": "An update to Brightfjord Team pricing", "date": "2026-01-28", "text": "# An update to Brightfjord Team pricing\n\nEmail thread THR-008 (external), 1 messages.\n\n## EM-0020: Grace Whitfield <grace.whitfield@brightfjord.example>, 2026-01-28T10:00:00-08:00\n\nSubject: An update to Brightfjord Team pricing\nTo: customer-updates@brightfjord.example\n\nHello,\n\nStarting February 1, 2026, the list price of the Brightfjord Team plan becomes $49 per user per month for new subscriptions.\n\nIf you are already a Team customer: your current rate stays the same for renewals signed on or before June 30, 2026. Seats you add after February 1 are billed at the new rate.\n\nStarter and Enterprise pricing does not change.\n\nQuestions? Reply to this email or contact your account manager.\n\nThe Brightfjord team\n"}
{"id": "email-THR-009", "file": "email-THR-009.md", "source": "email", "title": "Halvorsen expansion: 40 seats + Routes", "date": "2026-02-02", "text": "# Halvorsen expansion: 40 seats + Routes\n\nEmail thread THR-009 (external), 7 messages.\n\n## EM-0021: Ryan O'Neill <ryan.oneill@brightfjord.example>, 2026-02-02T10:00:00-08:00\n\nSubject: Halvorsen expansion: 40 seats + Routes\nTo: erik.halvorsen@halvorsen-mech.example\nCc: victor.huang@brightfjord.example\n\nHi Erik,\n\nFollowing our call: 40 additional Enterprise seats plus Routes for all 120 users. At list that is $45,600 per year ($3,800 per month).\n\nRyan\n\n## EM-0022: Erik Halvorsen <erik.halvorsen@halvorsen-mech.example>, 2026-02-03T08:15:00-08:00\n\nSubject: Re: Halvorsen expansion: 40 seats + Routes\nTo: ryan.oneill@brightfjord.example\n\nThanks Ryan. To get this through our board this quarter we need 25% off.\n\n## EM-0023: Ryan O'Neill <ryan.oneill@brightfjord.example>, 2026-02-03T09:00:00-08:00\n\nSubject: Re: Halvorsen expansion: 40 seats + Routes\nTo: erik.halvorsen@halvorsen-mech.example\n\nUnderstood. 25% is more than I can offer, but let me see what I can get approved.\n\n## EM-0024: Erik Halvorsen <erik.halvorsen@halvorsen-mech.example>, 2026-02-11T07:30:00-08:00\n\nSubject: Re: Halvorsen expansion: 40 seats + Routes\nTo: ryan.oneill@brightfjord.example\n\nAfter yesterday's Routes outage I need some confidence before committing 120 techs to it. What happened?\n\n## EM-0025: Ryan O'Neill <ryan.oneill@brightfjord.example>, 2026-02-11T09:20:00-08:00\n\nSubject: Re: Halvorsen expansion: 40 seats + Routes\nTo: erik.halvorsen@halvorsen-mech.example\nCc: victor.huang@brightfjord.example\n\nFair ask. Short version: a database index was missing after a release, so long routes timed out. It was fixed the same afternoon, and we're adding automated checks so a migration can't silently drop an index again. Full postmortem this week; Victor can walk your dispatch team through it.\n\n## EM-0026: Ryan O'Neill <ryan.oneill@brightfjord.example>, 2026-02-19T10:30:00-08:00\n\nSubject: Re: Halvorsen expansion: 40 seats + Routes\nTo: erik.halvorsen@halvorsen-mech.example\n\nGood news: we can do 22% off the expansion. That's $35,568 per year for 40 Enterprise seats and Routes on all 120.\n\n## EM-0027: Erik Halvorsen <erik.halvorsen@halvorsen-mech.example>, 2026-02-20T08:05:00-08:00\n\nSubject: Re: Halvorsen expansion: 40 seats + Routes\nTo: ryan.oneill@brightfjord.example\n\nDeal. Send the order form and we'll sign next week.\n"}
{"id": "email-THR-010", "file": "email-THR-010.md", "source": "email", "title": "Not renewing", "date": "2026-02-06", "text": "# Not renewing\n\nEmail thread THR-010 (external), 3 messages.\n\n## EM-0028: Gary Pennington <gary.pennington@thistlecreek-hvac.example>, 2026-02-06T10:20:00-08:00\n\nSubject: Not renewing\nTo: isabel.moreno@brightfjord.example\n\nIsabel, we've decided not to renew. Our accountant moved us onto a package that bundles scheduling with our accounting software and it works out cheaper. Service through Feb 28 is fine.\n\nGary\n\n## EM-0029: Isabel Moreno <isabel.moreno@brightfjord.example>, 2026-02-06T11:05:00-08:00\n\nSubject: Re: Not renewing\nTo: gary.pennington@thistlecreek-hvac.example\n\nSorry to hear that, Gary, and thanks for three years with us. Confirmed: your account stays active through February 28. Would you like a full data export? Our support team can prepare one.\n\n## EM-0030: Gary Pennington <gary.pennington@thistlecreek-hvac.example>, 2026-02-06T12:40:00-08:00\n\nSubject: Re: Not renewing\nTo: isabel.moreno@brightfjord.example\n\nYes please, Tina will send a request.\n"}
{"id": "email-THR-011", "file": "email-THR-011.md", "source": "email", "title": "Routes incident on February 10", "date": "2026-02-10", "text": "# Routes incident on February 10\n\nEmail thread THR-011 (external), 3 messages.\n\n## EM-0031: Hannah Becker <hannah.becker@brightfjord.example>, 2026-02-10T18:30:00-08:00\n\nSubject: Routes incident on February 10\nTo: derek.lamb@summitair.example, marco.bellini@halvorsen-mech.example, carla.medina@westvale-fleet.example, ivy.calderon@ridgeline-solar.example, tom.ashby@lakeshore-hc.example\nCc: carlos.mendes@brightfjord.example\n\nHello,\n\nToday between 14:05 and 17:10 Pacific, route optimization failed or timed out for routes with more than 40 stops. Manual ordering kept working throughout.\n\nThe cause was a missing database index after a release. It has been fixed, and we are adding checks to prevent a repeat. We will share a written postmortem by February 17.\n\nI'm sorry for the disruption to your afternoon dispatch.\n\nHannah Becker\nVP Customer Success\n\n## EM-0032: Derek Lamb <derek.lamb@summitair.example>, 2026-02-11T07:40:00-08:00\n\nSubject: Re: Routes incident on February 10\nTo: hannah.becker@brightfjord.example\n\nHannah, this is the third Routes problem for us this quarter (TCK-1006, TCK-1014 and now yesterday). Our renewal is seven weeks out and I'm not confident.\n\n## EM-0033: Hannah Becker <hannah.becker@brightfjord.example>, 2026-02-11T09:15:00-08:00\n\nSubject: Re: Routes incident on February 10\nTo: derek.lamb@summitair.example\nCc: tariq.aziz@brightfjord.example\n\nDerek, that's fair. One correction: the January 27 duplicate-route issue (TCK-1014) came from a customer record that was imported twice, not from Routes. The other two are on us. Tariq will set up a call this week.\n"}
{"id": "email-THR-012", "file": "email-THR-012.md", "source": "email", "title": "INC-2026-001 summary and postmortem", "date": "2026-02-12", "text": "# INC-2026-001 summary and postmortem\n\nEmail thread THR-012 (internal), 3 messages.\n\n## EM-0034: Leo Fischer <leo.fischer@brightfjord.example>, 2026-02-12T09:00:00-08:00\n\nSubject: INC-2026-001 summary and postmortem\nTo: eng@brightfjord.example\nCc: carlos.mendes@brightfjord.example, sam.whitaker@brightfjord.example\n\nSummary of Tuesday's incident:\n\n- 14:05 routes-engine v2.3.0 deployed (migration 0042).\n- 14:22 latency alert, Fatima paged.\n- 14:30 SEV-2 declared, I took incident commander.\n- 15:40 Arjun confirmed migration 0042 rebuilt route_stops without the (route_id, sequence) index.\n- 16:48 Jonas finished recreating the index; latency back to normal.\n- 17:10 resolved.\n\nPostmortem review Friday Feb 13 at 11:00. Draft is in the wiki.\n\nAction items: Arjun, CI check for dropped indexes; Fatima, p95 latency alert; Carlos, status page within 15 minutes.\n\nLeo\n\n## EM-0035: Arjun Nair <arjun.nair@brightfjord.example>, 2026-02-12T09:25:00-08:00\n\nSubject: Re: INC-2026-001 summary and postmortem\nTo: eng@brightfjord.example\n\nCI check PR next week. Sorry all, I should have caught the index in review.\n\n## EM-0036: Marcus Okafor <marcus.okafor@brightfjord.example>, 2026-02-12T09:40:00-08:00\n\nSubject: Re: INC-2026-001 summary and postmortem\nTo: eng@brightfjord.example\n\nThanks everyone. Blameless as always: the migration passed review, so our tooling should have caught it. That's what the CI check is for.\n"}
{"id": "email-THR-013", "file": "email-THR-013.md", "source": "email", "title": "Lakeshore invoice: price book and grandfathered seats", "date": "2026-02-12", "text": "# Lakeshore invoice: price book and grandfathered seats\n\nEmail thread THR-013 (internal), 3 messages.\n\n## EM-0037: Paul Duarte <paul.duarte@brightfjord.example>, 2026-02-12T11:00:00-08:00\n\nSubject: Lakeshore invoice: price book and grandfathered seats\nTo: rachel.moss@brightfjord.example\nCc: tomas.lindqvist@brightfjord.example\n\nRachel, root cause on Lakeshore: when the price book was updated on Jan 30, the Team SKU changed to $49 for everyone. Renewals with grandfathered seats need a separate 'Team (grandfathered $45 rate)' SKU. I've added it and will void and reissue INV-2026-0013.\n\n## EM-0038: Rachel Moss <rachel.moss@brightfjord.example>, 2026-02-12T11:30:00-08:00\n\nSubject: Re: Lakeshore invoice: price book and grandfathered seats\nTo: paul.duarte@brightfjord.example\nCc: tomas.lindqvist@brightfjord.example\n\nMy bad, I'll audit the other February renewals.\n\n## EM-0039: Rachel Moss <rachel.moss@brightfjord.example>, 2026-02-13T09:10:00-08:00\n\nSubject: Re: Lakeshore invoice: price book and grandfathered seats\nTo: paul.duarte@brightfjord.example\nCc: tomas.lindqvist@brightfjord.example\n\nChecked: Lakeshore was the only renewal invoiced in February so far. Bluestem (March 1) is set to the grandfathered SKU.\n"}
{"id": "email-THR-014", "file": "email-THR-014.md", "source": "email", "title": "Halvorsen 22%: approval", "date": "2026-02-18", "text": "# Halvorsen 22%: approval\n\nEmail thread THR-014 (internal), 4 messages.\n\n## EM-0040: Ryan O'Neill <ryan.oneill@brightfjord.example>, 2026-02-18T14:00:00-08:00\n\nSubject: Halvorsen 22%: approval\nTo: priya.raman@brightfjord.example\n\nPriya, Erik will sign at 22%. Can you approve? $35,568/yr, Routes on 120 techs.\n\n## EM-0041: Priya Raman <priya.raman@brightfjord.example>, 2026-02-18T16:30:00-08:00\n\nSubject: Re: Halvorsen 22%: approval\nTo: ingrid.solberg@brightfjord.example\nCc: ryan.oneill@brightfjord.example, tomas.lindqvist@brightfjord.example\n\nIngrid, this is above my 20% limit so it needs you. Context: 40 Enterprise seats plus Routes on 120 seats, $35,568 per year at 22%. Strategic: Routes on a 120-technician fleet would be our best reference.\n\n## EM-0042: Ingrid Solberg <ingrid.solberg@brightfjord.example>, 2026-02-19T08:05:00-08:00\n\nSubject: Re: Halvorsen 22%: approval\nTo: priya.raman@brightfjord.example\nCc: ryan.oneill@brightfjord.example, tomas.lindqvist@brightfjord.example\n\nApproved at 22%, one-time for this expansion. The renewal goes back to standard terms.\n\n## EM-0043: Priya Raman <priya.raman@brightfjord.example>, 2026-02-19T08:20:00-08:00\n\nSubject: Re: Halvorsen 22%: approval\nTo: ryan.oneill@brightfjord.example\nCc: ingrid.solberg@brightfjord.example, tomas.lindqvist@brightfjord.example\n\nRyan, to be clear: I did not approve the 22% (I can only go to 20%). Ingrid approved it this morning. Please log her as the approver on DEAL-001.\n"}
{"id": "email-THR-015", "file": "email-THR-015.md", "source": "email", "title": "Oliver's last day", "date": "2026-02-20", "text": "# Oliver's last day\n\nEmail thread THR-015 (internal), 2 messages.\n\n## EM-0044: Aisha Khan <aisha.khan@brightfjord.example>, 2026-02-20T15:00:00-08:00\n\nSubject: Oliver's last day\nTo: all@brightfjord.example\n\nHi everyone,\n\nOliver Grant's last day is Friday, February 27. He's moving back east to join his family's business. Ben Carter takes over Oliver's support escalations, and Jonas takes over the import service.\n\nFarewell lunch on Thursday February 26 at 12:00.\n\nAisha\n\n## EM-0045: Oliver Grant <oliver.grant@brightfjord.example>, 2026-02-20T15:40:00-08:00\n\nSubject: Re: Oliver's last day\nTo: all@brightfjord.example\n\nThanks all, it's been a great five years. Ben, let's go through the webhook retry PR on Thursday afternoon.\n"}
{"id": "email-THR-016", "file": "email-THR-016.md", "source": "email", "title": "Re: Brightfjord proposal", "date": "2026-02-24", "text": "# Re: Brightfjord proposal\n\nEmail thread THR-016 (external), 2 messages.\n\n## EM-0046: Lydia Thorne <lydia.thorne@sunfield-irrigation.example>, 2026-02-24T09:00:00-08:00\n\nSubject: Re: Brightfjord proposal\nTo: laura.jensen@brightfjord.example\n\nLaura, we've decided to go with a cheaper tool. At $49 a user it's over our budget for this year. Thanks for your time.\n\n## EM-0047: Laura Jensen <laura.jensen@brightfjord.example>, 2026-02-24T10:15:00-08:00\n\nSubject: Re: Re: Brightfjord proposal\nTo: lydia.thorne@sunfield-irrigation.example\n\nUnderstood, Lydia, and thanks for letting me know. If anything changes, I'm happy to pick this up again.\n"}
{"id": "email-THR-017", "file": "email-THR-017.md", "source": "email", "title": "Summit Air save plan", "date": "2026-03-02", "text": "# Summit Air save plan\n\nEmail thread THR-017 (internal), 3 messages.\n\n## EM-0048: Tariq Aziz <tariq.aziz@brightfjord.example>, 2026-03-02T16:30:00-08:00\n\nSubject: Summit Air save plan\nTo: hannah.becker@brightfjord.example\nCc: laura.jensen@brightfjord.example\n\nHannah, call with Derek today. They're evaluating two alternatives. What would keep them: proof that Routes is stable, plus some credit.\n\nProposal: a 2-month service credit ($3,192) on the first renewal invoice, and quarterly billing instead of annual. Renewal value $19,152 per year.\n\n## EM-0049: Hannah Becker <hannah.becker@brightfjord.example>, 2026-03-04T09:30:00-08:00\n\nSubject: Re: Summit Air save plan\nTo: tariq.aziz@brightfjord.example\nCc: laura.jensen@brightfjord.example\n\nApproved: two months of service credit on the first quarterly invoice. Make sure Derek gets the postmortem and a monthly Routes check-in with Sam.\n\n## EM-0050: Laura Jensen <laura.jensen@brightfjord.example>, 2026-03-04T10:10:00-08:00\n\nSubject: Re: Summit Air save plan\nTo: tariq.aziz@brightfjord.example\n\nUpdating the quote today.\n"}
{"id": "email-THR-018", "file": "email-THR-018.md", "source": "email", "title": "Your Brightfjord renewal", "date": "2026-03-04", "text": "# Your Brightfjord renewal\n\nEmail thread THR-018 (external), 4 messages.\n\n## EM-0051: Tariq Aziz <tariq.aziz@brightfjord.example>, 2026-03-04T14:00:00-08:00\n\nSubject: Your Brightfjord renewal\nTo: derek.lamb@summitair.example\nCc: laura.jensen@brightfjord.example, sam.whitaker@brightfjord.example\n\nHi Derek,\n\nAs discussed: we'd like to offer a two-month service credit on your first renewal invoice, quarterly billing, and a monthly Routes check-in with our product manager Sam Whitaker. The February 10 postmortem is attached.\n\nTariq\n\n## EM-0052: Derek Lamb <derek.lamb@summitair.example>, 2026-03-05T08:20:00-08:00\n\nSubject: Re: Your Brightfjord renewal\nTo: tariq.aziz@brightfjord.example\n\nAppreciate it. Let me take it to our owner.\n\n## EM-0053: Derek Lamb <derek.lamb@summitair.example>, 2026-03-26T11:00:00-07:00\n\nSubject: Re: Your Brightfjord renewal\nTo: tariq.aziz@brightfjord.example\nCc: laura.jensen@brightfjord.example\n\nWe'll renew. Send the paperwork.\n\n## EM-0054: Laura Jensen <laura.jensen@brightfjord.example>, 2026-03-26T13:30:00-07:00\n\nSubject: Re: Your Brightfjord renewal\nTo: derek.lamb@summitair.example\nCc: tariq.aziz@brightfjord.example\n\nGreat news, Derek. Order form attached: 28 Team seats and Routes, quarterly billing from April 1, with the two-month credit on the first invoice.\n"}
{"id": "email-THR-019", "file": "email-THR-019.md", "source": "email", "title": "INC-2026-002 resolved: Field app 4.12.1", "date": "2026-03-04", "text": "# INC-2026-002 resolved: Field app 4.12.1\n\nEmail thread THR-019 (internal), 2 messages.\n\n## EM-0055: Mei Chen <mei.chen@brightfjord.example>, 2026-03-04T15:00:00-08:00\n\nSubject: INC-2026-002 resolved: Field app 4.12.1\nTo: eng@brightfjord.example\nCc: carlos.mendes@brightfjord.example, chloe.dubois@brightfjord.example\n\n4.12.1 was released at 13:30 PT after expedited app store review. Root cause: 4.12.0 moved completed-job uploads into a short background task that iOS suspends after about 30 seconds. Jobs stayed queued on devices; nothing was lost.\n\nFollow-ups: Kwame, staged rollouts for the Field app; Nina, an end-to-end background upload test on a physical iOS device before every release.\n\nMei\n\n## EM-0056: Chloe Dubois <chloe.dubois@brightfjord.example>, 2026-03-04T15:20:00-08:00\n\nSubject: Re: INC-2026-002 resolved: Field app 4.12.1\nTo: eng@brightfjord.example\n\nRelease notes updated in the wiki (field-app-releases).\n"}
{"id": "email-THR-020", "file": "email-THR-020.md", "source": "email", "title": "Routes and the February 10 incident", "date": "2026-03-05", "text": "# Routes and the February 10 incident\n\nEmail thread THR-020 (external), 3 messages.\n\n## EM-0057: Howard Pike <howard.pike@granitevale-elevator.example>, 2026-03-05T08:00:00-08:00\n\nSubject: Routes and the February 10 incident\nTo: ryan.oneill@brightfjord.example\n\nRyan, before we consider Routes: can you confirm the February 10 issue is fixed for good?\n\n## EM-0058: Ryan O'Neill <ryan.oneill@brightfjord.example>, 2026-03-06T09:00:00-08:00\n\nSubject: Re: Routes and the February 10 incident\nTo: howard.pike@granitevale-elevator.example\nCc: victor.huang@brightfjord.example\n\nHi Howard. Yes: the root cause was a database index missing after a migration. It was fixed the same day, and we've since added a CI check that blocks any migration that drops an index without recreating it. Victor can walk your team through the postmortem; how about Tuesday March 10?\n\n## EM-0059: Howard Pike <howard.pike@granitevale-elevator.example>, 2026-03-06T11:00:00-08:00\n\nSubject: Re: Routes and the February 10 incident\nTo: ryan.oneill@brightfjord.example\n\nTuesday works.\n"}
{"id": "email-THR-021", "file": "email-THR-021.md", "source": "email", "title": "Welcome to Brightfjord: kickoff and go-live plan", "date": "2026-03-12", "text": "# Welcome to Brightfjord: kickoff and go-live plan\n\nEmail thread THR-021 (external), 2 messages.\n\n## EM-0060: Ryan O'Neill <ryan.oneill@brightfjord.example>, 2026-03-12T16:00:00-07:00\n\nSubject: Welcome to Brightfjord: kickoff and go-live plan\nTo: patricia.nguyen@ironwood-fs.example\nCc: samuel.reyes@ironwood-fs.example, gail.morrison@ironwood-fs.example, tariq.aziz@brightfjord.example, victor.huang@brightfjord.example\n\nPatricia,\n\nWelcome aboard! Kickoff is tomorrow, Friday March 13, at 10:00 Pacific. Tariq Aziz is your Customer Success Manager from here on.\n\nPlan: dispatch go-live on Monday March 16, then Routes region by region over the following four weeks, and Portal in April.\n\nRyan\n\n## EM-0061: Patricia Nguyen <patricia.nguyen@ironwood-fs.example>, 2026-03-12T16:40:00-07:00\n\nSubject: Re: Welcome to Brightfjord: kickoff and go-live plan\nTo: ryan.oneill@brightfjord.example\nCc: tariq.aziz@brightfjord.example\n\nThanks Ryan, looking forward to it.\n"}
{"id": "email-THR-022", "file": "email-THR-022.md", "source": "email", "title": "Invoice INV-2026-0023", "date": "2026-03-13", "text": "# Invoice INV-2026-0023\n\nEmail thread THR-022 (external), 3 messages.\n\n## EM-0062: Paul Duarte <paul.duarte@brightfjord.example>, 2026-03-13T11:00:00-07:00\n\nSubject: Invoice INV-2026-0023\nTo: gail.morrison@ironwood-fs.example\n\nHi Gail, invoice INV-2026-0023 for $146,869.80 is attached, due April 12.\n\n## EM-0063: Gail Morrison <gail.morrison@ironwood-fs.example>, 2026-03-16T09:00:00-07:00\n\nSubject: Re: Invoice INV-2026-0023\nTo: paul.duarte@brightfjord.example\n\nHi Paul, please reissue with our PO number PO-IW-77310. AP can't process it without one.\n\n## EM-0064: Paul Duarte <paul.duarte@brightfjord.example>, 2026-03-17T10:00:00-07:00\n\nSubject: Re: Invoice INV-2026-0023\nTo: gail.morrison@ironwood-fs.example\n\nUpdated invoice with PO-IW-77310 attached. Same invoice number and amount.\n"}
{"id": "email-THR-023", "file": "email-THR-023.md", "source": "email", "title": "Go-live date", "date": "2026-03-13", "text": "# Go-live date\n\nEmail thread THR-023 (external), 3 messages.\n\n## EM-0065: Samuel Reyes <samuel.reyes@ironwood-fs.example>, 2026-03-13T15:00:00-07:00\n\nSubject: Go-live date\nTo: tariq.aziz@brightfjord.example\nCc: patricia.nguyen@ironwood-fs.example, ryan.oneill@brightfjord.example\n\nTariq, after today's kickoff: our quarter-end IT change freeze runs March 16 through March 27, so we can't switch on SSO for a March 16 go-live. Proposing Monday March 30 instead.\n\n## EM-0066: Tariq Aziz <tariq.aziz@brightfjord.example>, 2026-03-13T15:30:00-07:00\n\nSubject: Re: Go-live date\nTo: samuel.reyes@ironwood-fs.example\nCc: patricia.nguyen@ironwood-fs.example, ryan.oneill@brightfjord.example\n\nConfirmed: go-live moves to Monday March 30. Dispatcher and technician training stays in the week of March 23 (it doesn't need SSO).\n\n## EM-0067: Patricia Nguyen <patricia.nguyen@ironwood-fs.example>, 2026-03-13T16:10:00-07:00\n\nSubject: Re: Go-live date\nTo: tariq.aziz@brightfjord.example\n\nAgreed, March 30 it is.\n"}
{"id": "email-THR-024", "file": "email-THR-024.md", "source": "email", "title": "Security review for Brightfjord", "date": "2026-03-16", "text": "# Security review for Brightfjord\n\nEmail thread THR-024 (external), 3 messages.\n\n## EM-0068: Sunita Rao <sunita.rao@marlowe-home.example>, 2026-03-16T09:00:00-07:00\n\nSubject: Security review for Brightfjord\nTo: victor.huang@brightfjord.example\nCc: ryan.oneill@brightfjord.example, andre.wallace@marlowe-home.example\n\nHi Victor, attached are our 120-question security questionnaire and our DPA template. We'll also need a SOC 2 Type II report or equivalent.\n\n## EM-0069: Victor Huang <victor.huang@brightfjord.example>, 2026-03-18T10:30:00-07:00\n\nSubject: Re: Security review for Brightfjord\nTo: sunita.rao@marlowe-home.example\nCc: ryan.oneill@brightfjord.example\n\nThanks Sunita. We have a SOC 2 Type I report; the Type II audit window closes in June. I'll send the Type I under NDA, and our questionnaire answers by March 27.\n\n## EM-0070: Victor Huang <victor.huang@brightfjord.example>, 2026-03-27T16:00:00-07:00\n\nSubject: Re: Security review for Brightfjord\nTo: sunita.rao@marlowe-home.example\nCc: ryan.oneill@brightfjord.example, andre.wallace@marlowe-home.example\n\nCompleted questionnaire attached. Four items are flagged for follow-up: SCIM provisioning, data residency, customer-managed encryption keys, and the penetration test summary.\n"}
{"id": "email-THR-025", "file": "email-THR-025.md", "source": "email", "title": "Board meeting Thursday: draft Q1 numbers", "date": "2026-03-17", "text": "# Board meeting Thursday: draft Q1 numbers\n\nEmail thread THR-025 (internal), 2 messages.\n\n## EM-0071: Tomas Lindqvist <tomas.lindqvist@brightfjord.example>, 2026-03-17T09:00:00-07:00\n\nSubject: Board meeting Thursday: draft Q1 numbers\nTo: ingrid.solberg@brightfjord.example, marcus.okafor@brightfjord.example, priya.raman@brightfjord.example, hannah.becker@brightfjord.example\n\nBoard meeting is Thursday March 19 at 14:00. Draft Q1 numbers as of today:\n\n- New-logo ARR closed in Q1 so far: $168,865.80 across 5 deals (Ironwood is most of it).\n- Churn: Thistle Creek, $7,020 ARR, effective February 28.\n- At risk: Summit Air renewal (April 1); save offer is out.\n- Incidents: two SEV-2s (Routes on February 10, iOS sync on March 3).\n\nTomas\n\n## EM-0072: Priya Raman <priya.raman@brightfjord.example>, 2026-03-17T10:30:00-07:00\n\nSubject: Re: Board meeting Thursday: draft Q1 numbers\nTo: tomas.lindqvist@brightfjord.example\nCc: ingrid.solberg@brightfjord.example\n\nAlder & Finch should close tomorrow, small one. Marlowe won't close in Q1; expect mid-April.\n"}
{"id": "email-THR-026", "file": "email-THR-026.md", "source": "email", "title": "Marlowe 18% request", "date": "2026-03-20", "text": "# Marlowe 18% request\n\nEmail thread THR-026 (internal), 2 messages.\n\n## EM-0073: Ryan O'Neill <ryan.oneill@brightfjord.example>, 2026-03-20T10:00:00-07:00\n\nSubject: Marlowe 18% request\nTo: priya.raman@brightfjord.example\n\nPriya, Marlowe is asking for 18% on 150 Enterprise seats plus Routes. That's inside your 20%. Can you approve?\n\n## EM-0074: Priya Raman <priya.raman@brightfjord.example>, 2026-03-23T08:45:00-07:00\n\nSubject: Re: Marlowe 18% request\nTo: ryan.oneill@brightfjord.example\n\nI'll approve once their security review clears. Hold the paperwork until then.\n"}
{"id": "email-THR-027", "file": "email-THR-027.md", "source": "email", "title": "Handbook update: PTO carryover", "date": "2026-03-26", "text": "# Handbook update: PTO carryover\n\nEmail thread THR-027 (internal), 1 messages.\n\n## EM-0075: Aisha Khan <aisha.khan@brightfjord.example>, 2026-03-26T11:00:00-07:00\n\nSubject: Handbook update: PTO carryover\nTo: all@brightfjord.example\n\nHi all,\n\nOne handbook change: the PTO carryover cap goes up from 5 to 10 days, starting with days carried from 2026 into 2027. Everything else in the PTO policy stays the same. The handbook page in the wiki is updated.\n\nAisha\n"}
{"id": "ticket-TCK-1001", "file": "ticket-TCK-1001.md", "source": "ticket", "title": "How do I add a new technician?", "date": "2026-01-05", "text": "# TCK-1001: How do I add a new technician?\n\n- Account: Copperline Plumbing (ACC-003)\n- Requester: Dale Whitcomb\n- Product: PRD-DISPATCH\n- Priority: P4; status: solved; channel: portal\n- Created: 2026-01-05T09:25:00-08:00\n\n## TCK-1001-C1: Dale Whitcomb, 2026-01-05T09:25:00-08:00\n\nWe hired two techs. Where do I add them so they show on the board?\n\n## TCK-1001-C2: Carlos Mendes, 2026-01-05T11:18:00-08:00\n\nGo to Settings > Team > Invite technician. Each invited tech uses one seat; they appear on the board after accepting the invite.\n\n## TCK-1001-C3: Dale Whitcomb, 2026-01-05T13:46:00-08:00\n\nGot it, thanks.\n\n## TCK-1001-C4: Carlos Mendes, 2026-01-05T14:37:00-08:00\n\nResolution: Both techs accepted and are on the board. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1002", "file": "ticket-TCK-1002.md", "source": "ticket", "title": "SMS job notifications not reaching some customers", "date": "2026-01-06", "text": "# TCK-1002: SMS job notifications not reaching some customers\n\n- Account: Halvorsen Mechanical (ACC-001)\n- Requester: Marco Bellini\n- Product: PRD-DISPATCH\n- Priority: P3; status: solved; channel: chat\n- Created: 2026-01-06T09:15:00-08:00\n\n## TCK-1002-C1: Marco Bellini, 2026-01-06T09:15:00-08:00\n\nAbout 1 in 10 customers say they never got the 'tech on the way' text.\n\n## TCK-1002-C2: Lena Vogel, 2026-01-06T09:33:00-08:00\n\nI checked your SMS log: the failed numbers are landlines, which can't receive texts. You can set those customers to email notifications instead.\n\n## TCK-1002-C3: Marco Bellini, 2026-01-06T10:45:00-08:00\n\nThanks, that worked.\n\n## TCK-1002-C4: Lena Vogel, 2026-01-06T12:32:00-08:00\n\nResolution: Switched landline customers to email notifications. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1003", "file": "ticket-TCK-1003.md", "source": "ticket", "title": "Jobs appear twice in technician calendar", "date": "2026-01-08", "text": "# TCK-1003: Jobs appear twice in technician calendar\n\n- Account: Osprey Fire & Safety (ACC-011)\n- Requester: Leah Fontaine\n- Product: PRD-DISPATCH\n- Priority: P3; status: solved; channel: chat\n- Created: 2026-01-08T12:55:00-08:00\n\n## TCK-1003-C1: Leah Fontaine, 2026-01-08T12:55:00-08:00\n\nSince connecting calendars every job shows up twice in my techs' phone calendars.\n\n## TCK-1003-C2: Lena Vogel, 2026-01-08T13:42:00-08:00\n\nTwo-way sync is enabled on both the personal and the work calendar for these techs. Disable sync on one of them and the duplicates disappear within 15 minutes.\n\n## TCK-1003-C3: Leah Fontaine, 2026-01-08T15:15:00-08:00\n\nThat's fixed it, thanks for your help\n\n## TCK-1003-C4: Lena Vogel, 2026-01-08T16:00:00-08:00\n\nResolution: Duplicates gone after disabling the second sync. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1004", "file": "ticket-TCK-1004.md", "source": "ticket", "title": "Password reset email never arrives", "date": "2026-01-09", "text": "# TCK-1004: Password reset email never arrives\n\n- Account: Copperline Plumbing (ACC-003)\n- Requester: Rosa Jimenez\n- Product: PRD-DISPATCH\n- Priority: P3; status: solved; channel: chat\n- Created: 2026-01-09T11:30:00-08:00\n\n## TCK-1004-C1: Rosa Jimenez, 2026-01-09T11:30:00-08:00\n\nOur office manager requested a reset 4 times, nothing in her inbox.\n\n## TCK-1004-C2: Jack Sullivan, 2026-01-09T11:54:00-08:00\n\nThe reset emails are being quarantined by your mail filter. Please allowlist no-reply@brightfjord.example; I've sent a fresh reset link.\n\n## TCK-1004-C3: Rosa Jimenez, 2026-01-09T14:52:00-08:00\n\ngreat thank you!\n\n## TCK-1004-C4: Jack Sullivan, 2026-01-09T16:30:00-08:00\n\nResolution: Allowlisted; reset worked. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1005", "file": "ticket-TCK-1005.md", "source": "ticket", "title": "Export technician timesheets for payroll", "date": "2026-01-14", "text": "# TCK-1005: Export technician timesheets for payroll\n\n- Account: Pinecrest Pest Control (ACC-008)\n- Requester: Alicia Grove\n- Product: PRD-DISPATCH\n- Priority: P4; status: solved; channel: phone\n- Created: 2026-01-14T07:55:00-08:00\n\n## TCK-1005-C1: Alicia Grove, 2026-01-14T07:55:00-08:00\n\nNeed weekly hours per tech for payroll. Is there an export?\n\n## TCK-1005-C2: Amara Obi, 2026-01-14T09:47:00-08:00\n\nReports > Timesheets > Export CSV gives hours per technician per day. A direct payroll integration isn't available; I've logged your request with product.\n\n## TCK-1005-C3: Alicia Grove, 2026-01-14T10:31:00-08:00\n\nok, done. thanks\n\n## TCK-1005-C4: Amara Obi, 2026-01-14T11:53:00-08:00\n\nResolution: Using CSV export for now; feature request logged. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1006", "file": "ticket-TCK-1006.md", "source": "ticket", "title": "Routes ignores technician skills when reordering", "date": "2026-01-14", "text": "# TCK-1006: Routes ignores technician skills when reordering\n\n- Account: Summit Air Comfort (ACC-005)\n- Requester: Kim Ostrowski\n- Product: PRD-ROUTES\n- Priority: P2; status: solved; channel: email\n- Created: 2026-01-14T08:22:00-08:00\n\n## TCK-1006-C1: Kim Ostrowski, 2026-01-14T08:22:00-08:00\n\nWhen we hit Optimize, Routes moves a boiler repair onto Jason's route even though he isn't certified for boilers. Skills are set on the tech profile. This happened 3 times this week.\n\n## TCK-1006-C2: Amara Obi, 2026-01-14T09:40:00-08:00\n\nHi Kim, thanks for the detail. I can reproduce it: skills are respected when a job is first assigned, but not when Optimize reorders stops across technicians. I've raised it with our Routes engineers.\n\n## TCK-1006-C3: Amara Obi, 2026-01-14T09:44:00-08:00 (internal note)\n\nEscalating to Arjun. Repro: account ACC-005, any job with a required skill + 'optimize across team' checked.\n\n## TCK-1006-C4: Arjun Nair, 2026-01-21T16:10:00-08:00 (internal note)\n\nFound it: the cross-technician pass ignored the skills constraint. Fix is in review.\n\n## TCK-1006-C5: Amara Obi, 2026-01-23T10:05:00-08:00\n\nKim, the fix shipped this morning. Optimize now keeps jobs with required skills on qualified technicians only. Let us know if you see it again.\n\n## TCK-1006-C6: Kim Ostrowski, 2026-01-23T11:30:00-08:00\n\nok great, will watch it tomorow.\n"}
{"id": "ticket-TCK-1007", "file": "ticket-TCK-1007.md", "source": "ticket", "title": "Change colors of job types", "date": "2026-01-14", "text": "# TCK-1007: Change colors of job types\n\n- Account: Kestrel Appliance Repair (ACC-013)\n- Requester: Phil Abernathy\n- Product: PRD-DISPATCH\n- Priority: P4; status: solved; channel: chat\n- Created: 2026-01-14T14:05:00-08:00\n\n## TCK-1007-C1: Phil Abernathy, 2026-01-14T14:05:00-08:00\n\nCan we make emergency jobs red on the board?\n\n## TCK-1007-C2: Lena Vogel, 2026-01-14T15:35:00-08:00\n\nYes: Settings > Job types > pick a type > Color. Changes show for everyone immediately.\n\n## TCK-1007-C3: Phil Abernathy, 2026-01-14T16:50:00-08:00\n\nGot it, thanks.\n\n## TCK-1007-C4: Lena Vogel, 2026-01-14T17:49:00-08:00\n\nResolution: Done, thanks. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1008", "file": "ticket-TCK-1008.md", "source": "ticket", "title": "Technician can't log in on Android", "date": "2026-01-16", "text": "# TCK-1008: Technician can't log in on Android\n\n- Account: Lakeshore Heating & Cooling (ACC-006)\n- Requester: Joan Pruitt\n- Product: PRD-FIELD\n- Priority: P3; status: solved; channel: chat\n- Created: 2026-01-16T08:25:00-08:00\n\n## TCK-1008-C1: Joan Pruitt, 2026-01-16T08:25:00-08:00\n\nOne of our techs gets 'session expired' every time on his Android phone.\n\n## TCK-1008-C2: Amara Obi, 2026-01-16T10:00:00-08:00\n\nHis phone is running Field app 4.9, which no longer supports our current login flow. Updating from the app store fixes it.\n\n## TCK-1008-C3: Joan Pruitt, 2026-01-16T12:27:00-08:00\n\nthx\n\n## TCK-1008-C4: Amara Obi, 2026-01-16T13:05:00-08:00\n\nResolution: Updated to the current version; login works. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1009", "file": "ticket-TCK-1009.md", "source": "ticket", "title": "Photos from the app look blurry in the office", "date": "2026-01-19", "text": "# TCK-1009: Photos from the app look blurry in the office\n\n- Account: Tidewater Pool Service (ACC-012)\n- Requester: Curtis Lyle\n- Product: PRD-FIELD\n- Priority: P4; status: solved; channel: portal\n- Created: 2026-01-19T09:05:00-08:00\n\n## TCK-1009-C1: Curtis Lyle, 2026-01-19T09:05:00-08:00\n\nJob photos look fine on the phone but blurry when we open them on the desktop.\n\n## TCK-1009-C2: Amara Obi, 2026-01-19T10:13:00-08:00\n\nPhotos are compressed on cellular data by default. Turn on Settings > Field app > Upload full resolution photos on Wi-Fi.\n\n## TCK-1009-C3: Curtis Lyle, 2026-01-19T12:33:00-08:00\n\nThanks for the quick help.\n\n## TCK-1009-C4: Amara Obi, 2026-01-19T14:09:00-08:00\n\nResolution: Full-resolution upload enabled. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1010", "file": "ticket-TCK-1010.md", "source": "ticket", "title": "Dispatch board blank for all dispatchers", "date": "2026-01-20", "text": "# TCK-1010: Dispatch board blank for all dispatchers\n\n- Account: Granitevale Elevator Co. (ACC-009)\n- Requester: Nadia Sorensen\n- Product: PRD-DISPATCH\n- Priority: P1; status: solved; channel: email\n- Created: 2026-01-20T06:12:00-08:00\n\n## TCK-1010-C1: Nadia Sorensen, 2026-01-20T06:12:00-08:00\n\nNone of our 14 dispatchers can see the board this morning. Page loads, then white screen. Tried two different browsers. This is urgent, we have elevator entrapment calls coming in.\n\n## TCK-1010-C2: Jack Sullivan, 2026-01-20T07:47:00-08:00\n\nHi Nadia, thanks for reporting. We're looking into it now. For reference, our target first response for P1 is 4 hours, so we're well within SLA.\n\n## TCK-1010-C3: Nadia Sorensen, 2026-01-20T07:52:00-08:00\n\n4 hours?? Our contract says 1 hour for P1. 14 dispatchers are blind right now.\n\n## TCK-1010-C4: Jack Sullivan, 2026-01-20T07:58:00-08:00 (internal note)\n\n@Sofia can you check last night's web release? Granitevale board is blank, console shows a chunk load error.\n\n## TCK-1010-C5: Sofia Marques, 2026-01-20T08:31:00-08:00 (internal note)\n\nOld index.html was cached at the CDN edge after release 2026.01.19 and referenced chunks we had already deleted. Purged the cache. We'll keep previous release chunks for 24h after each deploy from now on.\n\n## TCK-1010-C6: Jack Sullivan, 2026-01-20T08:40:00-08:00\n\nNadia, a fix is deployed. Please hard-refresh (Ctrl+Shift+R) and let me know if the board loads.\n\n## TCK-1010-C7: Nadia Sorensen, 2026-01-20T09:01:00-08:00\n\nBoard is back. thanks. Still want an answer on the SLA.\n\n## TCK-1010-C8: Jack Sullivan, 2026-01-20T09:05:00-08:00\n\nUnderstood. Hannah Becker, our VP Customer Success, will follow up with you by email today.\n"}
{"id": "ticket-TCK-1011", "file": "ticket-TCK-1011.md", "source": "ticket", "title": "Job report PDF shows our old address", "date": "2026-01-22", "text": "# TCK-1011: Job report PDF shows our old address\n\n- Account: Ridgeline Solar Installers (ACC-014)\n- Requester: Ivy Calderon\n- Product: PRD-DISPATCH\n- Priority: P4; status: solved; channel: portal\n- Created: 2026-01-22T11:40:00-08:00\n\n## TCK-1011-C1: Ivy Calderon, 2026-01-22T11:40:00-08:00\n\nThe PDF we send customers after a job still has our old street address.\n\n## TCK-1011-C2: Jack Sullivan, 2026-01-22T13:09:00-08:00\n\nJob report PDFs use the address in Settings > Company profile, not the billing address. Update it there and new reports pick it up.\n\n## TCK-1011-C3: Ivy Calderon, 2026-01-22T14:12:00-08:00\n\ngreat thank you!\n\n## TCK-1011-C4: Jack Sullivan, 2026-01-22T15:16:00-08:00\n\nResolution: Address updated; new PDFs correct. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1012", "file": "ticket-TCK-1012.md", "source": "ticket", "title": "Merge duplicate customer records", "date": "2026-01-22", "text": "# TCK-1012: Merge duplicate customer records\n\n- Account: Pinecrest Pest Control (ACC-008)\n- Requester: Trevor Hale\n- Product: PRD-DISPATCH\n- Priority: P4; status: solved; channel: email\n- Created: 2026-01-22T12:50:00-08:00\n\n## TCK-1012-C1: Trevor Hale, 2026-01-22T12:50:00-08:00\n\nWe have the same customer three times with slightly different names.\n\n## TCK-1012-C2: Lena Vogel, 2026-01-22T14:18:00-08:00\n\nUse Customers > select the records > Merge. Jobs, notes and invoices from all records move to the one you keep.\n\n## TCK-1012-C3: Trevor Hale, 2026-01-22T17:21:00-08:00\n\nThanks, that worked.\n\n## TCK-1012-C4: Lena Vogel, 2026-01-22T18:51:00-08:00\n\nResolution: Merged. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1013", "file": "ticket-TCK-1013.md", "source": "ticket", "title": "Feature request: break blocks on the board", "date": "2026-01-26", "text": "# TCK-1013: Feature request: break blocks on the board\n\n- Account: Meadowbrook Landscaping (ACC-010)\n- Requester: Jenna Hollis\n- Product: PRD-DISPATCH\n- Priority: P4; status: solved; channel: email\n- Created: 2026-01-26T12:10:00-08:00\n\n## TCK-1013-C1: Jenna Hollis, 2026-01-26T12:10:00-08:00\n\nWe'd like to block lunch breaks on the board so dispatchers don't book over them.\n\n## TCK-1013-C2: Amara Obi, 2026-01-26T12:36:00-08:00\n\nThanks for the suggestion. Today you can add a recurring 'Unavailable' block per technician. I've added your vote to the break-blocks feature request.\n\n## TCK-1013-C3: Jenna Hollis, 2026-01-26T15:37:00-08:00\n\nBrilliant, thanks a lot.\n\n## TCK-1013-C4: Amara Obi, 2026-01-26T17:18:00-08:00\n\nResolution: Using unavailable blocks; feature request logged. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1014", "file": "ticket-TCK-1014.md", "source": "ticket", "title": "Two techs routed to the same address", "date": "2026-01-27", "text": "# TCK-1014: Two techs routed to the same address\n\n- Account: Summit Air Comfort (ACC-005)\n- Requester: Kim Ostrowski\n- Product: PRD-ROUTES\n- Priority: P3; status: solved; channel: email\n- Created: 2026-01-27T10:15:00-08:00\n\n## TCK-1014-C1: Kim Ostrowski, 2026-01-27T10:15:00-08:00\n\nRoutes sent two techs to 418 Canyon Rd this morning. Customer was confused. Is this the skills bug again?\n\n## TCK-1014-C2: Amara Obi, 2026-01-27T11:02:00-08:00\n\nHi Kim, looking now.\n\n## TCK-1014-C3: Amara Obi, 2026-01-27T14:20:00-08:00\n\nThis one isn't Routes: the job exists twice because the address was imported twice in your 1/26 customer CSV (two customer records, two recurring jobs). I've merged the duplicate customer records and removed the extra job series.\n\n## TCK-1014-C4: Amara Obi, 2026-02-03T09:00:00-08:00\n\nClosing this out. Kim, reply here if it happens again.\n"}
{"id": "ticket-TCK-1015", "file": "ticket-TCK-1015.md", "source": "ticket", "title": "Map pins in the wrong place for rural addresses", "date": "2026-01-29", "text": "# TCK-1015: Map pins in the wrong place for rural addresses\n\n- Account: Foxglove Cleaning Co. (ACC-015)\n- Requester: Beatrice Wren\n- Product: PRD-DISPATCH\n- Priority: P4; status: solved; channel: email\n- Created: 2026-01-29T11:20:00-08:00\n\n## TCK-1015-C1: Beatrice Wren, 2026-01-29T11:20:00-08:00\n\nFarm addresses out of town land in the middle of the road or the wrong town.\n\n## TCK-1015-C2: Carlos Mendes, 2026-01-29T13:06:00-08:00\n\nRural addresses can geocode to the road centroid. Open the customer, drag the pin to the right spot and save; the corrected location is used for all future jobs.\n\n## TCK-1015-C3: Beatrice Wren, 2026-01-29T15:07:00-08:00\n\nThanks for the quick help.\n\n## TCK-1015-C4: Carlos Mendes, 2026-01-29T15:27:00-08:00\n\nResolution: Pins corrected for 6 customers. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1016", "file": "ticket-TCK-1016.md", "source": "ticket", "title": "Change frequency of a maintenance contract", "date": "2026-01-30", "text": "# TCK-1016: Change frequency of a maintenance contract\n\n- Account: Kestrel Appliance Repair (ACC-013)\n- Requester: Phil Abernathy\n- Product: PRD-DISPATCH\n- Priority: P4; status: solved; channel: portal\n- Created: 2026-01-30T14:35:00-08:00\n\n## TCK-1016-C1: Phil Abernathy, 2026-01-30T14:35:00-08:00\n\nA customer moved from quarterly to monthly filter changes. How do I update the series?\n\n## TCK-1016-C2: Jack Sullivan, 2026-01-30T16:23:00-08:00\n\nOpen any job in the series > Edit series > change the repeat rule. Choose 'this and following' to keep past jobs as they were.\n\n## TCK-1016-C3: Phil Abernathy, 2026-01-30T19:22:00-08:00\n\nThanks for the quick help.\n\n## TCK-1016-C4: Jack Sullivan, 2026-01-30T20:50:00-08:00\n\nResolution: Series updated. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1017", "file": "ticket-TCK-1017.md", "source": "ticket", "title": "Job notes cut off at 500 characters", "date": "2026-02-03", "text": "# TCK-1017: Job notes cut off at 500 characters\n\n- Account: Tidewater Pool Service (ACC-012)\n- Requester: Curtis Lyle\n- Product: PRD-FIELD\n- Priority: P3; status: solved; channel: phone\n- Created: 2026-02-03T13:35:00-08:00\n\n## TCK-1017-C1: Curtis Lyle, 2026-02-03T13:35:00-08:00\n\nTechs write longer notes for warranty work and they get cut off.\n\n## TCK-1017-C2: Carlos Mendes, 2026-02-03T14:43:00-08:00\n\nThe current limit is 500 characters. Engineering is planning to raise it; until then, attach longer notes as a photo or file.\n\n## TCK-1017-C3: Curtis Lyle, 2026-02-03T17:32:00-08:00\n\nMakes sense. Thanks!\n\n## TCK-1017-C4: Carlos Mendes, 2026-02-03T18:54:00-08:00\n\nResolution: Customer is using attachments for long notes; limit increase is on the roadmap. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1018", "file": "ticket-TCK-1018.md", "source": "ticket", "title": "Card declined: how do I switch to bank transfer?", "date": "2026-02-04", "text": "# TCK-1018: Card declined: how do I switch to bank transfer?\n\n- Account: Tidewater Pool Service (ACC-012)\n- Requester: Curtis Lyle\n- Product: None\n- Priority: P3; status: pending; channel: email\n- Created: 2026-02-04T09:05:00-08:00\n\n## TCK-1018-C1: Curtis Lyle, 2026-02-04T09:05:00-08:00\n\nGot an email that my card was declined for INV-2026-0012. Bank replaced my card. Can I pay by bank transfer instead of a card going forward?\n\n## TCK-1018-C2: Lena Vogel, 2026-02-04T10:20:00-08:00\n\nHi Curtis, yes. I've looped in our finance team to send you the ACH authorization form.\n\n## TCK-1018-C3: Paul Duarte, 2026-02-05T08:30:00-08:00\n\nHi Curtis, ACH authorization form attached. Once it's back we'll charge INV-2026-0012 and future invoices by ACH.\n\n## TCK-1018-C4: Paul Duarte, 2026-03-10T09:00:00-07:00\n\nFriendly reminder: we still need the signed ACH form. INV-2026-0012 is now past due.\n"}
{"id": "ticket-TCK-1019", "file": "ticket-TCK-1019.md", "source": "ticket", "title": "CSV import rejects phone numbers with extensions", "date": "2026-02-04", "text": "# TCK-1019: CSV import rejects phone numbers with extensions\n\n- Account: Foxglove Cleaning Co. (ACC-015)\n- Requester: Omar Sadiq\n- Product: PRD-DISPATCH\n- Priority: P3; status: solved; channel: email\n- Created: 2026-02-04T11:40:00-08:00\n\n## TCK-1019-C1: Omar Sadiq, 2026-02-04T11:40:00-08:00\n\nImporting our office customer list fails on every row that has an extension like '+1 555-0142 x12'. Error: invalid phone.\n\n## TCK-1019-C2: Jack Sullivan, 2026-02-04T13:05:00-08:00\n\nHi Omar, confirmed: the importer doesn't accept extensions yet. Workaround: put the extension in the Notes column for now. I've asked engineering for a fix.\n\n## TCK-1019-C3: Jack Sullivan, 2026-02-05T09:15:00-08:00 (internal note)\n\nEscalating to Oliver (owns import service).\n\n## TCK-1019-C4: Oliver Grant, 2026-02-11T15:30:00-08:00 (internal note)\n\nFix merged: importer now accepts 'x', 'ext' and 'ext.' extensions and stores them in the extension field.\n\n## TCK-1019-C5: Jack Sullivan, 2026-02-12T08:50:00-08:00\n\nOmar, extensions are supported in imports now. You can re-run the file as is.\n\n## TCK-1019-C6: Omar Sadiq, 2026-02-12T10:12:00-08:00\n\nWorked, all 212 rows in. Thank you!\n"}
{"id": "ticket-TCK-1020", "file": "ticket-TCK-1020.md", "source": "ticket", "title": "See technician location in real time?", "date": "2026-02-04", "text": "# TCK-1020: See technician location in real time?\n\n- Account: Thistle Creek HVAC (ACC-025)\n- Requester: Gary Pennington\n- Product: PRD-DISPATCH\n- Priority: P4; status: solved; channel: phone\n- Created: 2026-02-04T12:50:00-08:00\n\n## TCK-1020-C1: Gary Pennington, 2026-02-04T12:50:00-08:00\n\nCan dispatchers see where techs are right now?\n\n## TCK-1020-C2: Amara Obi, 2026-02-04T13:31:00-08:00\n\nYes, if location sharing is enabled: Settings > Field app > Share location during working hours. Techs are asked for permission on their phone.\n\n## TCK-1020-C3: Gary Pennington, 2026-02-04T15:00:00-08:00\n\nMakes sense. Thanks!\n\n## TCK-1020-C4: Amara Obi, 2026-02-04T15:23:00-08:00\n\nResolution: Location sharing enabled for all techs. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1021", "file": "ticket-TCK-1021.md", "source": "ticket", "title": "Bulk reschedule because of the storm", "date": "2026-02-06", "text": "# TCK-1021: Bulk reschedule because of the storm\n\n- Account: Lakeshore Heating & Cooling (ACC-006)\n- Requester: Joan Pruitt\n- Product: PRD-DISPATCH\n- Priority: P3; status: solved; channel: portal\n- Created: 2026-02-06T10:05:00-08:00\n\n## TCK-1021-C1: Joan Pruitt, 2026-02-06T10:05:00-08:00\n\nSnowstorm tomorrow. How do I move all of tomorrow's jobs at once?\n\n## TCK-1021-C2: Jack Sullivan, 2026-02-06T11:47:00-08:00\n\nOn the board, switch to day view, Shift-click to select jobs (or Select all), then drag to the new day. Customers get updated notifications automatically.\n\n## TCK-1021-C3: Joan Pruitt, 2026-02-06T14:32:00-08:00\n\nok, done. thanks\n\n## TCK-1021-C4: Jack Sullivan, 2026-02-06T15:41:00-08:00\n\nResolution: Moved 47 jobs to Thursday. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1022", "file": "ticket-TCK-1022.md", "source": "ticket", "title": "Error 'seat limit reached' when inviting", "date": "2026-02-09", "text": "# TCK-1022: Error 'seat limit reached' when inviting\n\n- Account: Tidewater Pool Service (ACC-012)\n- Requester: Curtis Lyle\n- Product: PRD-DISPATCH\n- Priority: P3; status: solved; channel: phone\n- Created: 2026-02-09T14:40:00-08:00\n\n## TCK-1022-C1: Curtis Lyle, 2026-02-09T14:40:00-08:00\n\nTrying to invite a new office person and it says seat limit reached.\n\n## TCK-1022-C2: Lena Vogel, 2026-02-09T15:26:00-08:00\n\nAll seats on your subscription are in use. Your Customer Success Manager can add a seat; note that the Starter plan tops out at 10 users, above that you'd move to Team.\n\n## TCK-1022-C3: Curtis Lyle, 2026-02-09T17:23:00-08:00\n\nThat's fixed it, thanks for your help\n\n## TCK-1022-C4: Lena Vogel, 2026-02-09T18:04:00-08:00\n\nResolution: Customer freed a seat by deactivating a technician who had left. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1023", "file": "ticket-TCK-1023.md", "source": "ticket", "title": "Route optimization spinning forever", "date": "2026-02-10", "text": "# TCK-1023: Route optimization spinning forever\n\n- Account: Summit Air Comfort (ACC-005)\n- Requester: Derek Lamb\n- Product: PRD-ROUTES\n- Priority: P1; status: solved; channel: email\n- Created: 2026-02-10T14:31:00-08:00\n- Incident: INC-2026-001\n\n## TCK-1023-C1: Derek Lamb, 2026-02-10T14:31:00-08:00\n\nOptimize has been spinning for 10+ minutes on every route. Afternoon dispatch is stuck. Again Routes.\n\n## TCK-1023-C2: Carlos Mendes, 2026-02-10T14:38:00-08:00\n\nDerek, we're seeing this across several customers and have opened an incident (INC-2026-001). Workaround: drag jobs manually; manual ordering still works. Updates every 30 minutes.\n\n## TCK-1023-C3: Carlos Mendes, 2026-02-10T15:10:00-08:00\n\nUpdate: engineering has identified a database performance problem affecting routes with more than 40 stops. Working on a fix.\n\n## TCK-1023-C4: Carlos Mendes, 2026-02-10T17:15:00-08:00\n\nResolved as of 17:10 PT. Optimizations complete normally again. We'll share a postmortem.\n\n## TCK-1023-C5: Derek Lamb, 2026-02-10T17:32:00-08:00\n\nThis is the third Routes problem in a month. I want to talk to someone about our contract.\n"}
{"id": "ticket-TCK-1024", "file": "ticket-TCK-1024.md", "source": "ticket", "title": "Optimize times out (Routes)", "date": "2026-02-10", "text": "# TCK-1024: Optimize times out (Routes)\n\n- Account: Halvorsen Mechanical (ACC-001)\n- Requester: Marco Bellini\n- Product: PRD-ROUTES\n- Priority: P1; status: solved; channel: email\n- Created: 2026-02-10T14:40:00-08:00\n- Incident: INC-2026-001\n\n## TCK-1024-C1: Marco Bellini, 2026-02-10T14:40:00-08:00\n\nRoutes optimize returns 'timed out' for our north metro routes. Smaller routes seem fine.\n\n## TCK-1024-C2: Amara Obi, 2026-02-10T14:46:00-08:00\n\nHi Marco, we're on it under incident INC-2026-001. Routes over ~40 stops are affected. Manual ordering works in the meantime.\n\n## TCK-1024-C3: Amara Obi, 2026-02-10T17:18:00-08:00\n\nFixed as of 17:10 PT. You can re-run Optimize on the affected routes.\n\n## TCK-1024-C4: Marco Bellini, 2026-02-10T17:25:00-08:00\n\nConfirmed working. Thx\n"}
{"id": "ticket-TCK-1025", "file": "ticket-TCK-1025.md", "source": "ticket", "title": "routes not optimizing", "date": "2026-02-10", "text": "# TCK-1025: routes not optimizing\n\n- Account: Westvale Fleet Services (ACC-020)\n- Requester: Carla Medina\n- Product: PRD-ROUTES\n- Priority: P2; status: solved; channel: email\n- Created: 2026-02-10T14:52:00-08:00\n- Incident: INC-2026-001\n\n## TCK-1025-C1: Carla Medina, 2026-02-10T14:52:00-08:00\n\nhi, optimize button does nothing for the big truck routes. help pls\n\n## TCK-1025-C2: Jack Sullivan, 2026-02-10T15:05:00-08:00\n\nHi Carla, this is a known issue we're working on right now (INC-2026-001). Please order the big routes manually for today.\n\n## TCK-1025-C3: Jack Sullivan, 2026-02-10T17:20:00-08:00\n\nCarla, this is fixed. Optimize works again on all routes.\n"}
{"id": "ticket-TCK-1026", "file": "ticket-TCK-1026.md", "source": "ticket", "title": "Routes errors on install crews", "date": "2026-02-10", "text": "# TCK-1026: Routes errors on install crews\n\n- Account: Ridgeline Solar Installers (ACC-014)\n- Requester: Ivy Calderon\n- Product: PRD-ROUTES\n- Priority: P2; status: solved; channel: email\n- Created: 2026-02-10T15:10:00-08:00\n- Incident: INC-2026-001\n\n## TCK-1026-C1: Ivy Calderon, 2026-02-10T15:10:00-08:00\n\nGetting 'Optimization failed, try again later' on our 3 install crews. We just bought Routes last month so not a great look.\n\n## TCK-1026-C2: Lena Vogel, 2026-02-10T15:22:00-08:00\n\nHi Ivy, sorry about this. It's part of an ongoing incident (INC-2026-001); our engineers are on it. Manual ordering is the workaround for now.\n\n## TCK-1026-C3: Lena Vogel, 2026-02-10T17:24:00-08:00\n\nIvy, the incident is resolved and optimization works again.\n"}
{"id": "ticket-TCK-1027", "file": "ticket-TCK-1027.md", "source": "ticket", "title": "Optimize stuck", "date": "2026-02-10", "text": "# TCK-1027: Optimize stuck\n\n- Account: Lakeshore Heating & Cooling (ACC-006)\n- Requester: Tom Ashby\n- Product: PRD-ROUTES\n- Priority: P2; status: solved; channel: email\n- Created: 2026-02-10T15:25:00-08:00\n- Incident: INC-2026-001\n\n## TCK-1027-C1: Tom Ashby, 2026-02-10T15:25:00-08:00\n\nOptimize stuck on our Tuesday routes.\n\n## TCK-1027-C2: Jack Sullivan, 2026-02-10T15:31:00-08:00\n\nHi Tom, we're working an incident affecting Routes (INC-2026-001). Will update you when fixed.\n\n## TCK-1027-C3: Jack Sullivan, 2026-02-10T17:21:00-08:00\n\nTom, it's fixed.\n"}
{"id": "ticket-TCK-1028", "file": "ticket-TCK-1028.md", "source": "ticket", "title": "Set up an after-hours emergency job type", "date": "2026-02-11", "text": "# TCK-1028: Set up an after-hours emergency job type\n\n- Account: Foxglove Cleaning Co. (ACC-015)\n- Requester: Omar Sadiq\n- Product: PRD-DISPATCH\n- Priority: P4; status: solved; channel: chat\n- Created: 2026-02-11T09:30:00-08:00\n\n## TCK-1028-C1: Omar Sadiq, 2026-02-11T09:30:00-08:00\n\nWe want a job type for after-hours emergencies that only goes to on-call techs.\n\n## TCK-1028-C2: Carlos Mendes, 2026-02-11T10:58:00-08:00\n\nCreate a job type 'Emergency (after hours)' and restrict it to the on-call technician group under Settings > Job types > Eligible technicians.\n\n## TCK-1028-C3: Omar Sadiq, 2026-02-11T12:32:00-08:00\n\ngreat thank you!\n\n## TCK-1028-C4: Carlos Mendes, 2026-02-11T13:01:00-08:00\n\nResolution: Configured. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1029", "file": "ticket-TCK-1029.md", "source": "ticket", "title": "Customer signature not captured on tablets", "date": "2026-02-11", "text": "# TCK-1029: Customer signature not captured on tablets\n\n- Account: Tidewater Pool Service (ACC-012)\n- Requester: Curtis Lyle\n- Product: PRD-FIELD\n- Priority: P3; status: solved; channel: phone\n- Created: 2026-02-11T13:55:00-08:00\n\n## TCK-1029-C1: Curtis Lyle, 2026-02-11T13:55:00-08:00\n\nSignature box stays blank on our iOS tablets.\n\n## TCK-1029-C2: Carlos Mendes, 2026-02-11T15:07:00-08:00\n\nThe signature pad needs the latest tablet OS version and Field app. After updating both, signatures capture normally.\n\n## TCK-1029-C3: Curtis Lyle, 2026-02-11T18:44:00-08:00\n\nThanks, that worked.\n\n## TCK-1029-C4: Carlos Mendes, 2026-02-11T19:35:00-08:00\n\nResolution: Fixed after update. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1030", "file": "ticket-TCK-1030.md", "source": "ticket", "title": "Invoice INV-2026-0013 price looks wrong", "date": "2026-02-12", "text": "# TCK-1030: Invoice INV-2026-0013 price looks wrong\n\n- Account: Lakeshore Heating & Cooling (ACC-006)\n- Requester: Joan Pruitt\n- Product: None\n- Priority: P3; status: solved; channel: email\n- Created: 2026-02-12T09:20:00-08:00\n\n## TCK-1030-C1: Joan Pruitt, 2026-02-12T09:20:00-08:00\n\nOur renewal invoice INV-2026-0013 charges $49 for all 50 users. Our order form says the 40 existing users stay at $45 and only the 10 new ones are $49. Please correct before I can pay.\n\n## TCK-1030-C2: Lena Vogel, 2026-02-12T10:02:00-08:00\n\nHi Joan, thanks for catching this. I've passed it to our controller.\n\n## TCK-1030-C3: Lena Vogel, 2026-02-12T10:05:00-08:00 (internal note)\n\n@Paul invoice used the new price list for all seats; see DEAL-006 order form.\n\n## TCK-1030-C4: Paul Duarte, 2026-02-16T11:15:00-08:00\n\nHi Joan, you're right. We've voided INV-2026-0013 and issued INV-2026-0016: 40 seats at $45 and 10 seats at $49, total $27,480.00 for the year. Apologies for the mix-up.\n\n## TCK-1030-C5: Joan Pruitt, 2026-02-16T13:40:00-08:00\n\nReceived, looks correct now.\n"}
{"id": "ticket-TCK-1031", "file": "ticket-TCK-1031.md", "source": "ticket", "title": "API returns 429 Too Many Requests", "date": "2026-02-13", "text": "# TCK-1031: API returns 429 Too Many Requests\n\n- Account: Foxglove Cleaning Co. (ACC-015)\n- Requester: Beatrice Wren\n- Product: PRD-DISPATCH\n- Priority: P3; status: solved; channel: email\n- Created: 2026-02-13T09:25:00-08:00\n\n## TCK-1031-C1: Beatrice Wren, 2026-02-13T09:25:00-08:00\n\nOur nightly sync script gets 429 errors halfway through.\n\n## TCK-1031-C2: Lena Vogel, 2026-02-13T10:00:00-08:00\n\nThe API limit is 600 requests per minute per account. Use the batch endpoints (up to 100 jobs per call) or add a short delay between requests.\n\n## TCK-1031-C3: Beatrice Wren, 2026-02-13T11:07:00-08:00\n\nGot it, thanks.\n\n## TCK-1031-C4: Lena Vogel, 2026-02-13T11:48:00-08:00\n\nResolution: Switched to batch endpoints; no more 429s. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1032", "file": "ticket-TCK-1032.md", "source": "ticket", "title": "Technicians see jobs from the other branch", "date": "2026-02-17", "text": "# TCK-1032: Technicians see jobs from the other branch\n\n- Account: Westvale Fleet Services (ACC-020)\n- Requester: Carla Medina\n- Product: PRD-DISPATCH\n- Priority: P3; status: solved; channel: email\n- Created: 2026-02-17T07:35:00-08:00\n\n## TCK-1032-C1: Carla Medina, 2026-02-17T07:35:00-08:00\n\nTechs in our north branch can see south branch jobs.\n\n## TCK-1032-C2: Carlos Mendes, 2026-02-17T09:08:00-08:00\n\nBranch visibility is controlled per role. Set Settings > Roles > Technician > Visibility to 'own branch only'.\n\n## TCK-1032-C3: Carla Medina, 2026-02-17T09:57:00-08:00\n\nBrilliant, thanks a lot.\n\n## TCK-1032-C4: Carlos Mendes, 2026-02-17T11:35:00-08:00\n\nResolution: Visibility restricted. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1033", "file": "ticket-TCK-1033.md", "source": "ticket", "title": "Webhook retries hammering our endpoint after 500s", "date": "2026-02-18", "text": "# TCK-1033: Webhook retries hammering our endpoint after 500s\n\n- Account: Juniper Water Treatment (ACC-019)\n- Requester: Felix Brandt\n- Product: PRD-DISPATCH\n- Priority: P2; status: solved; channel: email\n- Created: 2026-02-18T10:30:00-08:00\n\n## TCK-1033-C1: Felix Brandt, 2026-02-18T10:30:00-08:00\n\nWhen our endpoint returned 500 for a few minutes this morning, your webhooks retried ~40 times per event within a minute. That made the outage worse. Is there backoff?\n\n## TCK-1033-C2: Amara Obi, 2026-02-18T11:15:00-08:00\n\nHi Felix, thanks, that's not expected behaviour. Retries should back off. I'm escalating to engineering.\n\n## TCK-1033-C3: Amara Obi, 2026-02-19T09:00:00-08:00 (internal note)\n\nEscalated to Oliver: webhook retry loop with no delay on 5xx.\n\n## TCK-1033-C4: Oliver Grant, 2026-02-24T16:40:00-08:00 (internal note)\n\nConfirmed: retries are immediate on 5xx. Draft PR for exponential backoff is up, needs tests.\n\n## TCK-1033-C5: Leo Fischer, 2026-02-27T10:00:00-08:00 (internal note)\n\nOliver's last day is today. Reassigning the escalation to Ben Carter; Ben, the draft PR is linked in the eng channel.\n\n## TCK-1033-C6: Ben Carter, 2026-03-06T15:20:00-08:00 (internal note)\n\nBackoff shipped: exponential with jitter, max 8 attempts over ~2 hours.\n\n## TCK-1033-C7: Amara Obi, 2026-03-09T09:10:00-07:00\n\nFelix, webhook retries now use exponential backoff with jitter (up to 8 attempts over about two hours). Sorry for the trouble.\n\n## TCK-1033-C8: Felix Brandt, 2026-03-09T10:45:00-07:00\n\nPerfect, thanks for following up.\n"}
{"id": "ticket-TCK-1034", "file": "ticket-TCK-1034.md", "source": "ticket", "title": "Import our price book", "date": "2026-02-19", "text": "# TCK-1034: Import our price book\n\n- Account: Redfern Roofing (ACC-007)\n- Requester: Shane Redfern\n- Product: PRD-DISPATCH\n- Priority: P4; status: solved; channel: email\n- Created: 2026-02-19T08:25:00-08:00\n\n## TCK-1034-C1: Shane Redfern, 2026-02-19T08:25:00-08:00\n\nCan we bulk-import parts and labor prices?\n\n## TCK-1034-C2: Lena Vogel, 2026-02-19T08:53:00-08:00\n\nYes: Settings > Price book > Import, using the CSV template on that page. Up to 5,000 items per file.\n\n## TCK-1034-C3: Shane Redfern, 2026-02-19T10:41:00-08:00\n\nThanks for the quick help.\n\n## TCK-1034-C4: Lena Vogel, 2026-02-19T12:06:00-08:00\n\nResolution: Imported 1,240 items. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1035", "file": "ticket-TCK-1035.md", "source": "ticket", "title": "First-time fix rate doesn't match our numbers", "date": "2026-02-20", "text": "# TCK-1035: First-time fix rate doesn't match our numbers\n\n- Account: Bluestem Electric (ACC-002)\n- Requester: Colin Marsh\n- Product: PRD-DISPATCH\n- Priority: P4; status: solved; channel: email\n- Created: 2026-02-20T09:35:00-08:00\n\n## TCK-1035-C1: Colin Marsh, 2026-02-20T09:35:00-08:00\n\nYour report says 78% first-time fix, our spreadsheet says 84%.\n\n## TCK-1035-C2: Jack Sullivan, 2026-02-20T11:30:00-08:00\n\nThe report counts a job as a first-time fix only if no follow-up job is created for the same customer and asset within 14 days. Your spreadsheet likely uses 7 days.\n\n## TCK-1035-C3: Colin Marsh, 2026-02-20T13:12:00-08:00\n\nThanks for the quick help.\n\n## TCK-1035-C4: Jack Sullivan, 2026-02-20T14:49:00-08:00\n\nResolution: Customer agrees with the definition difference. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1036", "file": "ticket-TCK-1036.md", "source": "ticket", "title": "Notice period for cancelling?", "date": "2026-02-24", "text": "# TCK-1036: Notice period for cancelling?\n\n- Account: Summit Air Comfort (ACC-005)\n- Requester: Derek Lamb\n- Product: None\n- Priority: P3; status: solved; channel: email\n- Created: 2026-02-24T08:10:00-08:00\n\n## TCK-1036-C1: Derek Lamb, 2026-02-24T08:10:00-08:00\n\nWhat's the notice period for not renewing? Our term ends March 31.\n\n## TCK-1036-C2: Carlos Mendes, 2026-02-24T09:05:00-08:00\n\nHi Derek, the notice period is 30 days before the renewal date. I'm sorry Routes has caused you problems. I'm connecting you with Tariq Aziz, your Customer Success Manager, who can walk through options.\n\n## TCK-1036-C3: Carlos Mendes, 2026-02-24T09:07:00-08:00 (internal note)\n\nTariq, churn risk. See the Routes tickets from Jan/Feb.\n\n## TCK-1036-C4: Tariq Aziz, 2026-03-27T16:00:00-07:00 (internal note)\n\nClosing: Summit Air renewed today (see renewal deal).\n"}
{"id": "ticket-TCK-1037", "file": "ticket-TCK-1037.md", "source": "ticket", "title": "Enable two-factor authentication for admins", "date": "2026-02-24", "text": "# TCK-1037: Enable two-factor authentication for admins\n\n- Account: Granitevale Elevator Co. (ACC-009)\n- Requester: Nadia Sorensen\n- Product: PRD-DISPATCH\n- Priority: P3; status: solved; channel: portal\n- Created: 2026-02-24T09:10:00-08:00\n\n## TCK-1037-C1: Nadia Sorensen, 2026-02-24T09:10:00-08:00\n\nOur insurer asks for 2FA on admin accounts.\n\n## TCK-1037-C2: Carlos Mendes, 2026-02-24T10:14:00-08:00\n\nSettings > Security > Require two-factor for admins. Admins are prompted to set it up at next login.\n\n## TCK-1037-C3: Nadia Sorensen, 2026-02-24T13:25:00-08:00\n\nThanks, that worked.\n\n## TCK-1037-C4: Carlos Mendes, 2026-02-24T15:14:00-08:00\n\nResolution: 2FA enforced for admins. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1038", "file": "ticket-TCK-1038.md", "source": "ticket", "title": "Field app drains battery", "date": "2026-02-26", "text": "# TCK-1038: Field app drains battery\n\n- Account: Tidewater Pool Service (ACC-012)\n- Requester: Curtis Lyle\n- Product: PRD-FIELD\n- Priority: P3; status: solved; channel: email\n- Created: 2026-02-26T12:50:00-08:00\n\n## TCK-1038-C1: Curtis Lyle, 2026-02-26T12:50:00-08:00\n\nTechs say the app kills their battery by 2pm.\n\n## TCK-1038-C2: Amara Obi, 2026-02-26T14:22:00-08:00\n\nHigh-accuracy location is on. Switching Settings > Field app > Location accuracy to 'Balanced' cuts battery use significantly.\n\n## TCK-1038-C3: Curtis Lyle, 2026-02-26T15:58:00-08:00\n\nBrilliant, thanks a lot.\n\n## TCK-1038-C4: Amara Obi, 2026-02-26T16:50:00-08:00\n\nResolution: Changed to Balanced; techs report better battery. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1039", "file": "ticket-TCK-1039.md", "source": "ticket", "title": "Need full export of our job history before we leave", "date": "2026-02-26", "text": "# TCK-1039: Need full export of our job history before we leave\n\n- Account: Thistle Creek HVAC (ACC-025)\n- Requester: Tina Pennington\n- Product: PRD-DISPATCH\n- Priority: P3; status: solved; channel: email\n- Created: 2026-02-26T13:00:00-08:00\n\n## TCK-1039-C1: Tina Pennington, 2026-02-26T13:00:00-08:00\n\nWe're not renewing. Please send a full export of jobs, customers and invoices since 2023 before our account closes Feb 28.\n\n## TCK-1039-C2: Lena Vogel, 2026-02-26T14:10:00-08:00\n\nHi Tina, sorry to see you go. I've started the export; you'll get a download link by tomorrow.\n\n## TCK-1039-C3: Lena Vogel, 2026-02-27T10:30:00-08:00\n\nThe export is ready (customers, jobs, job notes, job invoices as CSV). The link expires in 7 days. Your data is deleted 30 days after closure per our retention policy.\n\n## TCK-1039-C4: Tina Pennington, 2026-02-27T11:02:00-08:00\n\nGot it, thank you Lena. Gary says thanks too.\n"}
{"id": "ticket-TCK-1040", "file": "ticket-TCK-1040.md", "source": "ticket", "title": "Wrong time on jobs for our new branch", "date": "2026-02-27", "text": "# TCK-1040: Wrong time on jobs for our new branch\n\n- Account: Osprey Fire & Safety (ACC-011)\n- Requester: Raymond Castillo\n- Product: PRD-DISPATCH\n- Priority: P3; status: solved; channel: chat\n- Created: 2026-02-27T07:05:00-08:00\n\n## TCK-1040-C1: Raymond Castillo, 2026-02-27T07:05:00-08:00\n\nWe opened a second branch in another state and its jobs show an hour off.\n\n## TCK-1040-C2: Amara Obi, 2026-02-27T07:59:00-08:00\n\nThe new branch inherited your head office time zone. Set its own time zone under Settings > Branches and existing jobs display correctly.\n\n## TCK-1040-C3: Raymond Castillo, 2026-02-27T11:08:00-08:00\n\nMakes sense. Thanks!\n\n## TCK-1040-C4: Amara Obi, 2026-02-27T12:31:00-08:00\n\nResolution: Branch time zone corrected. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1041", "file": "ticket-TCK-1041.md", "source": "ticket", "title": "Provisioning the 40 new users via SSO", "date": "2026-03-02", "text": "# TCK-1041: Provisioning the 40 new users via SSO\n\n- Account: Halvorsen Mechanical (ACC-001)\n- Requester: Brenda Tolliver\n- Product: PRD-DISPATCH\n- Priority: P3; status: solved; channel: email\n- Created: 2026-03-02T09:30:00-08:00\n\n## TCK-1041-C1: Brenda Tolliver, 2026-03-02T09:30:00-08:00\n\nWe're adding 40 users from the expansion. Do you support SCIM so they're created automatically from our directory?\n\n## TCK-1041-C2: Amara Obi, 2026-03-02T10:15:00-08:00\n\nHi Brenda, SCIM isn't supported yet. You can turn on just-in-time provisioning: users are created at first SAML login with the role mapped from a group claim.\n\n## TCK-1041-C3: Brenda Tolliver, 2026-03-05T15:00:00-08:00\n\nJIT on, 37 of 40 have logged in. the other 3 are on leave.\n\n## TCK-1041-C4: Amara Obi, 2026-03-06T09:00:00-08:00\n\nGreat, closing this. SCIM is on the roadmap; I've added Halvorsen to the request.\n"}
{"id": "ticket-TCK-1042", "file": "ticket-TCK-1042.md", "source": "ticket", "title": "Remove a former employee's account", "date": "2026-03-02", "text": "# TCK-1042: Remove a former employee's account\n\n- Account: Westvale Fleet Services (ACC-020)\n- Requester: Carla Medina\n- Product: PRD-DISPATCH\n- Priority: P4; status: solved; channel: email\n- Created: 2026-03-02T12:40:00-08:00\n\n## TCK-1042-C1: Carla Medina, 2026-03-02T12:40:00-08:00\n\nOne of our techs left. How do we remove him and free the seat?\n\n## TCK-1042-C2: Jack Sullivan, 2026-03-02T13:34:00-08:00\n\nSettings > Team > select user > Deactivate. His job history stays; the seat is freed immediately.\n\n## TCK-1042-C3: Carla Medina, 2026-03-02T17:04:00-08:00\n\nBrilliant, thanks a lot.\n\n## TCK-1042-C4: Jack Sullivan, 2026-03-02T18:07:00-08:00\n\nResolution: Deactivated. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1043", "file": "ticket-TCK-1043.md", "source": "ticket", "title": "Completed jobs not showing up in office", "date": "2026-03-03", "text": "# TCK-1043: Completed jobs not showing up in office\n\n- Account: Copperline Plumbing (ACC-003)\n- Requester: Rosa Jimenez\n- Product: PRD-FIELD\n- Priority: P2; status: solved; channel: email\n- Created: 2026-03-03T08:05:00-08:00\n- Incident: INC-2026-002\n\n## TCK-1043-C1: Rosa Jimenez, 2026-03-03T08:05:00-08:00\n\nOur techs finished jobs yesterday afternoon on their iOS phones but the office still shows them open. Android guy is fine.\n\n## TCK-1043-C2: Carlos Mendes, 2026-03-03T08:50:00-08:00\n\nHi Rosa, we're seeing this on iOS after yesterday's app update (4.12.0) and have opened an incident (INC-2026-002). Jobs are stored safely on the phones; don't uninstall the app.\n\n## TCK-1043-C3: Carlos Mendes, 2026-03-04T14:10:00-08:00\n\nField app 4.12.1 is live in the app store. After updating, the queued jobs upload automatically.\n\n## TCK-1043-C4: Rosa Jimenez, 2026-03-04T16:45:00-08:00\n\nUpdated, all jobs showed up. phew\n"}
{"id": "ticket-TCK-1044", "file": "ticket-TCK-1044.md", "source": "ticket", "title": "Booking confirmation emails go to spam", "date": "2026-03-03", "text": "# TCK-1044: Booking confirmation emails go to spam\n\n- Account: Osprey Fire & Safety (ACC-011)\n- Requester: Leah Fontaine\n- Product: PRD-PORTAL\n- Priority: P3; status: solved; channel: phone\n- Created: 2026-03-03T08:35:00-08:00\n\n## TCK-1044-C1: Leah Fontaine, 2026-03-03T08:35:00-08:00\n\nCustomers say portal confirmations land in spam.\n\n## TCK-1044-C2: Jack Sullivan, 2026-03-03T10:05:00-08:00\n\nSet up a custom sending domain under Portal > Email with the SPF and DKIM records shown there. Deliverability improves once DNS has propagated.\n\n## TCK-1044-C3: Leah Fontaine, 2026-03-03T13:37:00-08:00\n\nThat did it. appreciate it\n\n## TCK-1044-C4: Jack Sullivan, 2026-03-03T14:51:00-08:00\n\nResolution: DNS records added; confirmations reaching inboxes. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1045", "file": "ticket-TCK-1045.md", "source": "ticket", "title": "iOS app not syncing completed jobs", "date": "2026-03-03", "text": "# TCK-1045: iOS app not syncing completed jobs\n\n- Account: Pinecrest Pest Control (ACC-008)\n- Requester: Trevor Hale\n- Product: PRD-FIELD\n- Priority: P2; status: solved; channel: email\n- Created: 2026-03-03T08:40:00-08:00\n- Incident: INC-2026-002\n\n## TCK-1045-C1: Trevor Hale, 2026-03-03T08:40:00-08:00\n\nSeveral of my techs on iOS say jobs are stuck 'waiting to upload'.\n\n## TCK-1045-C2: Jack Sullivan, 2026-03-03T09:02:00-08:00\n\nHi Trevor, known issue with iOS app 4.12.0 (INC-2026-002). Data is safe on the devices. A fix is being submitted for app store review now.\n\n## TCK-1045-C3: Jack Sullivan, 2026-03-04T14:12:00-08:00\n\n4.12.1 is out. Have techs update and open the app on a connection; queued jobs upload.\n"}
{"id": "ticket-TCK-1046", "file": "ticket-TCK-1046.md", "source": "ticket", "title": "jobs stuck waiting to upload", "date": "2026-03-03", "text": "# TCK-1046: jobs stuck waiting to upload\n\n- Account: Kestrel Appliance Repair (ACC-013)\n- Requester: Phil Abernathy\n- Product: PRD-FIELD\n- Priority: P2; status: solved; channel: email\n- Created: 2026-03-03T09:15:00-08:00\n- Incident: INC-2026-002\n\n## TCK-1046-C1: Phil Abernathy, 2026-03-03T09:15:00-08:00\n\njobs stuck waiting to upload on my phone since yesterday\n\n## TCK-1046-C2: Lena Vogel, 2026-03-03T09:30:00-08:00\n\nHi Phil, this is an iOS issue in app version 4.12.0 that we're fixing now (INC-2026-002). Please keep the jobs on your phone; nothing is lost.\n\n## TCK-1046-C3: Lena Vogel, 2026-03-04T14:15:00-08:00\n\nPhil, please update to 4.12.1 from the app store; the stuck jobs will upload.\n"}
{"id": "ticket-TCK-1047", "file": "ticket-TCK-1047.md", "source": "ticket", "title": "iOS field app sync failure", "date": "2026-03-03", "text": "# TCK-1047: iOS field app sync failure\n\n- Account: Ridgeline Solar Installers (ACC-014)\n- Requester: Ken Ulrich\n- Product: PRD-FIELD\n- Priority: P2; status: solved; channel: email\n- Created: 2026-03-03T09:50:00-08:00\n- Incident: INC-2026-002\n\n## TCK-1047-C1: Ken Ulrich, 2026-03-03T09:50:00-08:00\n\nOur installers' iOS tablets aren't syncing completed jobs since the update. Second incident for us in a month.\n\n## TCK-1047-C2: Amara Obi, 2026-03-03T10:01:00-08:00\n\nHi Ken, confirmed, this is INC-2026-002 (iOS 4.12.0). A fixed build is in app store review. Data is safe on the devices.\n\n## TCK-1047-C3: Amara Obi, 2026-03-04T14:18:00-08:00\n\nKen, 4.12.1 is available. Update and the queued jobs will sync.\n"}
{"id": "ticket-TCK-1048", "file": "ticket-TCK-1048.md", "source": "ticket", "title": "Limit portal bookings to business hours", "date": "2026-03-05", "text": "# TCK-1048: Limit portal bookings to business hours\n\n- Account: Osprey Fire & Safety (ACC-011)\n- Requester: Raymond Castillo\n- Product: PRD-PORTAL\n- Priority: P4; status: solved; channel: chat\n- Created: 2026-03-05T10:50:00-08:00\n\n## TCK-1048-C1: Raymond Castillo, 2026-03-05T10:50:00-08:00\n\nCustomers book 6am slots. We start at 8.\n\n## TCK-1048-C2: Jack Sullivan, 2026-03-05T11:25:00-08:00\n\nPortal > Availability lets you set bookable hours per weekday and a minimum notice period.\n\n## TCK-1048-C3: Raymond Castillo, 2026-03-05T12:41:00-08:00\n\nThat did it. appreciate it\n\n## TCK-1048-C4: Jack Sullivan, 2026-03-05T13:54:00-08:00\n\nResolution: Availability rules set. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1049", "file": "ticket-TCK-1049.md", "source": "ticket", "title": "Recurring jobs show an hour late since Sunday", "date": "2026-03-09", "text": "# TCK-1049: Recurring jobs show an hour late since Sunday\n\n- Account: Bluestem Electric (ACC-002)\n- Requester: Colin Marsh\n- Product: PRD-DISPATCH\n- Priority: P2; status: solved; channel: email\n- Created: 2026-03-09T07:10:00-07:00\n\n## TCK-1049-C1: Colin Marsh, 2026-03-09T07:10:00-07:00\n\nAll our recurring maintenance jobs moved from 8:00 to 9:00 this morning. One-off jobs look right. Daylight saving??\n\n## TCK-1049-C2: Jack Sullivan, 2026-03-09T07:40:00-07:00\n\nHi Colin, yes, it looks DST-related: recurring series created before the change were stored with the winter UTC offset. Escalating to engineering now.\n\n## TCK-1049-C3: Jack Sullivan, 2026-03-09T07:45:00-07:00 (internal note)\n\n@Lucy recurring series shifted +1h after DST. Bluestem + Osprey portal so far.\n\n## TCK-1049-C4: Lucy Park, 2026-03-10T11:20:00-07:00 (internal note)\n\nFix deployed and existing series repaired.\n\n## TCK-1049-C5: Jack Sullivan, 2026-03-10T11:40:00-07:00\n\nColin, the fix is live and your recurring jobs are back at their original local times.\n"}
{"id": "ticket-TCK-1050", "file": "ticket-TCK-1050.md", "source": "ticket", "title": "Portal booking slots off by one hour", "date": "2026-03-09", "text": "# TCK-1050: Portal booking slots off by one hour\n\n- Account: Osprey Fire & Safety (ACC-011)\n- Requester: Leah Fontaine\n- Product: PRD-PORTAL\n- Priority: P2; status: solved; channel: email\n- Created: 2026-03-09T08:30:00-07:00\n\n## TCK-1050-C1: Leah Fontaine, 2026-03-09T08:30:00-07:00\n\nCustomers booking on our portal see 7am slots when we open at 8. Started today.\n\n## TCK-1050-C2: Amara Obi, 2026-03-09T09:00:00-07:00\n\nHi Leah, same root cause as a daylight-saving issue we're fixing now. I'll update you as soon as it's deployed.\n\n## TCK-1050-C3: Amara Obi, 2026-03-10T11:45:00-07:00\n\nLeah, fixed: portal availability is back to your configured hours.\n"}
{"id": "ticket-TCK-1051", "file": "ticket-TCK-1051.md", "source": "ticket", "title": "Board slow with 300+ jobs", "date": "2026-03-09", "text": "# TCK-1051: Board slow with 300+ jobs\n\n- Account: Bluestem Electric (ACC-002)\n- Requester: Ruth Adeyemi\n- Product: PRD-DISPATCH\n- Priority: P3; status: solved; channel: chat\n- Created: 2026-03-09T11:30:00-07:00\n\n## TCK-1051-C1: Ruth Adeyemi, 2026-03-09T11:30:00-07:00\n\nOn busy days the board takes 10 seconds to load and drags are laggy.\n\n## TCK-1051-C2: Amara Obi, 2026-03-09T12:06:00-07:00\n\nThanks, I've shared this with engineering. Filtering the board by branch helps in the meantime. A performance update for large boards is planned this month.\n\n## TCK-1051-C3: Ruth Adeyemi, 2026-03-09T15:19:00-07:00\n\nok, done. thanks\n\n## TCK-1051-C4: Amara Obi, 2026-03-09T16:43:00-07:00\n\nResolution: Customer is filtering by branch for now; large-board performance work is scheduled. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1052", "file": "ticket-TCK-1052.md", "source": "ticket", "title": "Need your W-9 for vendor setup", "date": "2026-03-10", "text": "# TCK-1052: Need your W-9 for vendor setup\n\n- Account: Copperline Plumbing (ACC-003)\n- Requester: Rosa Jimenez\n- Product: None\n- Priority: P4; status: solved; channel: phone\n- Created: 2026-03-10T12:35:00-07:00\n\n## TCK-1052-C1: Rosa Jimenez, 2026-03-10T12:35:00-07:00\n\nOur AP team needs a W-9 before they can pay invoices.\n\n## TCK-1052-C2: Lena Vogel, 2026-03-10T13:23:00-07:00\n\nForwarded to our finance team; they'll send it today.\n\n## TCK-1052-C3: Rosa Jimenez, 2026-03-10T14:41:00-07:00\n\nGot it, thanks.\n\n## TCK-1052-C4: Lena Vogel, 2026-03-10T15:17:00-07:00\n\nResolution: W-9 sent by finance. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1053", "file": "ticket-TCK-1053.md", "source": "ticket", "title": "Change billing contact email", "date": "2026-03-12", "text": "# TCK-1053: Change billing contact email\n\n- Account: Copperline Plumbing (ACC-003)\n- Requester: Rosa Jimenez\n- Product: None\n- Priority: P4; status: solved; channel: email\n- Created: 2026-03-12T10:55:00-07:00\n\n## TCK-1053-C1: Rosa Jimenez, 2026-03-12T10:55:00-07:00\n\nPlease send invoices to ap@ our domain instead of me.\n\n## TCK-1053-C2: Amara Obi, 2026-03-12T12:03:00-07:00\n\nUpdated the billing contact. Future invoices go to the new address.\n\n## TCK-1053-C3: Rosa Jimenez, 2026-03-12T14:31:00-07:00\n\ngreat thank you!\n\n## TCK-1053-C4: Amara Obi, 2026-03-12T15:28:00-07:00\n\nResolution: Done. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1054", "file": "ticket-TCK-1054.md", "source": "ticket", "title": "SAML SSO configuration for go-live", "date": "2026-03-13", "text": "# TCK-1054: SAML SSO configuration for go-live\n\n- Account: Ironwood Facility Services (ACC-004)\n- Requester: Samuel Reyes\n- Product: PRD-DISPATCH\n- Priority: P2; status: solved; channel: email\n- Created: 2026-03-13T10:00:00-07:00\n\n## TCK-1054-C1: Samuel Reyes, 2026-03-13T10:00:00-07:00\n\nUploading our IdP metadata fails with 'invalid metadata'. We need SSO working before go-live.\n\n## TCK-1054-C2: Amara Obi, 2026-03-13T10:40:00-07:00\n\nHi Samuel, looking into it. Can you confirm the metadata contains two signing certificates? We've seen that during cert rotations.\n\n## TCK-1054-C3: Samuel Reyes, 2026-03-13T11:30:00-07:00\n\nYes, we're mid-rotation, both certs are published.\n\n## TCK-1054-C4: Amara Obi, 2026-03-16T09:00:00-07:00 (internal note)\n\nEscalated to Ben Carter: parser rejects metadata with multiple signing certs.\n\n## TCK-1054-C5: Ben Carter, 2026-03-18T15:30:00-07:00 (internal note)\n\nFix deployed: metadata with multiple signing certificates is accepted; all certs are trusted for signature validation.\n\n## TCK-1054-C6: Amara Obi, 2026-03-18T16:00:00-07:00\n\nSamuel, the metadata upload works now. You can configure SSO whenever your team is ready.\n\n## TCK-1054-C7: Samuel Reyes, 2026-03-19T08:15:00-07:00\n\nThanks. Note our change freeze runs until Mar 27, so we'll switch SSO on during the Mar 30 go-live, not before.\n\n## TCK-1054-C8: Samuel Reyes, 2026-03-30T10:20:00-07:00\n\nSSO switched on this morning, 186 users logged in so far.\n\n## TCK-1054-C9: Amara Obi, 2026-03-30T10:30:00-07:00\n\nExcellent. Closing this ticket.\n"}
{"id": "ticket-TCK-1055", "file": "ticket-TCK-1055.md", "source": "ticket", "title": "Checklist template for annual inspection", "date": "2026-03-13", "text": "# TCK-1055: Checklist template for annual inspection\n\n- Account: Westvale Fleet Services (ACC-020)\n- Requester: Brett Sandoval\n- Product: PRD-FIELD\n- Priority: P4; status: solved; channel: email\n- Created: 2026-03-13T14:50:00-07:00\n\n## TCK-1055-C1: Brett Sandoval, 2026-03-13T14:50:00-07:00\n\nCan techs fill a standard checklist for annual inspections?\n\n## TCK-1055-C2: Lena Vogel, 2026-03-13T15:55:00-07:00\n\nYes: Settings > Checklists > New template, then attach it to the 'Annual inspection' job type so it appears automatically.\n\n## TCK-1055-C3: Brett Sandoval, 2026-03-13T16:44:00-07:00\n\nok will try that\n\n## TCK-1055-C4: Lena Vogel, 2026-03-13T17:08:00-07:00\n\nResolution: Template created. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1056", "file": "ticket-TCK-1056.md", "source": "ticket", "title": "Can't attach PDF larger than 10 MB", "date": "2026-03-17", "text": "# TCK-1056: Can't attach PDF larger than 10 MB\n\n- Account: Summit Air Comfort (ACC-005)\n- Requester: Derek Lamb\n- Product: PRD-DISPATCH\n- Priority: P4; status: solved; channel: portal\n- Created: 2026-03-17T10:35:00-07:00\n\n## TCK-1056-C1: Derek Lamb, 2026-03-17T10:35:00-07:00\n\nUploading a 14 MB manual to a job fails.\n\n## TCK-1056-C2: Jack Sullivan, 2026-03-17T11:06:00-07:00\n\nAttachments are limited to 10 MB per file. Compress the PDF or link to it in the job notes.\n\n## TCK-1056-C3: Derek Lamb, 2026-03-17T14:04:00-07:00\n\nThat did it. appreciate it\n\n## TCK-1056-C4: Jack Sullivan, 2026-03-17T15:39:00-07:00\n\nResolution: Customer compressed the file. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1057", "file": "ticket-TCK-1057.md", "source": "ticket", "title": "Jobs didn't download for offline mode", "date": "2026-03-19", "text": "# TCK-1057: Jobs didn't download for offline mode\n\n- Account: Halvorsen Mechanical (ACC-001)\n- Requester: Marco Bellini\n- Product: PRD-FIELD\n- Priority: P3; status: solved; channel: email\n- Created: 2026-03-19T12:10:00-07:00\n\n## TCK-1057-C1: Marco Bellini, 2026-03-19T12:10:00-07:00\n\nTech was in a basement with no signal and his jobs weren't on the phone.\n\n## TCK-1057-C2: Lena Vogel, 2026-03-19T13:07:00-07:00\n\nOffline mode only includes jobs that were synced before losing signal. Ask techs to open the app on Wi-Fi each morning so the day's jobs download.\n\n## TCK-1057-C3: Marco Bellini, 2026-03-19T13:50:00-07:00\n\ngreat thank you!\n\n## TCK-1057-C4: Lena Vogel, 2026-03-19T15:03:00-07:00\n\nResolution: Customer trained techs to pre-sync. Closing this ticket; reply to reopen.\n"}
{"id": "ticket-TCK-1058", "file": "ticket-TCK-1058.md", "source": "ticket", "title": "Portal booking link returns 404", "date": "2026-03-23", "text": "# TCK-1058: Portal booking link returns 404\n\n- Account: Osprey Fire & Safety (ACC-011)\n- Requester: Leah Fontaine\n- Product: PRD-PORTAL\n- Priority: P3; status: open; channel: email\n- Created: 2026-03-23T07:45:00-07:00\n\n## TCK-1058-C1: Leah Fontaine, 2026-03-23T07:45:00-07:00\n\nOur booking link from the website gives a not found page.\n\n## TCK-1058-C2: Lena Vogel, 2026-03-23T09:28:00-07:00\n\nThe booking page slug was changed last week, which changes the URL. Use the new link from Portal > Share, or set the old slug back.\n"}
{"id": "ticket-TCK-1059", "file": "ticket-TCK-1059.md", "source": "ticket", "title": "Add a custom field for gate codes", "date": "2026-03-24", "text": "# TCK-1059: Add a custom field for gate codes\n\n- Account: Pinecrest Pest Control (ACC-008)\n- Requester: Alicia Grove\n- Product: PRD-DISPATCH\n- Priority: P4; status: pending; channel: email\n- Created: 2026-03-24T11:20:00-07:00\n\n## TCK-1059-C1: Alicia Grove, 2026-03-24T11:20:00-07:00\n\nWe'd like a 'gate code' field on jobs that techs can see.\n\n## TCK-1059-C2: Lena Vogel, 2026-03-24T12:08:00-07:00\n\nSettings > Custom fields > New field on Customer, visible to technicians. It shows on every job for that customer.\n"}
{"id": "ticket-TCK-1060", "file": "ticket-TCK-1060.md", "source": "ticket", "title": "Routes: always start from the depot", "date": "2026-03-25", "text": "# TCK-1060: Routes: always start from the depot\n\n- Account: Summit Air Comfort (ACC-005)\n- Requester: Derek Lamb\n- Product: PRD-ROUTES\n- Priority: P4; status: open; channel: phone\n- Created: 2026-03-25T09:45:00-07:00\n\n## TCK-1060-C1: Derek Lamb, 2026-03-25T09:45:00-07:00\n\nOptimize sometimes starts the route at the first customer instead of our yard.\n\n## TCK-1060-C2: Amara Obi, 2026-03-25T11:40:00-07:00\n\nSet a start location per technician under Routes > Settings > Start and end points. Optimize then always begins at the depot.\n"}
{"id": "wiki-billing-and-invoicing", "file": "wiki-billing-and-invoicing.md", "source": "wiki", "title": "Billing and invoicing", "date": "2026-02-12", "text": "# Billing and invoicing\n\nOwner: Paul Duarte (Controller).\n\n## Schedules and terms\n\n- Invoices are issued on the first day of each billing period (monthly, quarterly or annual), starting from the contract's term start date.\n- Payment terms are net 30.\n- Cards are charged on the issue date. Customers can pay by ACH after returning the signed ACH authorization form.\n\n## Invoice rules\n\n- Never change the amounts on an issued invoice. If an amount is wrong, **void** the invoice and **reissue** it with a new invoice number that references the voided one.\n- Adding a purchase order (PO) number or changing the billing contact does not require a reissue.\n- Discounts appear as a separate negative line. Service credits (for example SLA credits or save offers) also appear as separate negative lines.\n- Grandfathered Team seats use the SKU \"Team (grandfathered $45 rate)\" (see pricing-and-discounts).\n\n## Failed payments\n\n1. Card declined: support or finance contacts the customer the same day.\n2. Offer ACH.\n3. Past due after 30 days: the CSM is informed.\n\n## Changelog\n\n- 2026-02-12 (Paul Duarte): Added the grandfathered Team SKU rule after a renewal invoice was billed at the new rate.\n- 2025-01-06 (Paul Duarte): Page created.\n"}
{"id": "wiki-employee-handbook", "file": "wiki-employee-handbook.md", "source": "wiki", "title": "Employee handbook", "date": "2026-03-26", "text": "# Employee handbook\n\nOwner: Aisha Khan (People). Applies to all Brightfjord employees.\n\n## Working hours and locations\n\n- Portland HQ (1200 Alderwood Lane, Suite 400) and the Denver office (88 Larkspur Street, 3rd floor) are open 7:00 to 19:00 local time on weekdays.\n- Remote employees are welcome at either office; tell People ops a day ahead so a desk is ready.\n- Core collaboration hours are 9:00 to 14:00 Pacific. Outside those hours, async is the default.\n\n## Paid time off\n\n- Everyone gets **20 days of PTO** per calendar year, plus company holidays.\n- Unused PTO can be carried over into the next year up to a cap of **10 days**. Days above the cap expire on December 31.\n- Book PTO in the HR system at least two weeks ahead for anything longer than three days.\n- Sick days are separate from PTO and unlimited within reason. Tell your manager the same morning.\n\n## Company holidays 2026\n\nNew Year's Day, Martin Luther King Jr. Day, Memorial Day, Juneteenth, Independence Day, Labor Day, Thanksgiving and the day after, December 24 and December 25.\n\n## Remote work and equipment\n\n- New hires get a laptop and a $500 home-office allowance.\n- Remote employees get a $50 per month internet stipend.\n\n## Expenses\n\n- Submit receipts within 30 days. Meals with customers up to $75 per person; anything above needs your manager's approval.\n- Travel is booked through People ops.\n\n## Changelog\n\n- 2026-03-26 (Aisha Khan): PTO carryover cap raised from 5 to 10 days, starting with days carried from 2026 into 2027.\n- 2025-06-02 (Aisha Khan): Page created.\n"}
{"id": "wiki-engineering-onboarding", "file": "wiki-engineering-onboarding.md", "source": "wiki", "title": "Engineering onboarding", "date": "2025-10-06", "text": "# Engineering onboarding\n\nOwner: Mei Chen (Engineering Manager, Product Engineering).\n\n## Buddy\n\nEvery new engineer gets an onboarding buddy for their first 30 days. The buddy is chosen from a **different team** than the new hire, so they get a second view of the codebase and the company.\n\n## First weeks\n\n- **Week 1**: laptop and accounts with People ops, local dev environment for dispatch-api and web-app, read the employee handbook, the incident process and the on-call runbook. Ship a first small PR.\n- **Week 2**: pair with your buddy on a real ticket.\n- **Week 3**: shadow one on-call shift.\n- **Around week 8**: join the on-call rotation as secondary.\n\n## Repositories\n\n| Repo | What |\n|---|---|\n| dispatch-api | Core API, imports, webhooks, SSO |\n| web-app | Dispatch board and Portal front end |\n| routes-engine | Route optimization service |\n| field-app | iOS and Android technician app |\n| data-pipeline | Exports to the analytics warehouse |\n| infra | Alerts, deploy configuration |\n\n## Changelog\n\n- 2025-10-06 (Lucy Park): Refreshed the first-weeks plan.\n- 2024-01-15 (Mei Chen): Page created.\n"}
{"id": "wiki-field-app-releases", "file": "wiki-field-app-releases.md", "source": "wiki", "title": "Field app release notes", "date": "2026-03-04", "text": "# Field app release notes\n\nOwner: Chloe Dubois. The Field app is the technician app for iOS and Android, included in every plan.\n\n## 4.12.1 (2026-03-04)\n\n- iOS: completed jobs upload reliably when the app is in the background. Fixes INC-2026-002.\n- Jobs queued on devices by 4.12.0 upload automatically after updating. No data was lost.\n\n## 4.12.0 (2026-03-02)\n\n- Completed-job upload moved to a background task so technicians can switch apps right away.\n- Known issue (fixed in 4.12.1): on iOS the background task was suspended after about 30 seconds, so completed jobs stayed queued on the device. Android was not affected.\n\n## 4.11.0 (2026-01-26)\n\n- Customer signature pad works on the latest iOS tablet OS version.\n- \"Balanced\" location accuracy setting to save battery.\n\n## 4.10.0 (2025-12-08)\n\n- Upload full-resolution photos on Wi-Fi.\n\n## Release process\n\n- From 4.12.2 onward, releases use a staged rollout: 10% of users for 24 hours before 100%.\n- Every release must pass the end-to-end background upload test on a physical iOS device.\n\n## Changelog\n\n- 2026-03-04 (Chloe Dubois): Added 4.12.1 and the INC-2026-002 note; staged rollout and device test rules.\n- 2025-03-17 (Chloe Dubois): Page created.\n"}
{"id": "wiki-incident-process", "file": "wiki-incident-process.md", "source": "wiki", "title": "Incident process", "date": "2026-02-20", "text": "# Incident process\n\nOwner: Marcus Okafor (CTO).\n\n## Severity levels\n\n- **SEV-1**: Dispatch is down for all customers, or customer data is lost or exposed.\n- **SEV-2**: A product, add-on or app is broken or badly degraded for a subset of customers (for example Routes optimization failing, or one mobile platform not syncing).\n- **SEV-3**: Minor degradation with an easy workaround.\n\n## Roles\n\n- **Incident commander (IC)**: runs the incident, decides, keeps the timeline. Usually the engineering manager of the affected area.\n- **Comms lead**: updates the status page and the support team. Usually the support team lead.\n- **Responders**: do the technical work.\n\n## Rules\n\n- Post to the status page within 15 minutes of declaring a SEV-1 or SEV-2.\n- Customer updates at least every 30 minutes until resolved.\n- Every SEV-1 and SEV-2 gets a written postmortem within 5 business days, reviewed in a meeting. Postmortems are blameless.\n- Link support tickets to the incident ID (INC-YYYY-NNN) so we can count customer impact.\n\n## Changelog\n\n- 2026-02-20 (Marcus Okafor): Added the 15-minute status page rule (action item from INC-2026-001).\n- 2025-05-12 (Marcus Okafor): Page created.\n"}
{"id": "wiki-oncall-runbook", "file": "wiki-oncall-runbook.md", "source": "wiki", "title": "On-call runbook", "date": "2026-03-02", "text": "# On-call runbook\n\nOwner: Leo Fischer (Engineering Manager, Platform).\n\n## Rotation\n\n- Weekly rotation, handoff Mondays at 10:00 Pacific.\n- Primary on-call: Platform engineers (Fatima Haddad, Jonas Berg, Arjun Nair, Elena Petrova). Ben Carter joins as secondary from 2026-03-09.\n- Pages come from the paging tool. Acknowledge within 5 minutes; if you don't, it escalates automatically.\n\n## Escalation path\n\n1. Primary on-call engineer.\n2. Secondary escalation: **Jonas Berg** (Senior Backend Engineer).\n3. Engineering Manager, Platform: Leo Fischer.\n4. CTO: Marcus Okafor.\n\nConference bridge for incidents: +1 555-0100 ext. 299.\n\n## First steps when paged\n\n1. Acknowledge the page.\n2. Check the dashboards for Dispatch API error rate, routes-engine optimization latency (p95) and the Field app sync queue.\n3. If customers are affected, declare an incident (see the incident-process page) and open an incident channel named `inc-YYYY-MM-DD-topic`.\n4. Look at the last deploy first. Most incidents start within an hour of a deploy.\n\n## Alerts\n\n| Alert | Threshold | First check |\n|---|---|---|\n| Dispatch API 5xx rate | > 2% for 5 min | Last deploy, database connections |\n| Routes optimization p95 latency | > 10 s for 5 min | Query plans on route_stops, last migration |\n| Field app sync queue age | > 15 min | Mobile release notes, background upload |\n\n## Changelog\n\n- 2026-03-02 (Leo Fischer): Secondary escalation changed from Oliver Grant (left 2026-02-27) to Jonas Berg. Added Ben Carter to the rotation as secondary from 2026-03-09.\n- 2026-02-12 (Fatima Haddad): Added the Routes optimization p95 latency alert (> 10 s) after INC-2026-001.\n- 2025-11-03 (Leo Fischer): Page created.\n"}
{"id": "wiki-postmortem-2026-02-10-routes", "file": "wiki-postmortem-2026-02-10-routes.md", "source": "wiki", "title": "Postmortem: Routes optimization timeouts (INC-2026-001)", "date": "2026-02-20", "text": "# Postmortem: Routes optimization timeouts (INC-2026-001)\n\nOwner: Leo Fischer (Engineering Manager, Platform).\n\nDate: 2026-02-10. Severity: SEV-2. Incident commander: Leo Fischer. Comms lead: Carlos Mendes. Status: action items complete.\n\n## Summary\n\nAfter routes-engine v2.3.0 was deployed at 14:05 Pacific, optimization of routes with more than 40 stops timed out. The incident lasted 3 hours 5 minutes and was resolved at 17:10 after the missing index was recreated.\n\n## Impact\n\n- About 1,900 optimization requests failed or timed out.\n- Manual ordering on the dispatch board kept working.\n- Five customers filed tickets: Summit Air Comfort, Halvorsen Mechanical, Westvale Fleet Services, Ridgeline Solar Installers and Lakeshore Heating & Cooling.\n\n## Root cause\n\nMigration 0042 in routes-engine v2.3.0 rebuilt the `route_stops` table with an explicit sequence column but did not recreate the composite index on `(route_id, sequence)`. Optimization queries for routes with more than 40 stops fell back to sequential scans and exceeded the 30-second job timeout. Shorter routes stayed under the timeout.\n\n## Timeline (Pacific)\n\n- 14:05 routes-engine v2.3.0 deployed, including migration 0042.\n- 14:22 Routes optimization latency alert; Fatima Haddad (primary on-call) paged.\n- 14:30 SEV-2 declared; Leo Fischer is IC.\n- 14:41 Rollback ruled out: it would require another table rebuild.\n- 15:05 Jonas Berg finds a sequential scan on `route_stops`.\n- 15:40 Arjun Nair confirms the index was not recreated by migration 0042.\n- 15:44 Jonas starts building the index concurrently.\n- 16:48 Index build completes; latency drops.\n- 17:10 Resolved.\n\n## What went well\n\n- Manual ordering kept customers working.\n- Building the index concurrently avoided locking the table.\n\n## What went wrong\n\n- The latency alert threshold (25 s at the time) fired late.\n- The status page went up quickly, but only because Carlos did it from habit; there was no written rule.\n- Code review did not catch the missing index; nothing in CI checks for it.\n\n## Action items\n\n| Item | Owner | Due | Status |\n|---|---|---|---|\n| CI check that fails migrations dropping an index without recreating it; EXPLAIN check on hot queries | Arjun Nair | 2026-02-27 | Done 2026-02-20 |\n| Alert on optimization p95 latency above 10 s | Fatima Haddad | 2026-02-17 | Done 2026-02-12 |\n| Status page within 15 minutes of declaring SEV-1/SEV-2 | Carlos Mendes | 2026-02-20 | Done 2026-02-20 |\n\n## Changelog\n\n- 2026-02-20 (Leo Fischer): All action items done.\n- 2026-02-13 (Leo Fischer): Reviewed in the postmortem meeting.\n- 2026-02-11 (Leo Fischer): Draft.\n"}
{"id": "wiki-pricing-and-discounts", "file": "wiki-pricing-and-discounts.md", "source": "wiki", "title": "Pricing and discounts", "date": "2026-01-28", "text": "# Pricing and discounts\n\nOwner: Tomas Lindqvist (CFO). This page is the source of truth for list prices and discount approvals.\n\n## List prices (from 2026-02-01)\n\n| Plan / add-on | Price | Notes |\n|---|---|---|\n| Starter | $29 per user per month | Up to 10 users. Dispatch + Field app. |\n| Team | $49 per user per month | Minimum 3 users. Was $45 before 2026-02-01. |\n| Enterprise | $59 per user per month | Minimum 50 users, annual contract. SAML SSO, 1-hour P1 first response, named CSM. |\n| Routes add-on | $12 per user per month | Priced per user on the plan. |\n| Portal add-on | $199 per account per month | Flat fee. |\n\nBilling can be monthly, quarterly or annual. Annual prepay is the default for Enterprise.\n\n## Team price change (2026-02-01)\n\n- New customers pay $49. Quotes sent at $45 before February 1 are honored if signed by January 31, 2026.\n- Existing Team customers keep **$45 for their existing seats** on renewals signed on or before **2026-06-30**.\n- Seats added by existing customers after February 1 are billed at $49.\n- Starter and Enterprise prices did not change.\n- In billing, grandfathered seats use the separate SKU \"Team (grandfathered $45 rate)\".\n\n## Discount approval\n\n| Discount | Who can approve |\n|---|---|\n| Up to 10% | Account executive |\n| Over 10% up to 20% | VP Sales (Priya Raman) |\n| Over 20% | CEO (Ingrid Solberg) |\n\n- The CFO is informed of every discount above 15%.\n- Discounts apply to the whole contract value of the deal unless the order form says otherwise.\n- Always record the approver in the CRM deal (field \"discount approved by\").\n\n## Changelog\n\n- 2026-01-28 (Tomas Lindqvist): Team list price changes from $45 to $49 effective 2026-02-01; added grandfathering rules.\n- 2025-09-01 (Tomas Lindqvist): Discount approval matrix added.\n- 2025-03-03 (Tomas Lindqvist): Page created. Team plan at $45 per user per month.\n"}
{"id": "wiki-product-dispatch", "file": "wiki-product-dispatch.md", "source": "wiki", "title": "Product: Brightfjord Dispatch", "date": "2026-03-12", "text": "# Product: Brightfjord Dispatch\n\nOwner: Chloe Dubois (Product Manager, Dispatch).\n\nDispatch is the core product: a drag-and-drop scheduling board for office staff, technician calendars, customer records and job history.\n\n## Key features\n\n- Dispatch board with day, week and map views. Large boards (300+ jobs) are virtualized since 2026-03-12.\n- Recurring jobs (maintenance contracts) with edit-series support.\n- SMS and email job notifications (\"technician on the way\"). SMS cannot reach landlines.\n- Two-way calendar sync per technician.\n- Customer CSV import (phone extensions supported since 2026-02-11) and price book import (up to 5,000 items per file).\n- Custom fields, checklists and job types with eligible-technician rules.\n- Reports: timesheets, first-time fix rate (no follow-up job for the same customer and asset within 14 days).\n\n## Limits\n\n- Attachments: 10 MB per file.\n- Job notes: 2,000 characters (raised from 500 on 2026-02-25).\n- API: 600 requests per minute per account; batch endpoints accept up to 100 jobs per call.\n- Webhook retries: exponential backoff with jitter, up to 8 attempts over about two hours (since 2026-03-06).\n\n## Security\n\n- Two-factor authentication can be required for admins.\n- SAML SSO on the Enterprise plan, with just-in-time user provisioning. SCIM is on the roadmap.\n\n## Changelog\n\n- 2026-03-12 (Chloe Dubois): Large-board virtualization.\n- 2026-03-10 (Chloe Dubois): Recurring jobs now store local wall-clock time plus time zone (DST fix).\n- 2026-02-25 (Chloe Dubois): Job note limit raised from 500 to 2,000 characters.\n- 2025-02-10 (Chloe Dubois): Page created.\n"}
{"id": "wiki-product-portal", "file": "wiki-product-portal.md", "source": "wiki", "title": "Product: Brightfjord Portal", "date": "2026-03-10", "text": "# Product: Brightfjord Portal\n\nOwner: Sam Whitaker (Product Manager, Routes & Portal).\n\nPortal is the customer self-booking add-on ($199 per account per month). End customers pick a service and a time slot on a branded booking page; the job lands on the dispatch board.\n\n## Features\n\n- Branded booking pages with a shareable link. Changing the page slug changes the URL.\n- Availability rules per weekday (bookable hours) and a minimum notice period.\n- Booking confirmations and reminders by email and SMS.\n- Custom sending domain: add the SPF and DKIM records shown under Portal > Email to improve deliverability.\n\n## Changelog\n\n- 2026-03-10 (Sam Whitaker): Booking slots use the account time zone correctly across DST (fix shipped 2026-03-10).\n- 2026-02-23 (Sam Whitaker): Business-hours availability rules.\n- 2025-08-04 (Sam Whitaker): Page created.\n"}
{"id": "wiki-product-routes", "file": "wiki-product-routes.md", "source": "wiki", "title": "Product: Brightfjord Routes", "date": "2026-03-24", "text": "# Product: Brightfjord Routes\n\nOwner: Sam Whitaker (Product Manager, Routes & Portal).\n\nRoutes is the route-optimization add-on ($12 per user per month). It orders each technician's stops for the day to cut drive time while honoring time windows and technician skills.\n\n## How it works\n\n- **Optimize** reorders a technician's stops, or (with \"optimize across team\") moves stops between technicians.\n- Required skills on a job are honored, including when optimizing across the team (fixed 2026-01-23).\n- Start and end points (depot or home) can be set per technician; the first stop can be locked to a depot (since 2026-03-24).\n\n## Limits\n\n- Up to 150 stops per route.\n- An optimization job times out after 30 seconds.\n\n## Releases\n\n- v2.3.0 (2026-02-10): explicit sequence column on route stops for faster reordering (migration 0042). This release caused INC-2026-001; see postmortem-2026-02-10-routes.\n- v2.2.0 (2025-11-18): time windows per job.\n\n## Changelog\n\n- 2026-03-24 (Sam Whitaker): Depot lock for first stop.\n- 2026-02-13 (Sam Whitaker): Linked the INC-2026-001 postmortem.\n- 2025-06-16 (Sam Whitaker): Page created.\n"}
{"id": "wiki-sales-playbook", "file": "wiki-sales-playbook.md", "source": "wiki", "title": "Sales playbook", "date": "2026-01-06", "text": "# Sales playbook\n\nOwner: Priya Raman (VP Sales).\n\n## Segments and owners\n\n| Segment | Size | Account executive |\n|---|---|---|\n| Enterprise | 50+ technicians | Ryan O'Neill |\n| Mid-market | 15 to 49 technicians | Laura Jensen |\n| SMB | under 15 technicians | Diego Alvarez |\n\nSDRs (Megan Holt, Zoe Adams) book first meetings and hand over at Discovery. Victor Huang (Sales Engineer) runs technical demos and security reviews.\n\n## Deal stages\n\n| Stage | Exit criteria |\n|---|---|\n| Discovery | Pain, decision maker and timeline known |\n| Demo | Demo done with the people who will use it |\n| Proposal | Written proposal sent |\n| Negotiation | Commercial or legal terms being agreed |\n| Closed Won | Order form signed |\n| Closed Lost | Reason recorded |\n\n## Rules\n\n- Pipeline review every Tuesday. Bring your top three deals.\n- Discounts follow the approval matrix on the pricing-and-discounts page; record the approver in the CRM.\n- Renewals are owned by the account executive, with the CSM leading the relationship. Notice period for non-renewal is 30 days.\n\n## Changelog\n\n- 2026-01-06 (Priya Raman): Pipeline review moved to Tuesdays.\n- 2024-08-19 (Priya Raman): Page created.\n"}
{"id": "wiki-support-sla", "file": "wiki-support-sla.md", "source": "wiki", "title": "Support SLA", "date": "2026-01-20", "text": "# Support SLA\n\nOwner: Hannah Becker (VP Customer Success). These are the first-response targets we promise customers. Times are calendar hours from ticket creation to the first public reply by a Brightfjord employee.\n\n## Priorities\n\n- **P1**: Dispatch or the Field app unusable for most users, or an add-on fully down.\n- **P2**: Major feature broken or degraded for many users; workaround exists.\n- **P3**: Single-user problems, billing questions, bugs with a workaround.\n- **P4**: How-to questions and feature requests.\n\n## First-response targets\n\n| Plan | P1 | P2 | P3 | P4 |\n|---|---|---|---|---|\n| Enterprise | 1 hour | 4 hours | 8 hours | 24 hours |\n| Team | 2 hours | 8 hours | 24 hours | 48 hours |\n| Starter | 4 hours | 24 hours | 48 hours | 72 hours |\n\nP1 tickets are worked around the clock. Other priorities are worked 6:00 to 18:00 Pacific on weekdays.\n\n## Service credits\n\nIf we miss an Enterprise P1 first-response target, the customer gets a credit of 5% of one month's fee on their next invoice. The CSM tells the customer in writing.\n\n## Escalation\n\n1. Support engineer on the ticket.\n2. Support team lead (Carlos Mendes).\n3. VP Customer Success (Hannah Becker).\n\nEngineering escalations go to the owning team; for outages, follow the incident process.\n\n## Changelog\n\n- 2026-01-20 (Hannah Becker): Spelled out targets per plan after a ticket quoted the Starter P1 target to an Enterprise customer.\n- 2025-04-10 (Hannah Becker): Page created.\n"}
