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...
Keep the decision record — 18 rulings and what each costs if wrong
The plan records what shipped; this records why it differs from the plan. Three rulings were themselves corrected by a later review (the Stripe write count went...
The KamoDesktop link is single-use now
The comment claimed a reload re-submits ?data= and restores the session. It no longer does: the link is spent the moment the tab opens it, so it is worthless af...
Stop the plan instructing the money-path bug it was corrected on
Task 8 Step 4 still told the reader to key update/cancel/detach/del with "the current intent in the key". That is the Critical defect the final review reversed:...
Answer the softphone spec's biggest open question
Verified live on the cluster: every FreePBX AOR is max_contacts=1 with remove_existing=yes. That value was set nowhere in any Kamo repo, which is why it had gon...
Mark the softphone guardrails plan executed
Real commit SHAs in place of the placeholder, and 47 steps ticked. A finished plan showing all-unchecked boxes misreads as abandoned work.
Implementation plans for the softphone line window
Two plans, because the spec covers two subsystems and the first ships working software on its own. The guardrails plan is seven tasks that need no new browsing...
Design the softphone line window
A call cannot be moved into a window after it starts — an RTCPeerConnection and its MediaStream are not transferable between browsing contexts, and there is no ...
Commit the Dispatch/Service Work program design and its evidence corpus
Both program specs and all 56 research files were untracked and existed only on one disk, while HANDOFF.md tells the next session to read them first. Also reco...
Plan webhook hardening and idempotency across BillingService, shared-library and APIService
Ten tasks, TDD throughout, with the severity restated to what was actually verified: the Stripe fail-open is latent (the secret is present in prod, 38 bytes) an...
Implementation plan for quiet hexheads and the notification spine
33 tasks across five phases whose order is load-bearing: the schema must be run before any service maps a column, the library published before the services buil...
Design for quiet hexheads and the per-surface notification spine
A minimized chat window re-opens itself on every arriving message. The hexhead should absorb it instead — count, thump, stay put — and only a conversation with ...
Design the website brand scan
Where the /network/create Website field turns into logo, colour and background suggestions on the three branding steps. Records two things that are easy to get...
Correct what the KamoDesktop SSO token's lifetime actually is
The comment called the link "short-lived, single-use" and "5-minute", which is what caused the token expiry to be set as if it were a URL redemption window. It ...
Record that Java field order does not control DDL key order
The composite-key assertion passed while ddl-auto actually built PRIMARY KEY (logical_id, resource_type, tenant_id) — Hibernate emits @EmbeddedId columns ALPHAB...
Plan the System Bugs build across six repos
Screenshots turn out to need no table: an Img row already carries an assoc type plus an assoc object id, and imgs has no CHECK constraint on assoc_id, so append...
Design the System Bugs tab and its AI dispatch path
vscode:// URI handler opens a conversation in the window sage already has open, and coderProcessWrapper carries model and effort, which the URI cannot. Also rec...
Record SP1 as complete, and the six things the plan got wrong
Keeps the reasoning rather than just ticking boxes — the top-level-org skip and the PLANNING-stage regression are both the kind of mistake that would be made ag...
Task 7 needed no new migration, and top-level orgs must be included
The app-tree backfill turned out to already exist as **************** restricted to isGated() verticals. Dropping that restriction is the whole change. Records...
Implementation plan for SP1, the app catalog parent/child tree
12 tasks across kamo-shared-library, KamoInitializerService, SecurityService, MediaService, VOIPService, kamo-internal and the translation dictionary. Ordering...
Correct the sign.pink finding
The inventory called SignLinkBuilder's sign.sign.pink fallback a "foreign apex" and I recorded it as one. It is not: sign.pink is a Kamo-owned organization (id ...
Design the EHR/EMR vertical and the parent/child app catalog
Two specs from the pre-build analysis of ~30 repos and the 2026 ambulatory EHR market. The program design records the six decisions that bind every sub-project...
Plan the host-independent tenancy rollout
Six phases, each independently shippable, because pushing deploys: the host path keeps working until Phase 6 removes it. Phase 1 is the crux and is additive --...
Design host-independent tenancy
Org identity comes from the hostname today: OrgHostResolver.resolveByFqdn turns <alias>.<domain> into (orgId, providerId), and its SQL requires od.is_dns_verifi...
Correct what the add-on binding gap actually was in production
The previous commit's reasoning was inferred from the loader, not measured. It claimed every KamoCRM add-on row had service_type NULL and that hosted mail was t...
Design the org chat policy engine and its Policies tab
Rules are an ordered list over ordered member pairs; the first match decides, so every verdict names exactly one rule and the UI can always explain itself. Sele...
Record that the unprocessed claim is now batched
getUnprocessedPayloads() returned every unprocessed payload, and this job holds each one's raw and flattened text for its whole run — so its memory was a functi...
Correct the README to the routes that actually shipped
The WebRTC endpoint moved from /webrtc/<ch>/whep to /live/<ch>/whep when channels were renamed live/<ch> to drop StripPrefix, and the README still described the...
Record the SecurityService unauthenticated-endpoint triage
Three fixed, the rest explained. The headline number needed narrowing three times and the first two attempts were wrong the same way — enumerating helper names ...
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
