Kamo-careers picks up a branding change within a minute
The comment beside the Careers Logo Overlay said the careers site re-reads config.json hourly. It re-reads it every minute since kamo-careers 14c9ddb, which fix...
Finish the spec's inventory, and add the order to check things in
The "where it lives" table was written before the setup service, the media handoff, the CARRIER_TO_PHONE_SERVER rail and the phone server's default text route e...
The two inbound shapes, and the rule that keeps the endpoint safe
Records what voipservice 9e9e814 and ea6d631 established, because the reasoning is not recoverable from the diff. A Telnyx messaging profile has exactly one we...
Design for the App Shelf launchpad widget
A system widget with no rights, locked to the first row of the launchpad by arithmetic rather than a band of its own, with a portalled flyout carrying each app'...
Record what the Remote Terminal deploy actually taught
Three defects, all the same shape: present in the tree, absent from the thing that serves requests β an IngressRoute in a directory nothing applies, a client pa...
Say that the status-label save is a whole set, not a patch
The endpoint's meaning changed underneath this client: a status left out of the list is now a deletion rather than a no-op, which is what lets a label be remove...
The Report Studio design β Java-defined reports, a generic renderer
Reports are defined as Java classes in kamo-shared-library and rendered by one capability-driven frontend, so adding a report is a new class and nothing else. ...
Design for the Help Center KB build, related articles, and public wiring
Covers the 248 source drafts under Documentation/, the tree they map to under the existing Help Center article, the new KB_ARTICLE_RELATIONS feature, and the th...
Say which subscription the launchpad pill's gate is about
"Not already paying" means the VIEWER's own seat β the same question the Plans & billing page answers when it decides whether to offer them one. Worth stating, ...
Correct the note on the removed Create My Free Org rights
ab740dd3 claimed CREATE_FREE_ORG_WIDGET and its four policy children "never existed in RoleRightType.java at all". That is wrong. They were ids 288-292, and I r...
Design and implementation plan for the org launch and Getting Started wizard
Restores two commits dropped by a concurrent 'git reset --mixed origin/main' in this shared checkout; the files themselves survived in the working tree.
Plans for BL2 (the KAMO_NATIVE invoice) and SW8 (in-home contract compliance)
Check in the useUserInfo shared-store handoff
The "no .md in repos" rule is retired. This handoff doc had been kept local-only; it belongs next to the code it describes.
Close out SW6b
Eight departures. The one that mattered was in SW6a: PUT /{uid} accepted totals and sign-off verbatim, which made both of this plan's central rules decorative u...
Plan SW6b, making the six tabs persist
Labour and parts become ServiceJobLine rows on the job, not ServiceLineItem rows: OrderLineItem.order is optional=false, so a ServiceLineItem cannot exist witho...
Close out SW6a
Nine departures. The plan's Spring claim was measured false, its sketched test was near-tautological, and its ServiceTrade-labels-are-new claim was wrong β ther...
Stop telling implementers to run git commit --allow-empty
--allow-empty PERMITS an empty result, it does not force one. With no pathspec it still commits the index, and these checkouts always have another session's wor...
Stop telling implementers to run git commit --allow-empty
--allow-empty PERMITS an empty result, it does not force one. With no pathspec it still commits the index, and these checkouts always have another session's wor...
Correct four SW6a claims, one measured false
A plain @Autowired List of an interface with no implementations does NOT resolve to an empty list β it throws UnsatisfiedDependencyException. Measured, not reas...
Correct three SW6a claims, one of them measured false
An earlier draft said a plain @Autowired List of an interface with no implementations resolves to an empty list. It throws UnsatisfiedDependencyException β meas...
Plan SW6a, and split SW6 into three
The spec calls SW6 'wire the finished UI', which assumed a backend existed to wire to. ServiceJob, ServiceVisit and ServiceLineItem's new columns have zero runt...
Close out SW5
Six departures. The sharpest: the task-book proxy could not be copied from the quotes proxy, which exports PATCH and no PUT β a verbatim copy would have made ev...
BaseLosController's unauthorized()/forbidden() do exist
A task brief told an implementer those helpers were invented and did not exist. requireOrgId genuinely does not; those two do, declared protected static on Base...
Restore SW4's close-out, lost to a stale working-tree edit
The previous commit edited the on-disk copy of this plan, which predated the Shipped section β that section was appended to a scratchpad copy and landed from th...
Applying DDL opens a 40001 window β watch it, do not restart
Bumping a catalog version leaves pooled JDBC connections holding the old one and the next query through each fails SQLState 40001, which Hibernate does not retr...
Close out SW4
Nine departures. The two that matter most: this plan's own Self-Review asserted a type was consistent across three places, and it was consistent and wrong; and ...
QuoteConversionResult.orderUid is a String, not a UUID
Order extends BaseEntity, whose id is a Long β only Quote, QuoteOption and QuoteLineItem extend BaseUuidEntity. The plan declared UUID and its own Self-Review a...
SW4's dictionary keys land in the dictionary repo
Task 6a's file list named kamo-internal/messages/en.json, which is gitignored and cannot be committed. The step's prose was right; the list was not.
Plan SW5, the flat-rate task book
The spec's premise that no line carries a labour duration went stale hours ago β SW3 landed labourMinutes and taskCode on ServiceLineItem, and the javadoc on ta...
Define SW4's behaviour for a market-less quote
Task 1 made create() read marketUid but did not backfill, so every quote that exists today still has a null market. The converter must fall back to PurchaseLine...
SW4's billing choice is per-org configuration
Owner's call, and the right one: a maintenance contractor bills each period, a capital-equipment installer bills the term up front. Either hard-coded choice cha...
Plan SW4, quote to order conversion
Five defects, not the spec's three. The converter deliberately does NOT mint a Commitment: processOrderPaid returns immediately when one exists, so hand-creatin...
Record what the chat switcher column left undone
Ordered by what would hurt most if left alone. The first entry is the one worth from MediaService's, which was not looked at β five of the switcher's six bucket...
Close out SW3
Thirteen departures from plan. The two that mattered most: OrderLineItem .discountType should never have been a String, and exporting the DDL before applying it...
Correct SW3's ServiceJob imports and pin the PROCUREMENT trap
Task 2 imported dao.beans.account.Account and dao.beans.organization .Organization. The real packages are accounts and orgs β it would not have compiled. Task ...
Correct the SW3 plan's policy-template claim
Task 6 pointed at RetailInventoryPolicy as the implemented member of the policy family to copy an injection shape from. It is never instantiated and never injec...
Plan SW3, the Service Work domain core
ServiceJob 1..N ServiceVisit as a sibling of FulfillmentOrder, a filled ServiceLineItem, the four classification axes, and a status machine that throws instead ...
Close out SW2
Four tasks, five departures from plan. The sharpest: the plan's own restrictionMask snippet filtered out null dayOfWeek, which means 'every day' β it would have...
Correct two errors in the SW2 plan
The rsync recipe used a bare 'rsync -a', which preserves mtimes β a file restored to an earlier version arrives older than the .class already compiled from a la...
Plan SW2, the three calendar repairs
Research corrected the spec on one point: recurrence is not dead at both ends. The UI renders on the calendar page today and silently discards what the member e...
Notification-spine follow-ups, triaged
Deferred items from the 33-task plan, all raised by review and all non-blocking. The whole-branch review's four must-fix findings were fixed and are not listed....
Take the softphone measurements instead of waiting for them
38 calls in the entire history of PHONE_CALL_LOG, 26 in the last 30 days. The drop-then-redial fingerprint finds 4 pairs, all provisioning test calls from April...
Plan Service Work's first rights and the commerce permission gap
Corrects two spec assumptions against real code: no RoleRightType uses **************** (all 36 commerce rights use POS, and the editors filter on exact equalit...
Mark the line window executed
All eight tasks shipped across four repos, with the four deliberate deviations recorded β most importantly that Task 6's call surface was written fresh rather t...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.