Repository navigation
Releases: benaiah-muga/ChasteBusinessOS
Release list
v0.5.0
0.5.0
The release that was never cut. M7βM13 had been accumulating under
[Unreleased] since 0.4.0 while package.json still read 0.2.0, so nothing
in the repository named the version it was actually on. This release closes
that gap and, on the way, puts tests around the two surfaces a new business
touches first: the setup wizard and the spreadsheet import.
Test coverage for the wizard and the CSV importer
PR #86 shipped 19 TypeScript files with zero tests, and the onboarding wizard
that followed it was untested too. 140 tests now cover:
lib/csv.tsβ the RFC 4180 rules that protect imported data: quoting,
""escapes, CRLF/LF/CR, embedded newlines, BOM, ragged rows, and header
guessing.lib/onboarding-flow.tsβ the wizard's decisions, extracted out of the
component so they can be tested without rendering React: screen order per
path, what makes a profile submittable, which steps come back as deferred,
and how a failure is explained.components/onboarding/wizard.tsxβ the real component, driven in
jsdom: disabled Continue, the description counter, the import path reaching
the data screen, "start from scratch" skipping it, expired-session and
rate-limit recovery, and a skipped step returning on the done screen.- The shell app and module catalogs #86 edited β a
moduleIdthe
switchboard doesn't know ships an app nobody can ever see.
Three real bugs the tests found
- An inch mark no longer disappears.
parseCsvopened a quoted field on
any", so a product named6" pipewas imported as6 pipe. RFC 4180
treats a quote as data unless it starts a field. - "Unit Price" now maps to the price.
guessMappingran its substring
pass per field, sounitLabelβ declared beforesalePriceβ claimed a
"Unit Price" column on the strength of "unit" alone and left the price
unmapped. Exact matches are now resolved for every field first, and short
synonyms (id,ean,upc) match exactly only, so a "Paid" column no
longer reads as an SKU nor a "Cleaner" column as a barcode. - One rate limit no longer rewrites the next. The failure mapping assigned
back into its shared lookup table, so the first throttled request's
countdown became the hint for every laterrate_limitedfailure.
Housekeeping
package.jsonnow reads0.5.0, agreeing with this release.- One gap is recorded rather than invented:
v0.3.0was tagged and released,
butCHANGELOG.mdhas no[0.3.0]section, so what shipped in it is
described only in that release's own notes.
jsdom and @testing-library/react are new apps/web dev dependencies;
pnpm-lock.yaml is regenerated with them.
Full changelog: https://github.com/benaiah-muga/ChasteBusinessOS/blob/main/CHANGELOG.md
v0.4.0
v0.4.0 (2026-08-26)
Tabbed app framework, overview dashboards, settings rebuild, and dashboard density pass.
Highlights
- AppFrame adopted across all module pages β consistent shell with breadcrumb, tabs, live counts, and
persistKeyfor tab memory - Overview dashboards for CRM, POS, Inventory, Purchasing, Manufacturing, Documents, Support β KPI stat cards, needs-attention lists, recent activity
- CRM pipeline drag-and-drop β HTML5 DnD with optimistic moves, rollback, and aria-live status
- Settings rebuilt β four tabs (Appearance, Workspace, Localization, AI & Automation) with device-local preferences and
/api/ai-config - Dashboard density β fits one desktop screen, collapsible setup, trimmed feed, 3-column layout
- Meridian default theme for new devices
- Hydration mismatch fix, theme flash fix, dev-server port fallback
Also includes (since v0.2.0)
- Bank feeds & reconciliation, sales tax filing
- Console tabs, pinned apps, rail affordances, dark mode, digital clock
- Product sale prices & archiving, purchasing workflow, @mentions
- CRM full surface, governed analytics, boot-time auto-migration
- Next.js 16.3 agent tooling, Cache Components adoption
- Manufacturing module split, Inventory module surface, Purchasing UI
- Customer care agent module (ADR 0025)
- Security hardening pass (ADR 0024) β 12 categories of fixes
- Durable job queue, governance eval harness
- Design system + console redesign (ADR 0015)
- ADRs 0015β0030
Breaking changes
manufacturing.*capabilities moved to their own module β orgs with explicitenabled_modulesmust add"manufacturing"- Capability output contracts renamed (
reservedThousandths,expectedGoodThousandths, etc.)
See CHANGELOG.md for full details.
v0.3.0 β Manufacturing module, full Inventory & Purchasing surfaces
Highlights
π Manufacturing module (ADR 0026)
- New governed
modules/manufacturingpackage: multi-level BOMs with per-component scrap allowances, work orders (draft β release β partial completions β close), production runs with whole-run reversal, cost previews at moving-average prices, upstream lot traceability for recalls - Writes exclusively through the shared inventory ledger primitives β one append-only stock ledger, many writers
π¦ Inventory depth
- Stock reservations with available-to-promise (overbook refusal)
- Cycle counts: snapshot β enter β post variances, with snapshot-drift guard
- Stock locations and lot balances with derived on-hand quantities
- Per-item movement history and moving-average valuation in the stock report
π₯οΈ Full human surfaces
- Tabbed Inventory and Manufacturing consoles covering every capability
- New Purchasing page: vendors, purchase orders with SKU-linked lines, goods receipts, three-way matched bills, policy-gated payments, AP aging
- Design-system shell refresh across all pages
π§ Correctness fixes
- Shadow timestamp columns that broke FX rate posting (critical)
- Boot-time conformance failures from date schemas in hr/accounting capabilities
- Level-one BOM explosion bug; premature work-order closure on partial builds
- New worker capability: recurring-invoice expansion via the durable job queue
β Verification
pnpm typecheck && pnpm lint && pnpm testgreen across all packages (26 tasks)- 7-test ledger-backed manufacturing lifecycle suite passing against live DB
demo:m4passes live
Merged via #73. Docs: ADR 0026, completed ADR index, ROADMAP M6.5, SOC2 mapping updated.
enabled_modules: add "manufacturing" to keep the new page visible.
v1-archive
Container images (GHCR)
ghcr.io/benaiah-muga/chastebusinessos:api-v1-archive
ghcr.io/benaiah-muga/chastebusinessos:web-v1-archive
ghcr.io/benaiah-muga/chastebusinessos:worker-v1-archive
ghcr.io/benaiah-muga/chastebusinessos:migrate-v1-archive
Changelog
v0.1.0
Container images (GHCR)
ghcr.io/benaiah-muga/chastebusinessos:api-v0.1.0
ghcr.io/benaiah-muga/chastebusinessos:web-v0.1.0
ghcr.io/benaiah-muga/chastebusinessos:worker-v0.1.0
ghcr.io/benaiah-muga/chastebusinessos:migrate-v0.1.0
Changelog
[0.1.0] - 2026-08-05
First tagged release. Early alpha β not recommended for production workloads.
Added
- Messaging module: internal messaging (
modules/messaging) with send/read
commands, unread counts, and a full web UI at/messaging. - Buzz bridge: signed outbound webhook delivery from the worker
(HMAC-SHA256X-Chaste-Signature) plus a validated inbound webhook endpoint
on the API β external messaging with zero configured cost in a stock install. - Email delivery: transactional email outbox with pluggable adapters β
Resend (REST) preferred, then SMTP (nodemailer), then console. Provider
auto-detection, retry + crash-recovery lease, and a/emailadmin page. - Encrypted backups: AES-256-GCM snapshot/restore (
CHASTE_BACKUP_KEY)
with S3-compatible or local object stores, worker flush loop, restore CLI
(pnpm restore), and a/datamanagement page. - Docker deployment: multi-target
Dockerfile(migrate,api,web,
worker), productiondocker-compose.prod.yml(Postgres + Redis + one-shot
migrations),.dockerignore, and per-provider guides (AWS, GCP, Azure,
Fly.io, Render, Railway, Supabase/Neon). - Deep CRM module (ADR 0008): CRM is now the flagship "deep module" template.
Backend gainscrm.customer.update,crm.customer.setStatus(guarded lifecycle
transitions),crm.customer.delete(soft-delete/archive),crm.contact.create/
crm.contact.delete,crm.interaction.log, pluscrm.customer.get,
crm.contact.list,crm.interaction.listqueries. Two new namespaced tables
(crm_contacts,crm_interactions) with cascading FKs and org-scoped indexes.
New permissions:crm.customer.update,crm.contact.manage,crm.contact.read,
crm.interaction.write,crm.interaction.read. - CRM UI depth: customer detail page (
/crm/customers/[id]) with header KPIs,
pipeline status transitions, contacts panel, and an activity timeline; deepened
customer list with status filter, search, and per-row view/edit/delete actions
(edit in modal, delete via confirm dialog). - Shared UI primitives:
Modal,ConfirmDialog,StatusBadge,Timeline
components inapps/web/src/components/ui/for reuse across module workspaces. - Typed API client:
getCustomer,updateCustomer,setCustomerStatus,
deleteCustomer,listContacts,createContact,deleteContact,
listInteractions,logInteraction,listCustomersFilteredmethods on
@chaste/api-client;ContactandInteractionDTO types. - Business partner master data (ADR 0009): introduces a platform-level
business_partnerstable withtype: person | organization, holding the
shared identity (name, email, phone, city, country, notes) for any party the
org has a relationship with. Module role tables (crm_customers,
pur_vendors,hr_employees,crm_contacts) gain a nullable
businessPartnerIdFK β one identity per party, multiple roles (customer AND
vendor, employee AND contact). Platform module ownscore.bpartner.create,
.update,.delete(archive),.list,.getwith Zod schemas, outbox
events, and audit. New permissions:core.bpartner.manage,core.bpartner.read. - Directory UI: new
/directorypage (nav: "Directory") listing all business
partners with type filter, search, KPI strip, create/edit modal, and archive
confirmation β the single place to manage parties across the org. - Horizon A platform: multi-branch (list/create/update/set_active/grant),
capability gap tickets, in-app notifications foundation. - Horizon A platform (cont.): capability catalog (search/list) + placement
recommender (core.capability.gap.recommend) mapping gaps to kernel / private
cloud / local extension / marketplace. - Agent harness (C5):
runFollowUpTurnre-entry for deterministic follow-up
execution, self-contained worker harness withstatus: done|failed,firedAt,
and persistedsessionId. - Scheduling & comms (C3/C6): calendar CRUD with natural-language event
creation (block/schedule/book), email outbox with console adapter and worker
flush, templated invite/reminder/digest/gap-ticket emails. - Marketplace (S4): publish command gated on confirmed/resolved gap tickets,
rejectingplatform_roadmapplacements. - Platform UI: calendar week view, reminders, notifications (read/unread),
capability gap filing with catalog search + placement, branches page, and a
top-bar branch switcher when the org has multiple accessible branches. - Chat: session history API + top-bar continue/new chat, like/dislike
feedback, auto titles. - Safety:
resource_link/gap_ticketUiParts with server-side href
allowlist verification. - PWA: installable web manifest + service worker registration.
- Evals: expanded real-world scenario seed set for model readiness.
- ADR 0006 (custom AI orchestration), ADR 0007 (harness memory/self-dev).
- Specs: agent harness, semantic memory, self-development, scheduling/comms,
portable modules, chat sessions/feedback, UI correctness, PWA/Tailscale
access, model eval suite, messaging/Buzz, backup and deploy. - Passive memory inject foundation on chat turns.
- Coding agent provider contract including optional Buzz adapter detection.
- Lightweight prompt-injection guardrails in orchestrator.
- Foundation: monorepo scaffold (Turborepo, TypeScript strict, Fastify API,
Next.js web app, PostgreSQL + Drizzle, kernel command/query bus); business
modules (CRM, Accounting, Inventory, Purchasing, Manufacturing, HR, Platform);
custom AI orchestrator + workflow engine; multi-turn conversation intelligence;
transactional outbox worker; persistent memory; optional Langfuse tracing;
user management, RBAC, settings, marketplace; and the initial web UI. - E2E contract:
apps/api/src/e2e.tsexercises the full CRM depth flow
(update β status β contact β interaction β soft-delete β hidden-from-list). - AI harness test suite: easy / medium / complex humanlike chat scenarios
across CRM, Accounting, Purchasing, Inventory, and HR (plan β confirm β
execute, cross-step wiring, multi-turn sessions), plus RBAC permission-denial
and prompt-injection guardrail coverage. - Expanded VISION / ARCHITECTURE / product-architecture-next for harness, gaps,
self-dev, multi-branch, proactive agents.
Changed
- API version: health payload now reports the version from
package.json
(single source of truth) instead of a hard-coded string. - AI stack: remove Mastra; custom orchestrator +
AiProvider+ workflow
engine only (see ADR 0006). - Config:
mastra.*observability renamed toobservability.*
(CHASTE_OBSERVABILITY_ENABLED; old env alias still accepted). - README rewritten with professional styling, badges, and simpler setup docs.
- Replace em dash punctuation in README for clearer, more consistent formatting.
- Enhanced CRM and vendor forms, admin configuration defaults, and dashboard charts.
- Updated UI components, styles, and theme tokens across the web application.
Removed
@mastra/*dependencies and Mastra agents/tools/storage wrappers- Mastra agent fallback path in chat orchestrator
Fixed
- Inbox once-only (R2/R3): confirm/cancel now resolve the canonical approval
by itstoolCallId(not the pendingid), so approving/denying a multi-step or
single-command plan updates the durable Inbox item and cross-surface
"first-responder-wins" actually engages β no more danglingpendingapprovals. - Autonomy audit gate:
effectiveAutonomyForPlanno longer lets a later
step'sminAutonomyForAutomask an earlierexternal/execconfirm floor β
the reported/audited autonomy for a plan is now the strictest step. - Channel session re-homing: rebinding a thread target to a new session now
removes it from the old session's index, so deleting the old session can't
clobber the fresh binding. - Scheduler/email reliability: a single
notifyUserfailure marks that
reminderfailedinstead of dropping the whole batch; email outbox gains a
crash-recovery lease (rows stuck insendingpast a lease window are reclaimed
toqueuedand retried). - Single-command approvals mirror to the Inbox β parity with multi-step plans,
so a single external/write action is approvable from mobile/Slack and from
unattended sessions. - Deterministic scheduling parsers:
parseScheduleFireAt/parseScheduleRange
accept an injected clock, enabling stable, timezone-robust unit tests. - DB dependency hygiene:
@chaste/dbnow declares itszoddependency.