punch list — the names fix is done, and how it was verified
Kenneth Courtney
migrations: import the users_avatar migration into the index
Kenneth Courtney
users: peers can see each other's names — field-gated directory read
Kenneth Courtney
handoff for the chat-parity thread — read state first
Kenneth Courtney
punch list + memory — the DM history gate
Kenneth Courtney
dm: DM history never loaded — the gate rejected every DM slug
Kenneth Courtney
punch list — DM findings, notifications design, and where i18n actually stands
Kenneth Courtney
dm: a DM opened from one portal was invisible from another
Kenneth Courtney
seo: the sitemap was sending search engines to localhost
Kenneth Courtney
events: a layout blocks field, the primitive Pages and Products already had
Kenneth Courtney
events: products, a thread, and a QR that can point at the event
Kenneth Courtney
events: render the content the event page was already throwing away
Kenneth Courtney
community: joining a portal now puts you in the room
Kenneth Courtney
handoff for the next thread, with the money picture researched
Kenneth Courtney
leo: authorization at the tool layer, four member tools, and arrival
Kenneth Courtney
drop a stray scratch script
Kenneth Courtney
library: no platform jargon in the Library page titles
Kenneth Courtney
punch list — Works availability is a portal setting now
Kenneth Courtney
works: delete the 11MB Bible ingest JSON
Kenneth Courtney
works: carry existing publish/global state through the migration
Kenneth Courtney
works: a portal owner picks their own Library
Kenneth Courtney
handoff for the next thread, with the Works job specced
Kenneth Courtney
comments: a page can carry a thread too
Kenneth Courtney
fee: never more than $9.99 from one booking
Kenneth Courtney
address check: hand over the DCF search, not homework
Kenneth Courtney
dm: you can message a person, not only an agent
Kenneth Courtney
security: visiting a portal stopped granting rights over it
Kenneth Courtney
access: a portal owner can finally edit their own portal
Kenneth Courtney
comments: posting a comment stops returning "Route not found"
Kenneth Courtney
admin bar: the product listing is /shop, so "+ New Product" belongs there
Kenneth Courtney
admin bar: add a post from the page that lists them
Kenneth Courtney
leo: a pasted address is a request, and Leo never lacks Places
Kenneth Courtney
leo: an address check logs where you asked it, not into the void
Kenneth Courtney
the blank admin was a versions-table column, and Core now runs through PgBouncer
Kenneth Courtney
migrations: hero_scrim on the versions tables, and lint the class
Kenneth Courtney
handoff for the afternoon thread, and correct the PgBouncer record
Kenneth Courtney
booking: checkout 500'd on provider_id = NaN, and say "platform fee" not "Justice Fund"
Kenneth Courtney
migrations: hero_scrim needs its column, same deploy
Kenneth Courtney
heros: dial the image darkening up, down, or off
Kenneth Courtney
booking: a visitor must never become the business's booking provider
Kenneth Courtney
booking: stop trying to express "no provider" as a Where
Kenneth Courtney
booking: the house clause needs equals:null, not exists:false
Kenneth Courtney
booking: the business can be the provider, so /book works out of the box
Kenneth Courtney
plans: a demo keeps the footer credit, and a tagline that read as a typo
Kenneth Courtney
demo-site: a computer-repair trade pack, and "removal" stops meaning "moving"
Kenneth Courtney
plans: a demo tier, and the admin bar a portal owner never saw
Kenneth Courtney
nav: edit your own top menu, and say who a visitor was in words
Kenneth Courtney
site-log: pagination, a visitor column, and the whole node for platform admins
Kenneth Courtney
access: a leak in the service catalogue, and the portal owner who could not edit their own site
Kenneth Courtney
marketing: stop selling a portal to someone who already has one
Kenneth Courtney
reviews: the block never worked, and it never said so
Kenneth Courtney
places: find_google_place — the Place ID, and whether their site is alive
Kenneth Courtney
pipeline: intake_prospect — paste an ad, get a site, an invite, a record and the message
Kenneth Courtney
migrations: never edit an applied migration — plus open Community, enrol on arrival
Kenneth Courtney
spaces,portals,theme: the town square, the AI Bus, a missing portal, a black card
Kenneth Courtney
tenants: features toggle, and Works stops being a two-slug allow-list
Kenneth Courtney
handoff for 260821 — funnel hands over the keys, plans gated, pipeline next
Kenneth Courtney
billing: gate what /pricing sells, in one place
Kenneth Courtney
billing: an Upgrade Plan path, where every tool already puts it
Kenneth Courtney
footer: the free tier's credit line should sell the thing
Kenneth Courtney
demo-site: legal trade pack, and keep unclaimed prospect sites out of Google
Kenneth Courtney
invites: get a link back after you minted it, and give orphan portals an inbox
Kenneth Courtney
invite: the invite page shows the inviter's name, so stop picking a stranger
Kenneth Courtney
demo-site: US spelling on sites we hand to US contractors
Kenneth Courtney
invite: an owner invite addressed to a phone, for a prospect you found on Craigslist
Kenneth Courtney
demo-site: a lawn care & landscaping trade pack
Kenneth Courtney
decommission: a destructive tool that reports success without deleting
Kenneth Courtney
brand: wings at 64
Kenneth Courtney
brand: the Angel OS mark is the default favicon
Kenneth Courtney
dashboard: the practical half of /learn, a way back out of the editor, and less nav
Kenneth Courtney
funnel: the customer we sell a site to can now actually get into it
Kenneth Courtney
chat: sidebar header follows the active channel, not the LEO DM's existence
Kenneth Courtney
handoff for 260820 — three FK outages, site log, billing proven
Kenneth Courtney
cart: a deleted product bricked 27 carts platform-wide
Kenneth Courtney
post-meta-repair: report what was filled, not what was attempted
Kenneth Courtney
admin: a new collection needs its locked-docs rel column, or the admin dies
Kenneth Courtney
posts: every share gets a description, without anyone pressing generate
Kenneth Courtney
authoring: say what is wrong with the post, and stop logging locked doors
Kenneth Courtney
services: stop serving every portal's catalog to everyone
Kenneth Courtney
leo: a menu edit has to know whose menu it is
Kenneth Courtney
catalog: make the endeavor cards clickable, and stop cropping logos
Kenneth Courtney
site-log: the DNN Site Log module, rebuilt for a portal owner
Kenneth Courtney
leo: Leo's markdown becomes real formatting, and it says where things are
Kenneth Courtney
booking: a slot can hold more than one person
Kenneth Courtney
addendum — hours editor, log retention, billing proven end to end
Kenneth Courtney
billing: a paying subscriber is always attached to a person
Kenneth Courtney
logs: a hard 14-day retention ceiling on application-logs
Kenneth Courtney
logs: stop the nervous system screaming about one dead host
Kenneth Courtney
booking: a real weekly hours editor, so an owner never sees the CMS
Kenneth Courtney
handoff for 260819 — billing live, booking infra, next gaps
Kenneth Courtney
booking: restore ensureDefaultAvailability, add the tenant path beside it
Kenneth Courtney
booking: give service businesses hours, so /book can actually be booked
Kenneth Courtney
billing: a paying subscriber was being recorded as belonging to nobody
Kenneth Courtney
billing: make the subscribe surface provisionable for every tenant
Kenneth Courtney
signup: a real "build my free website" form for both hubs
Kenneth Courtney
demo-site: seed real bookable services, not just page copy
Kenneth Courtney
forms: route lead-capture submissions to the business owner, not nobody
Kenneth Courtney
vapi: Leo answers in neutral American English, not a British accent
Kenneth Courtney
warm-list outreach drafts and links, 260818
Kenneth Courtney
theme: tenant colour reaches every block via the shadcn tokens
Kenneth Courtney
handoff for the 260818 revenue push
Kenneth Courtney
spec: featuredEndeavors as a section
Kenneth Courtney
provision: networkVisible never applied to an existing endeavor
Kenneth Courtney
demo-site: a client's brochure site is not a federation node
Kenneth Courtney
nav: only maxInline 0 actually keeps Discovery out of the bar
Kenneth Courtney
nav: a business site's bar carries its own pages, not ours
Kenneth Courtney
images: AI image generation has been dead — `num_steps` is now rejected
Kenneth Courtney
demo-site: one call turns a prospect into a live five-page site
Kenneth Courtney
memberships: free plans, and show a portal its own addresses
Kenneth Courtney
anthonyjstudio: phone sign-in without emailing him
Kenneth Courtney
anthonyjstudio: nav overrides, shoot-diary posts, voice on
Kenneth Courtney
provision: `contactForm: true` has never put a form on a page
Kenneth Courtney
provision: a spec can lay out a real site, not just prose
Kenneth Courtney
spaces: the reassign chooser listed every tenant's spaces
Kenneth Courtney
build: main has been un-deployable since 83619a9
Kenneth Courtney
memberships: gate posts, not just pages
Kenneth Courtney
endeavors: picking nothing must show nothing
Kenneth Courtney
mcp: a list of tool names, not a column per tool
Kenneth Courtney
affiliates: capture ?ref= and stamp it on the order
Kenneth Courtney
affiliates: partners + order referral attribution (schema only)
Kenneth Courtney
kessela: Home needs to be an explicit nav item or its dropdown is empty
Kenneth Courtney
kessela: sweep the import's footer-as-content off all 21 pages
Kenneth Courtney
kessela: buy-kessela-now stops repeating itself below the fold
Kenneth Courtney
kessela: unflatten how-to-use-belt and results-testimonials, and make the nav fit
Kenneth Courtney
footer: render navGroups, because filling them in made the footer go blank
Kenneth Courtney
runbook: don't let the agent stall at the log step
Kenneth Courtney
runbook: give the agent the shapes, the greps, and the logs
Kenneth Courtney
runbook: hand the lifting to OpenCode without handing it the footguns
Kenneth Courtney
docs+content(kessela): conform the nav, and write down the rest of the gap
Kenneth Courtney
vision: a key with no credit behind it is not a provider
Kenneth Courtney
types: regenerate payload-types for spaces.isSystem
Kenneth Courtney
spaces: isSystem is a real column, not a guess
Kenneth Courtney
spaces: delete is tenant-admin only, same tenant, never the AI Bus
Kenneth Courtney
spaces: deleting a space now says where its contents go
Kenneth Courtney
graphql: the second duplicate type name, and a guard for the third
Kenneth Courtney
workflows: a populated tenant is not a tenant id
Kenneth Courtney
gateway: cache a failed credit check like a successful one
Kenneth Courtney
media: stop judging an upload by the uploader's tenant selector
Kenneth Courtney
invites: an invitation creates the person it names
Kenneth Courtney
leo: an image turn stops climbing to a model that won't answer it
Kenneth Courtney
identity: a person is not a portal
Kenneth Courtney
logs: unbreak GraphQL and stop the scanner-noise flood
Kenneth Courtney
hooks: a nested write without req is not in the transaction
Kenneth Courtney
auth: the baseline is a door, not a reminder
Kenneth Courtney
settings: set the listing-page cover where you set the logo
Kenneth Courtney
shop: one page, one hero
Kenneth Courtney
auth: a texted code was inventing a second identity
Kenneth Courtney
ai: stop pinning a Gemini generation, and price the models that actually serve
Kenneth Courtney
the jobs queue is running, not pending
Kenneth Courtney
the edge was down because nothing starts it
Kenneth Courtney
media: a relationship id that arrives as a string is not an id
Kenneth Courtney
jobs: shouldAutoRun does not stop the scheduler, only the runner
Kenneth Courtney
leo: a draft is not an absence
Kenneth Courtney
admin: say which stack you are looking at
Kenneth Courtney
email: "nobody configured this" was answering as a 500
Kenneth Courtney
what shipped of the plan, and the one env var standing between it and running
Kenneth Courtney
jobs: the crontab moves into Payload's queue, where failures are rows
Kenneth Courtney
the plan for auto-deploy, scheduled work, and what the laptop is now
Kenneth Courtney
footguns: cloudflared keeps its start-time config, and I verified the wrong hosts
Kenneth Courtney
footguns: editing a container's config from Windows silently CRLFs it
Kenneth Courtney
ai: GOOGLE_MODEL was flattening every tier, so escalation did nothing
Kenneth Courtney
chat: the URL is a navigation source, not just an initial one
Kenneth Courtney
restore the 11 gtagEcommerce tests I clobbered
Kenneth Courtney
analytics: every GA4 event was reporting 100× — and add_to_cart never fired
Kenneth Courtney
leo: an image with no media id left the tools blind
Kenneth Courtney
Payload 3.77 → 3.86.0, Next 16.1.6 → 16.2.12
Kenneth Courtney
notifications: the vendor's name doesn't belong in the domain
Kenneth Courtney
product: the gallery is a fixed frame, sized by the copy beside it
Kenneth Courtney
hero: splitPanel bleeds to the top too — the type Kessela actually uses
Kenneth Courtney
header: the cart is a square target, and a full-bleed hero starts at the top
Kenneth Courtney
leo: the cart tools were writing to a field that does not exist
Kenneth Courtney
vision: a dead analysis run must not own the image forever
Kenneth Courtney
leo: a stalled "..." now heals on its own clock
Kenneth Courtney
leo: the SPACE owns a message's tenant, not the portal you asked from
Kenneth Courtney
scripts: the _status guard did not fire, because it knew one incident
Kenneth Courtney
kessela: retire the Buy Now page, and give products the bands it carried
Kenneth Courtney
product: the gallery crashed again, one line over from yesterday
Kenneth Courtney
handoff for the next thread
Kenneth Courtney
product: the gallery crashed on an unpopulated image — and I caused it
Kenneth Courtney
branding: the sign-in pages said Angel OS on every portal
Kenneth Courtney
blocks: the gradient showcase band — their most recognisable section
Kenneth Courtney
kessela: forms where the forms were promised, and no more mailto
Kenneth Courtney
kessela: propose the words instead of asking for a list
Kenneth Courtney
portrait video (both forms), Ubuntu runbook, Kessela monitored
Kenneth Courtney
kessela: the incontinence landing page — structure now, claims later
Kenneth Courtney
kessela: the plan catches up with a day of David
Kenneth Courtney
kessela: payment methods are a setup step, not an assumption
Kenneth Courtney
checkout: stop switching off buy-now-pay-later in code
Kenneth Courtney
fee: per-tenant platform fee, and one resolver for every checkout
Kenneth Courtney
a layout update that omits _status silently UNPUBLISHES the page
Kenneth Courtney
kessela: the 10% is the platform fee, and what the ad accounts actually need
Kenneth Courtney
blocks: FAQ accordion with FAQPage schema, and Kessela's own badge copy
Kenneth Courtney
trust row on the buy page, Gotify + Uptime Kuma restored
Kenneth Courtney
runbook: the Cloudflare section, and the autostart gap it exposed
Kenneth Courtney
theme: pin the auth-card button labels instead of chasing a rendering I can't reproduce
Kenneth Courtney
theme: the sign-in page and the nav were unreadable in dark mode
Kenneth Courtney
kessela: the account list for the setup session
Kenneth Courtney
scripts: cast through unknown — the new block type broke the build, not tsc
Kenneth Courtney
tickets: the public claim and return desk — one block, two placements
Kenneth Courtney
kessela: kessela.com is David's — the platform domain is the one that matters
Kenneth Courtney
kessela: David's server is the decision — record it, then de-risk it cheaply
Kenneth Courtney
gate: the members-only page sent signed-out visitors nowhere useful
Kenneth Courtney
kessela: what each ask unlocks, the studies format, creator and Stephanie options
Kenneth Courtney
leo: an uploaded image is "look at this", never "make me one"
Kenneth Courtney
kessela: the 8 studies are a blog now, not eight orphan pages
Kenneth Courtney
add the tickets slice to the continuation handoff
Kenneth Courtney
tickets: warranty claims, returns and support — one primitive, one queue
Kenneth Courtney
rewrite the continuation as a Kessela-tightening handoff
Kenneth Courtney
chat: LEO's replies were unreadable in light theme
Kenneth Courtney
kessela: their hero still and their favicon — and the tab stops saying Angel OS
Kenneth Courtney
media-text: a real video player for uploaded media, not a background loop
Kenneth Courtney
lexical: an internal link made a page unsaveable
Kenneth Courtney
heros: splitPanel wasn't selectable — I'd been editing a DEAD config file
Kenneth Courtney
record the unresolved stuck-placeholder bug for a fresh session
Kenneth Courtney
leo: stop inventing failure reasons, and stop talking like a cosmology
Kenneth Courtney
mark header consolidation done in the continuation prompt
Kenneth Courtney
header: one control instead of three — portal switch + edit page in the account menu
Kenneth Courtney
continuation prompt for a fresh context
Kenneth Courtney
header: my own overflow-hidden was clipping every dropdown
Kenneth Courtney
heros: splitPanel — the corporate product hero, added not substituted
Kenneth Courtney
branding: per-Endeavor opt-out for the platform credit, and stop saying "dev"
Kenneth Courtney
kessela: nav labels that fit, dark chrome, and the cache gotcha
Kenneth Courtney
ui: the polish pass, done with eyes on the page instead of greps
Kenneth Courtney
import: sectioned layouts — copy, picture, copy, picture
Kenneth Courtney
kessela: a store, a lead form, and the provisioning gaps you spotted
Kenneth Courtney
hero: make the fullScreen hero selectable, and take Kessela live
Kenneth Courtney
import: mirror a brochure site into a tenant — and provision Kessela
Kenneth Courtney
merlin.spacesangels.com routes to Merlin, and the edge config is backed up
Kenneth Courtney
crm: the sequence engine — drip that runs unattended and stops on purchase
Kenneth Courtney
crm: first-touch attribution, and a join between the CRM and the till
Kenneth Courtney
access: anyone could make themselves tenant_admin of any tenant
Kenneth Courtney
header: the mobile menu ignored the pins the desktop bar honours
Kenneth Courtney
booking: a deprecated field's validator was blocking every deposit
Kenneth Courtney
a continuity runbook — keeping the platform alive without Ken
Kenneth Courtney
booking: read the provider's real Google Calendar, and write bookings back
Kenneth Courtney
footguns: the test gate is green — and it found a live no-req write
Kenneth Courtney
footguns: a hook that writes without `req`, and 20 more tests that lied
Kenneth Courtney
footguns: bound every fetch, close three more `authenticated` holes, make 12 lying tests honest
Kenneth Courtney
FOOTGUNS.md — a handoff for turning instance-fixes into class-fixes
Kenneth Courtney
chat: action icons invisible on touch; LEO no longer promises work it can't do
Kenneth Courtney
leo: a departed client no longer destroys the turn
Kenneth Courtney
leo: image analysis hung forever — dead model, thinking model, unbounded fetch
Kenneth Courtney
docs: ship the markdown — /dashboard/docs reported 0 documents
Kenneth Courtney
auth: unify login and create-account contrast — theme-independent cards
Kenneth Courtney
money: 95/5 everywhere — one number, enforced and displayed
Kenneth Courtney
money: the 40% platform take was LIVE — route every fee through the 5% dial
Kenneth Courtney
monetization: platform_solvency + set_platform_fee — the number, and the dial
Kenneth Courtney
shop: render the hero — storefront.shopHeroImage was a dead setting
Kenneth Courtney
auth,theme: theme toggle on mobile; passwordless signup as the default
Kenneth Courtney
nav: derive the whole menu; the header doc becomes an override layer
Kenneth Courtney
links: link picker offers posts/products/events — with the schema to match
Kenneth Courtney
active-endeavor switch — one context switch replaces five escape hatches
Kenneth Courtney
nav: promote the membership join page — it was losing to a soundbar
Kenneth Courtney
deploy: check in the whole self-host stack, not just the heartbeat
Kenneth Courtney
endpoints: fix donation + export-site suites (11 failures)
Kenneth Courtney
ensureTenantMembership: rewrite against the signature that exists
Kenneth Courtney
security: sweep bare `authenticated` reads off customer-reachable data
Kenneth Courtney
security: bookings were readable and writable by every signed-in user
Kenneth Courtney
admin: give /admin/login a route back to the site
Kenneth Courtney
deploy: check in the heartbeat sidecar files
Kenneth Courtney
vercel: disable git deployments on main — local-only iteration
Kenneth Courtney
booking: flat deposits so quote-only trades can hold a slot
Kenneth Courtney
leo: portal-targeted page/branding tools; fix brand duplicated in every title
Kenneth Courtney
leo: configure_service can target another portal + take an hourly rate
Kenneth Courtney
_local: fold Bill's 4 pending invites into one person (email + phone anchors)
Kenneth Courtney
domains: spacesangels.com is the canonical apex, not payloadnuke.com
Kenneth Courtney
300s hang RESOLVED — pg_blocking_pids probe, deadlock gotcha, cleanup closed
Kenneth Courtney
provisioning: the 300s hang — syncUserTenants deadlocked the tenant tx
Kenneth Courtney
continuation handoff 260725 — tunnel shortcut, 300s provisioning hang, CRM plank
Kenneth Courtney
provisioning: thread req into default pages/nav; make nav creates sequential
Kenneth Courtney
provisioning: owner memberships were silently dropped on tenant create
Kenneth Courtney
punch-list: close 403-reads + Gap B; log intent-preclassifier (defer learned tier)
Kenneth Courtney
list reads return empty-200 not 403; Quick Invite now writes a Contact
Kenneth Courtney
onboarding: ONE baseline-membership floor for every door
Kenneth Courtney
Core host port 3000->3001 (dual-mapped during flip); Merlin reclaims 3000
Kenneth Courtney
map the lead→contact→invitation→campaign flow; correct punch-list (campaign IS built)
Kenneth Courtney
railway: correct pooler db to 'railway'; note core-kendev deleted
Kenneth Courtney
railway: pgbouncer wildcard pool serves both angels + kendev cores
Kenneth Courtney
snapshot self-host compose (pgbouncer added) — datacenter dir is not versioned
Kenneth Courtney
pgbouncer: local stack pooled (live); Railway runbook for a 3rd pgbouncer service
Kenneth Courtney
punch-list: today's fixes + send_campaign, mediaToAiBus, 403-reads, no-pgbouncer
Kenneth Courtney
dashboard: count real federation-peers, not a bogus 'ping_received' audit action
Kenneth Courtney
leo: image-only messages 400'd — 'Missing or empty: message' before attachments checked
Kenneth Courtney
voice: end-of-call report → cost ledger (telephony) + call log on the Contact
Kenneth Courtney
crm: invite + accept now advance the Contact funnel (lead → invited → accepted)
Kenneth Courtney
auth: Google callback 500 on non-cookie-domain origins — invalid 'domains contains' query path
Kenneth Courtney
availability: validate only the schedule group matching availabilityType
Kenneth Courtney
invites: invitationName — the typed name survives the phone invite
Kenneth Courtney
punch list — media-anywhere primitive P1 (photos + generated images to any surface)
Kenneth Courtney
team: phone on the roster + guarded contact edit for pending invites
Kenneth Courtney
settings: Site Logo control on General tab — disambiguate from Discovery Card badge
Kenneth Courtney
punch list — close LEO media-id P1 + stale header-logo P2; Start-S branding batch
Kenneth Courtney