The archive
Auto-written every Sunday, straight off the database
What shipped this week
Week in Review: Jul 6 – Jul 12, 2026 — 77 PRs, 2,696 commits
Stu Mason22 min read
77 PRs merged, 2696 commits, +35,359 lines
Summary
- 77 pull requests merged (↓11% vs last week)
- 4 pull requests opened
- 2,696 commits pushed (↑21% vs last week)
- 28 issues resolved
Top Pull Requests
- hidden-agenda cut (the #250 confession) + compositor lazy-so... — edator-studio
+9,056/-8 - M3: perception — crunch's pipeline ported, benchmarked, depl... — edator-cloud
+4,321/-13 - Mobile slice 4a: the cleaner's earning journey — cleanconnect
+2,539/-19 - Mobile slice 3b: book a cleaner directly + saved addresses — cleanconnect
+2,313/-40 - AI anomaly watch: daily log anomaly detection + in-app run h... — cockpit
+1,755/-6
Code Impact
+39,128 additions · -3,769 deletions
Net: +35,359 lines across 655 files
Activity by Repository
| Repository | PRs | Commits | Changes |
|---|---|---|---|
| cleanconnect | 34 | 720 | +17,349/-2,496 |
| coolify-mcp | 7 | 110 | +547/-428 |
| edator-cloud | 8 | 174 | +7,633/-139 |
| house | 3 | 154 | +17/-1 |
| roll | 0 | 170 | +0/-0 |
| edator-studio | 5 | 100 | +9,687/-245 |
| progress | 6 | 90 | +720/-333 |
| cockpit | 4 | 50 | +2,684/-30 |
▶Full Activity Index (447 items)
Pull Requests Merged
- fix(sidecar): add wget to alpine image for healthcheck support in house (+3/-1)
- Scheduler: --quiet instead of --verbose (1,440 junk log lines/day) in progress (+4/-1)
- chore(asr): add container healthcheck in edator-cloud (+1/-0)
- One status vocabulary across web, mobile and API labels (#317) in cleanconnect (+422/-729)
- feat: harden generated nginx (server_tokens, security headers, scanner-path refusal) in laravel-coolify (+40/-1)
- Mobile slice 4d: cleaner earnings & Stripe Connect payouts in cleanconnect (+600/-0)
- Compose healthcheck on app service (Coolify running:unknown fix) in crunch (+8/-0)
- security: mask db passwords, connection URLs, and compose bodies on list_resources include_full (#209) in coolify-mcp (+193/-3)
- feat: custom_network_aliases (#254) + MCPB one-click bundle + MCP registry auto-publish in coolify-mcp (+223/-4)
- feat(hub): recut the landing page in Trade — light, photography-led in progress (+430/-182)
- Mobile slice 5a: messaging over REST in cleanconnect (+1016/-1)
- Mobile design 1: editorial foundation — design-language standard, tokens, login, home in cleanconnect (+380/-95)
- M3: perception — crunch's pipeline ported, benchmarked, deployable in edator-cloud (+4321/-13)
- Mobile design 3: swipe-to-archive inbox + teal conversation header in cleanconnect (+186/-87)
- Reverb /app proxy: 404 non-WebSocket requests instead of 500 in progress (+7/-0)
- Mobile design 2: editorial browse + photo profile in cleanconnect (+595/-200)
- CI: run tests against Postgres in edator-cloud (+27/-3)
- Mobile slice 5b: realtime messaging over Reverb in cleanconnect (+598/-85)
- Fix migration order: packs before pack_files (Postgres FK) in edator-cloud (+0/-0)
- M2: pack intake — presigned direct-to-R2 upload + device tokens in edator-cloud (+1591/-76)
- fix(security): patch guzzle, psr7 and phpseclib advisories in notrobophobic (+36/-36)
- fix(security): patch guzzle, psr7 and phpseclib advisories in shop-template (+37/-37)
- Anomaly watch: defended scans stop paging, digests count real requests in cockpit (+119/-16)
- docs: remove hidden agent-directed comment from README (#250) in coolify-mcp (+0/-7)
- docs: remove hidden agent-directed comment from engine README in edator-studio (+0/-6)
- ci: hidden-agenda scan — the #250 pattern is now a build failure in coolify-mcp (+17/-0)
- copy: kill the AI slop — one voice everywhere, dock inside the frame in progress (+120/-127)
- Card-pacing verifier: word anchors resolved through the output-time map (issue #6) in edator-studio (+216/-149)
- copy: sweep the last em-dashes out of the document head in progress (+4/-4)
- fix(pack): duration-scaled ASR timeout + surface lost tracks as warnings in crunch (+65/-7)
- hidden-agenda cut (the #250 confession) + compositor lazy-source OOM fix in edator-studio (+9056/-8)
- boundaries.js: envelope-onset boundary check (issue #5) in edator-studio (+338/-82)
- fix: booking dialog duration field can't be edited (#268) in cleanconnect (+202/-10)
- fix: hide address and access instructions from unaccepted cleaners (#270) in cleanconnect (+166/-8)
- fix: block publishing incomplete job postings (#269) in cleanconnect (+312/-21)
- The Locker: 8 beat sheets banked from the 2026-07-06 estate review in edator-studio (+77/-0)
- docs: mesh access guide + corpus methodology (#211, #212) in devtrends (+145/-1)
- Fix scheduler watchdog: liveness-only restart + socket access (#209) in devtrends (+84/-4)
- M5 slice 1: the library text lane — chunks, ingestion, hybrid search in edator-cloud (+942/-0)
- feat: booking dialog mechanics — duration-aware slots, one address field, honest series defaults (#272 slice A) in cleanconnect (+365/-72)
- fix: one price story everywhere — shared PriceBreakdown component (#271) in cleanconnect (+284/-250)
- fix: seeder availability off-by-one, remove dead wizard upload route (#277) in cleanconnect (+25/-33)
- feat: booking requests visible to cleaners — dashboard section, quotes split, series grouped (#274) in cleanconnect (+458/-7)
- feat: saved addresses end-to-end — auto-save with consent, pre-select for repeat clients (#272 slice B) in cleanconnect (+426/-6)
- feat: wizard hardening — flash toasts, progress bar, success moment, step-4 gating (#275) in cleanconnect (+324/-52)
- feat: fix the editing dead-ends (#273) — address/photos on edit, change pending bookings, per-visit series cancel in cleanconnect (+940/-19)
- feat: booking sheet reshape — one-tap service default, property size on bookings (#272 slice C) in cleanconnect (+44/-0)
- fix: polish sweep — copy, labels, overlaps, a11y (#276) in cleanconnect (+117/-38)
- Admin users: last-seen column, sort, and trustworthy activity tracking in cleanconnect (+234/-4)
- Mobile design language + role-aware IA (Home, tabs, Account) in cleanconnect (+1357/-320)
- Sweep stale identity docs: Laravel 13, Inertia 3, no Filament, HasUid exists (#251) in cleanconnect (+49/-46)
- Add per-number and daily-budget caps to SMS verification sends (#252) in cleanconnect (+140/-0)
- Reconcile booking series lifecycle with the job state machine (#250) in cleanconnect (+484/-28)
- Perceive: kill the OCR bottleneck — 4.5-6.5x, output-identical in edator-cloud (+256/-47)
- Make payment cancellation race-safe against concurrent capture (#247) in cleanconnect (+194/-5)
- Enforce owner-prefix allowlist on private-file streaming (#248) in cleanconnect (+342/-59)
- Extract saved-address Actions from the settings controller in cleanconnect (+107/-50)
- De-Stu the docs: generic paths + sixty-second quickstart in edator (+53/-7)
- Extract the open-jobs feed into a SearchOpenJobs Action in cleanconnect (+69/-38)
- Mobile slice 3b: book a cleaner directly + saved addresses in cleanconnect (+2313/-40)
- Fix the direct-booking lockout: lapse zombie requests, explain refusals up front in cleanconnect (+628/-139)
- fix(feed): redact private-repo activity to the action only in progress (+155/-19)
- Mobile slice 4a: the cleaner's earning journey in cleanconnect (+2539/-19)
- Mobile slice 4b: cleaner availability editing in cleanconnect (+710/-1)
- AI anomaly watch: daily log anomaly detection + in-app run history (#14 #15 #16 #17) in cockpit (+1755/-6)
- Estate-brief history page + in-app log viewer with Axiom drill-down in cockpit (+804/-5)
- Tidy two Larastan dead-branch nits in AnomalyWatcher in cockpit (+6/-3)
- refactor: extract file upload into a StoreUpload Action in cleanconnect (+51/-34)
- Mobile slice 4c: cleaner verification uploads in cleanconnect (+672/-0)
- Fix permanently-red CI: drop PHP 8.3 from matrix in cgcambridge (+5/-4)
- whatsapp sidecar: unauthenticated /health probe + compose healthcheck in house (+12/-0)
- M4 spike: the cut loop — Claude authors, the engine renders in edator-cloud (+495/-0)
- docs: rewrite README — 462 → 125 lines, kill duplication and the false coverage claim in coolify-mcp (+66/-402)
- ci: fix mcp-publisher download URL + manual registry re-publish in coolify-mcp (+8/-2)
- chore(release): 2.14.0 — README refresh + first MCPB/registry release in coolify-mcp (+40/-10)
- chore(compose): healthchecks for asr/vision/ocr sidecars in crunch (+18/-0)
- chore(sidecar): unauthenticated /health + container healthcheck in house (+2/-0)
Pull Requests Opened
- PR #16 opened: M4 fidelity pass: verbatim studio doctrine, engine gates, WARM calibration, source coverage in edator-cloud
- PR #330 opened: One glossary: cleaner not professional, job vs booking rule (#318) in cleanconnect
- PR #27 opened: roll-ship: one-command ship-to-EdAtor (interim for #26) in roll
- PR #1 opened: Add container healthcheck (merge = sandbox restart) in claude-sandbox
Commits
- 10 commits to edator-cloud
- 10 commits to progress
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to polar-flow
- 10 commits to laravel-coolify
- 10 commits to house
- 10 commits to house
- 10 commits to polar-flow
- 10 commits to polar-flow
- 10 commits to cleanconnect
- 10 commits to edator-cloud
- 10 commits to crunch
- 10 commits to coolify-mcp
- 10 commits to coolify-mcp
- 10 commits to coolify-mcp
- 10 commits to coolify-mcp
- 10 commits to edator-cloud
- 10 commits to cleanconnect
- 10 commits to edator-cloud
- 10 commits to progress
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to edator-cloud
- 10 commits to edator-cloud
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to progress
- 10 commits to roll
- 10 commits to edator-cloud
- 10 commits to edator-cloud
- 10 commits to edator-cloud
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to devtrends
- 10 commits to devtrends
- 10 commits to pepti
- 10 commits to helptobuy
- 10 commits to helptobuy
- 10 commits to helptobuy
- 10 commits to shop-template
- 10 commits to crunch
- 10 commits to cockpit
- 10 commits to edator-studio
- 10 commits to edator-cloud
- 9 commits to edator-cloud
- 10 commits to northranger
- 10 commits to northranger
- 10 commits to shop-template
- 10 commits to shop-template
- 10 commits to shop-template
- 10 commits to roll
- 10 commits to roll
- 10 commits to roll
- 10 commits to shop-template
- 10 commits to shop-template
- 10 commits to roll
- 10 commits to roll
- 10 commits to roll
- 10 commits to roll
- 10 commits to roll
- 10 commits to roll
- 10 commits to roll
- 10 commits to roll
- 10 commits to roll
- 10 commits to devteam
- 10 commits to devteam
- 10 commits to devteam
- 10 commits to shop-template
- 10 commits to shop-template
- 10 commits to m365-mcp
- 10 commits to notrobophobic
- 10 commits to notrobophobic
- 10 commits to notrobophobic
- 10 commits to notrobophobic
- 10 commits to notrobophobic
- 10 commits to notification-engine
- 10 commits to shop-template
- 10 commits to shop-template
- 10 commits to shop-template
- 10 commits to shop-template
- 10 commits to shop-template
- 10 commits to notification-engine
- 10 commits to notification-engine
- 10 commits to notification-engine
- 10 commits to notification-engine
- 10 commits to notification-engine
- 10 commits to shop-template
- 10 commits to cockpit
- 10 commits to glutrack
- 10 commits to rezzy.one
- 10 commits to mainbook
- 10 commits to rezzy.one
- 10 commits to glutrack
- 10 commits to glutrack
- 10 commits to glutrack
- 10 commits to glutrack
- 10 commits to mainbook
- 10 commits to mainbook
- 10 commits to mainbook
- 10 commits to devteam
- 10 commits to devteam
- 10 commits to rezzy.one
- 10 commits to rezzy.one
- 10 commits to rezzy.one
- 10 commits to rezzy.one
- 10 commits to northranger
- 10 commits to northranger
- 7 commits to email-relay-worker
- 10 commits to devteam
- 10 commits to coolify-mcp
- 10 commits to northranger
- 10 commits to northranger
- 10 commits to northranger
- 10 commits to northranger
- 10 commits to northranger
- 10 commits to edator-studio
- 10 commits to coolify-mcp
- 6 commits to email-relay-worker
- 5 commits to email-relay-worker
- 10 commits to progress
- 10 commits to edator-studio
- 10 commits to progress
- 10 commits to edator-studio
- 10 commits to crunch
- 10 commits to mainbook
- 10 commits to edator-studio
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to glutrack
- 10 commits to glutrack
- 10 commits to glutrack
- 10 commits to cleanconnect
- 10 commits to edator-studio
- 10 commits to devtrends
- 10 commits to devteam
- 10 commits to devtrends
- 10 commits to northranger
- 10 commits to northranger
- 10 commits to northranger
- 10 commits to edator-studio
- 10 commits to rezzy.one
- 10 commits to rezzy.one
- 10 commits to rezzy.one
- 10 commits to edator-cloud
- 10 commits to edator-cloud
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to mainbook
- 10 commits to cleanconnect
- 10 commits to devteam
- 10 commits to devteam
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to mainbook
- 10 commits to cleanconnect
- 10 commits to devteam
- 10 commits to devteam
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to mainbook
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to glutrack
- 10 commits to glutrack
- 10 commits to edator-studio
- 10 commits to northranger
- 10 commits to roll
- 10 commits to roll
- 10 commits to roll
- 10 commits to roll
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to m365-mcp
- 10 commits to edator-studio
- 10 commits to mainbook
- 10 commits to m365-mcp
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to edator-cloud
- 10 commits to cleanconnect
- 10 commits to claudavel
- 10 commits to cleanconnect
- 10 commits to edator
- 10 commits to edator
- 10 commits to edator
- 10 commits to edator
- 10 commits to edator
- 10 commits to laravel-coolify
- 10 commits to edator
- 10 commits to edator
- 10 commits to edator
- 10 commits to progress
- 10 commits to progress
- 10 commits to progress
- 10 commits to edator-studio
- 10 commits to coolify-mcp
- 10 commits to coolify-mcp
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 7 commits to edator-cloud
- 10 commits to polar-flow-server
- 10 commits to house
- 10 commits to house
- 10 commits to house
- 10 commits to house
- 10 commits to polar-flow
- 6 commits to edator-cloud
- 5 commits to edator-cloud
- 4 commits to edator-cloud
- 3 commits to edator-cloud
- 2 commits to edator-cloud
- 10 commits to house
- 10 commits to house
- 9 commits to house
- 8 commits to house
- 7 commits to house
- 6 commits to house
- 5 commits to house
- 4 commits to house
- 3 commits to house
- 2 commits to house
- 10 commits to house
- 10 commits to progress
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cockpit
- 10 commits to cockpit
- 10 commits to cockpit
- 10 commits to cleanconnect
- 10 commits to cleanconnect
- 10 commits to cgcambridge
- 8 commits to edator-cloud
- 10 commits to claudavel
- 10 commits to claudavel
- 10 commits to coolify-mcp
- 10 commits to coolify-mcp
- 10 commits to coolify-mcp
- 10 commits to crunch
- 10 commits to house
- 10 commits to house
Issues
- Opened: Issue #260 opened: Tool annotations (readOnlyHint/destructiveHint) + registerTool migration — works on SDK 1.x today in coolify-mcp
- Opened: Issue #259 opened: V3 Epic: migrate to MCP TypeScript SDK v2 + spec 2026-07-28 in coolify-mcp
- Opened: Issue #195 opened: Security: PHPUnit eval-stdin RCE probe (2026-07-10) — confirm 404s and PHPUnit not web-accessible in progress
- Opened: Issue #253 opened: Harden nginx: deny PHP execution under writable paths in coolify-mcp
- Opened: Issue #254 opened: application update: support custom_network_aliases (app-to-app DNS) in coolify-mcp
- Opened: Issue #41 opened: Harden nginx: deny PHP execution under writable paths in polar-flow-server
- Opened: Issue #328 opened: [ux] B5: Dark mode — ship it or strip it in cleanconnect
- Opened: Issue #327 opened: [ux] B5: Web housekeeping — dates/times, CTA verbs, EmptyState adoption, back-nav rule in cleanconnect
- Opened: Issue #6 opened: Security: Node.js RCE gadget-chain attempt + .env variant flood (2026-07-09) in pepti
- Opened: Issue #326 opened: [ux] B4 / Design 5: detail screens + wizards to editorial; kill native headers; one back rule in cleanconnect
- Opened: Issue #1 opened: Harden nginx: deny PHP execution under writable paths in cleanconnect-studio
- Opened: Issue #325 opened: [ux] B4 / Design 4: tab screens to Teal Editorial (jobs, quotes, work, account) in cleanconnect
- Opened: Issue #6 opened: Security: nginx executes PHP from writable paths — harden (stuartmason.co.uk) in stuartmason
- Opened: Issue #2 opened: Security: webshell/RCE probe flood (2026-07-10) — verify no shell paths returned 200 in cgcambridge
- Opened: Issue #324 opened: [ux] B3: Mobile — stop discarding server error messages in cleanconnect
- Opened: Issue #1 opened: Security: nginx executes PHP from writable paths — harden (house-whatsapp) in house
- Opened: Issue #323 opened: [ux] B3: Mobile — one confirmation pattern; Celebration and haptics per spec in cleanconnect
- Opened: Issue #322 opened: [ux] B3: Web — booking dialog surfaces errors like every other form in cleanconnect
- Opened: Issue #321 opened: [ux] B3: Web — every destructive action gets the same confirmation in cleanconnect
- Opened: Issue #320 opened: [ux] B3: Web — success feedback must never be invisible in cleanconnect
- Opened: Issue #319 opened: [ux] B2: Mobile money transparency — price before send, fee labelling, cleaner location in cleanconnect
- Opened: Issue #318 opened: [ux] B1: Terminology — "cleaner" everywhere; one rule for job vs booking in cleanconnect
- Opened: Issue #317 opened: [ux] B1: One status vocabulary — single source for labels + colours across web and mobile in cleanconnect
- Opened: Issue #276 opened: [MEDIUM] Client-facing polish sweep: copy/enum leaks, 0-star "New" cleaners, mobile overlaps, a11y names in cleanconnect
- Opened: Issue #270 opened: [CRITICAL][security] Full address + access instructions (key codes) visible to every cleaner on Open jobs in cleanconnect
- Opened: Issue #271 opened: [HIGH][trust] One price story everywhere — booking dialog understates the total by the fee amount in cleanconnect
- Opened: Issue #277 opened: [chore] Dev-env correctness: seeder availability off-by-one, dead wizard upload route in cleanconnect
- Opened: Issue #275 opened: [MEDIUM] Post-a-job wizard hardening: fee shown at budget step, progress bar, success state, consistent validation in cleanconnect
- Opened: Issue #273 opened: [HIGH] Editing dead-ends: address/photos not editable on jobs; pending bookings and series have no edit at all in cleanconnect
- Opened: Issue #272 opened: [EPIC] Booking sheet redesign — 3 decisions, defaults for everything else in cleanconnect
- Opened: Issue #274 opened: [HIGH] Cleaners can't see booking requests — clients sit on "awaiting response" in cleanconnect
- Opened: Issue #21 opened: crunch.json never reaches the sandbox: roll-push ships the pack before crunch finishes in roll
- Opened: Issue #15 opened: compositor: composite pass decoded all cards upfront — 28GB ffmpeg, took the host down (fixed: lazy movie= sources) in edator-studio
- Opened: Issue #268 opened: [bug] Booking dialog: duration (hours) field can't be edited — can't clear the 2, can't type a new value in cleanconnect
- Opened: Issue #210 opened: Coolify env vars are fully duplicated on the devtrends app (last-wins; same wart that broke Umami on cockpit) in devtrends
- Opened: Issue #211 opened: docs: how to reach the mesh SQL endpoint from the sandbox (the missing client half of #206) in devtrends
- Opened: Issue #13 opened: broker: add devtrends to the allowlisted targets in cockpit
- Opened: Issue #269 opened: [CRITICAL][bug] Wizard has no publish guard — incomplete jobs go live as £0/hr with no location in cleanconnect
- Opened: Issue #212 opened: Reconcile the headline corpus number before it goes on camera (~6M observations vs 1.09M raw_items) in devtrends
- Opened: Issue #209 opened: Scheduler health-watchdog can never restart the scheduler (supervisorctl Permission denied) in devtrends
- Opened: Issue #26 opened: Native ship-to-EdAtor: Rust upload command + library UI in roll
- Opened: Issue #299 opened: Held direct bookings still send MessageReceivedNotification to the cleaner in cleanconnect
- Opened: Issue #13 opened: edator-asr: real container healthcheck (python-slim has no curl) in edator-cloud
- Opened: Issue #12 opened: Dashboard: make it the library (packs, transcript, search, delivery) in edator-cloud
- Opened: Issue #11 opened: Port camera presence (on-camera spans) — the last crunch signal in edator-cloud
- Opened: Issue #10 opened: ASR: guard against Whisper hallucination on near-silent tracks in edator-cloud
- Opened: Issue #9 opened: Perf: ASR is now 61% of perceive wall — overlap + parallel tracks in edator-cloud
- Opened: Issue #303 opened: Lapsed pending booking series are never swept in cleanconnect
- Opened: Issue #17 opened: Cost: move cockpit:ai-digest from hourly to weekly (Monday) in cockpit
- Opened: Issue #16 opened: AnomalyWatch agent + cockpit:scan-anomalies command + Finding/alert wiring (critical-only email) in cockpit
- Opened: Issue #15 opened: AnomalyDigest service — deterministic today-vs-14-day-baseline Axiom roll-ups in cockpit
- Opened: Issue #14 opened: AI anomaly watch: daily log/metric anomaly detection that alerts on clear attacks/outages in cockpit
- Opened: Issue #305 opened: Accepted-but-unpaid direct bookings have no home in the cleaner's dashboard in cleanconnect
- Opened: Issue #257 opened: env create: Coolify API writes duplicate rows (upstream bug) — auto-dedupe in the MCP in coolify-mcp
- Opened: Issue #8 opened: M5 slice 2: the image lane — caption + CLIP per unique frame in edator-cloud
- Opened: Issue #7 opened: M4: the cut — spike (crunch.json → Claude → engine render → QC → R2) in edator-cloud
- Opened: Issue #264 opened: V3: MCP Apps extension — infrastructure dashboard UI inside the client in coolify-mcp
- Opened: Issue #263 opened: V3: Tasks extension for long-running deployments in coolify-mcp
- Opened: Issue #262 opened: Structured tool output (outputSchema) — selective adoption with token budget guardrails in coolify-mcp
- Opened: Issue #261 opened: Elicitation: interactive confirmation for destructive operations (capability-gated) in coolify-mcp
- Closed: Issue #317 closed: [ux] B1: One status vocabulary — single source for labels + colours across web and mobile in cleanconnect
- Closed: Issue #209 closed: Audit list_resources include_full for other sensitive nested surfaces (env_vars, private_keys, etc.) in coolify-mcp
- Closed: Issue #254 closed: application update: support custom_network_aliases (app-to-app DNS) in coolify-mcp
- Closed: Issue #253 closed: Harden nginx: deny PHP execution under writable paths in coolify-mcp
- Closed: Issue #299 closed: Held direct bookings still send MessageReceivedNotification to the cleaner in cleanconnect
- Closed: Issue #250 closed: README contains a hidden HTML comment addressed to AI agents ("prompt injection") in coolify-mcp
- Closed: Issue #6 closed: Card-pacing verifier: assert teach items + timed cards land on their words (compositor dry-run gate) in edator-studio
- Closed: Issue #15 closed: compositor: composite pass decoded all cards upfront — 28GB ffmpeg, took the host down (fixed: lazy movie= sources) in edator-studio
- Closed: Issue #5 closed: Envelope-onset cut-point finder (ebur128 momentary loudness) — place in/out points on the real waveform in edator-studio
- Closed: Issue #268 closed: [bug] Booking dialog: duration (hours) field can't be edited — can't clear the 2, can't type a new value in cleanconnect
- Closed: Issue #270 closed: [CRITICAL][security] Full address + access instructions (key codes) visible to every cleaner on Open jobs in cleanconnect
- Closed: Issue #269 closed: [CRITICAL][bug] Wizard has no publish guard — incomplete jobs go live as £0/hr with no location in cleanconnect
- Closed: Issue #212 closed: Reconcile the headline corpus number before it goes on camera (~6M observations vs 1.09M raw_items) in devtrends
- Closed: Issue #211 closed: docs: how to reach the mesh SQL endpoint from the sandbox (the missing client half of #206) in devtrends
- Closed: Issue #209 closed: Scheduler health-watchdog can never restart the scheduler (supervisorctl Permission denied) in devtrends
- Closed: Issue #271 closed: [HIGH][trust] One price story everywhere — booking dialog understates the total by the fee amount in cleanconnect
- Closed: Issue #277 closed: [chore] Dev-env correctness: seeder availability off-by-one, dead wizard upload route in cleanconnect
- Closed: Issue #274 closed: [HIGH] Cleaners can't see booking requests — clients sit on "awaiting response" in cleanconnect
- Closed: Issue #275 closed: [MEDIUM] Post-a-job wizard hardening: fee shown at budget step, progress bar, success state, consistent validation in cleanconnect
- Closed: Issue #273 closed: [HIGH] Editing dead-ends: address/photos not editable on jobs; pending bookings and series have no edit at all in cleanconnect
- Closed: Issue #272 closed: [EPIC] Booking sheet redesign — 3 decisions, defaults for everything else in cleanconnect
- Closed: Issue #276 closed: [MEDIUM] Client-facing polish sweep: copy/enum leaks, 0-star "New" cleaners, mobile overlaps, a11y names in cleanconnect
- Closed: Issue #21 closed: crunch.json never reaches the sandbox: roll-push ships the pack before crunch finishes in roll
- Closed: Issue #251 closed: [docs] Stale identity docs: Laravel 12→13, Inertia 2→3, removed Filament, HasUid inversion in cleanconnect
- Closed: Issue #250 closed: [MEDIUM] Recurring booking series lifecycle holes (Completed unreachable, N+1 emails, held re-fire) in cleanconnect
- Closed: Issue #247 closed: [MEDIUM] Complete/cancel race can overwrite a captured payment to Cancelled in cleanconnect
- Closed: Issue #248 closed: [MEDIUM][security] Private-file streaming trusts stored path (owner-prefix allowlist missing) in cleanconnect
- Closed: Issue #14 closed: AI anomaly watch: daily log/metric anomaly detection that alerts on clear attacks/outages in cockpit
Get the Friday email
What shipped, what worked with the agents, one thing worth nicking.
No spam. Unsubscribe anytime. Privacy policy.