5 min read

Weekly development log 2026‑W42: Decoupled Add-on Contracts, Isolated Knowledge Worker, and Long-Running Task Chains

  • Weekly log
  • Vibe coding
  • Self-hosted AI
  • 2026-W42
Add-on contract decoupling, fencing-token isolated Knowledge Worker, long-running task chains, and Discord artifact integration. A conceptual illustration generated on 2026-10-17, not a product screenshot. It explains this week's theme and does not establish a historical deployment screen or current operational state.

HISTORICAL DEVELOPMENT / EVIDENCE

This week in OpenMake

At October 18, 23:59 KST, main d29c34e7 contains 379 commits and 20 tagged releases (1.94.4 through 1.106.0). This week decoupled the Add-on contracts package (@openmake/plugin-contracts), achieved zero direct Base SQL against add-on owned core tables via Add-on Data Modules, established an isolated Knowledge Worker process with DB fencing tokens, introduced long-running agent task chains that hand off workspaces across limits, added Discord /task commands and artifact delivery, landed the API load benchmark harness with safeFetch redirect security fixes, deployed non-mutating /ready smoke checks, hardened multi-instance backup isolation, closed checkpoint fork isolation leaks, unified Node.js under .node-version as single source of truth, and bundled the macOS 0.3.7 and Windows 0.1.8 Companion release resolving reconnect duplicate hellos and forwarding mise environment paths. Final W42 snapshot distinguishing source records from fresh operational evaluation.

Period
2026-10-12 – 2026-10-18
Git commits
379
Evidence
Git history

01

Full-history review and additions

Across 379 commits, releases 1.94.4 through 1.106.0 shipped. Add-on contracts were isolated into @openmake/plugin-contracts with zero Base SQL against add-on tables and dedicated data modules, Knowledge Worker was separated into its own process with DB fencing tokens, long-running agent task chains landed, Discord /task integration was added, checkpoint fork state was isolated, Node.js was anchored to .node-version as single source of truth, and Companion 0.3.7 (macOS) / 0.1.8 (Windows) shipped.

All reachable history of main 0641c480 was rechecked on 2026-10-18. Counts use committer dates from Monday 00:00 through Sunday 23:59:59 KST, including merges, releases and distinct parallel-branch commits. Commit counts are not feature counts. Tests and operational measurements below are historical source records, not evaluations rerun for this refresh.

02

What changed

  • Add-on boundaries were decoupled into a dedicated contracts package, achieving zero Base SQL against add-on core tables. The new @openmake/plugin-contracts workspace isolates lifecycle contracts (AddonRuntimeHandle, start/stop/drain/resume), activation states, manifests, and contribution DTOs from core (apps/api). Administrator toggles trigger immediate drain on disable and resume on enable, while boot-failed add-ons are partitioned as ADDON_FAILED (503) so routes and chat hooks block them safely. Furthermore, Add-on Data Modules (deleteUserData, exportUserData, purgeExpiredData) govern user deletion, export, and retention directly within each add-on, freezing direct Base SQL against add-on owned core tables to zero. Skill, MCP, and deep-research UI views were extracted to the Web Add-on registry to prevent Base imports (be6e1d5b, 5b6108d1, d9520e77, a13edd42, e00d4523, e37bc868, ea8f2e97, 34444e7e, 2fee1a95, bd6af41f).
  • Knowledge collection was extracted from the API server into an independent worker process. The workers/knowledge-worker entry point and PM2 openmake-knowledge-worker configuration landed alongside job queue migration 004. To prevent data corruption during job re-claims in distributed deployments, DB fencing tokens (JobLease, assertLeaseHeld) reject chunk replacements, embedding inserts, and index swaps from workers that lost their lease. A job cancellation API (POST /api/knowledge/jobs/:id/cancel), heartbeat monitoring, and rollback drill scripts accompany delivery (3b6d0734, ec1f49e9, feee184e, 3c00812d, cf4f4870, 90927920).
  • Agent Tasks gained long-running chains. Rather than terminating tasks when hitting turn, duration, or context limits, a continuation module hands off workspace snapshots and transition prompts to successive task segments (migrations 188 and 189). A runway guard ensures text-only responses without tool usage do not advance segment progress, and segment duration budgets are bounded by remaining chain time. The web UI folds segments under a root card with continuation badges and cumulative token/time metrics (2121b163, 70f959ca, a87a9d94, 3751160a, 52b95855, f38e7726).
  • Resilience against model server outages and device disconnections was strengthened. During prolonged model server downtime or timeouts, tasks are parked rather than failed, automatically resuming once model health recovers. Local tasks interrupted by restarts are parked in device-wait state to continue upon reconnection, and looping auto-recoveries halt at an attempt ceiling. Common timeouts and immediate abort propagation now govern host and external tool calls (79aec5d3, 115061ef, e75a4ad7, 68acb4ee, e79b3c73).
  • Discord bot interactions can directly control Agent Tasks. The /task slash command and cancellation buttons allow users to initiate, approve, and cancel tasks from Discord channels, while the bot monitors progress in real time. Completed tasks deliver markdown artifacts and workspace files (file_ops) as Discord file attachments. Uploaded channel images and documents forward to the backend for analysis, and markdown tables auto-convert to bold lists to render cleanly in Discord (3d63b3e5, 171bfa02, dd520537, 16f9688f, 73e97bc7, 9e9ec147).
  • Two shadow decision gates joined the decision adapter. A search-requirement gate and an answer-grounding gate verify sentence by sentence whether model claims are supported by search citations. Straightforward queries bypass multi-step planning to run directly with search decisions, and internal orchestrator task names are suppressed from answer texts (40946847, 93580625, ee7d9e70, 32ea6a2d, 5322c324).
  • Operational benchmarking and release verification tools were established. The scripts/bench/api-load.mjs harness and baseline comparison tool (D6) enforce a settle period (--settle, default 90s) so boot memory spikes do not contaminate baselines. Release candidate matrix tools check test suites, runbook section 11 formally recorded completion of staging and production deployment on 2026-10-16 (ca4d3573, 3d259d57, 2d885d9a, 6a07e962, 7f9f3f14), and checkpoint fork leaks were closed so child branch modifications cannot taint parent task state (51f99d52).
  • Security vulnerabilities and UI edge cases were resolved, while runtime baselines and deployment operations were unified. safeFetch strictly honors redirect: 'manual' and 'error', preventing bypasses of MCP SDK same-origin redirect policies. Upload file names are truncated to 200 bytes to prevent ENAMETOOLONG errors, and chat quick-start cards received clearer descriptions and improved selection grids (07c5d1be, b0c8933c, 84889d7f, adf04868). Node.js was anchored to root .node-version (24.21.0) as the single source of truth across installers, deploy scripts, PM2 daemons, and containers (cf6f8298, 26ef5798), release-environment deploy smoke tests switched to a non-mutating /ready check (472527b5), shared backups isolate other instances (b2de90d5), and non-interactive uninstall confirmations were hardened (0c51417c). Companion macOS 0.3.7 and Windows 0.1.8 shipped with server releases 1.105.4 and 1.106.0 (e8926ef0, 490f925b, 176a552a, d29c34e7).

Source evidence

Evidence

OPENMAKE · MIT OPEN SOURCE

Back to Engineering Log