Skip to content

Releases: benaiah-muga/ChasteBusinessOS

v0.5.0

Choose a tag to compare

@benaiah-muga benaiah-muga released this 09 Sep 18:23

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 moduleId the
    switchboard doesn't know ships an app nobody can ever see.

Three real bugs the tests found

  • An inch mark no longer disappears. parseCsv opened a quoted field on
    any ", so a product named 6" pipe was imported as 6 pipe. RFC 4180
    treats a quote as data unless it starts a field.
  • "Unit Price" now maps to the price. guessMapping ran its substring
    pass per field, so unitLabel β€” declared before salePrice β€” 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 later rate_limited failure.

Housekeeping

  • package.json now reads 0.5.0, agreeing with this release.
  • One gap is recorded rather than invented: v0.3.0 was tagged and released,
    but CHANGELOG.md has 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

Choose a tag to compare

@benaiah-muga benaiah-muga released this 26 Aug 15:13

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 persistKey for 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 explicit enabled_modules must add "manufacturing"
  • Capability output contracts renamed (reservedThousandths, expectedGoodThousandths, etc.)

See CHANGELOG.md for full details.

v0.3.0 β€” Manufacturing module, full Inventory & Purchasing surfaces

Choose a tag to compare

@benaiah-muga benaiah-muga released this 24 Aug 12:52
7d67828

Highlights

🏭 Manufacturing module (ADR 0026)

  • New governed modules/manufacturing package: 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 test green across all packages (26 tasks)
  • 7-test ledger-backed manufacturing lifecycle suite passing against live DB
  • demo:m4 passes live

Merged via #73. Docs: ADR 0026, completed ADR index, ROADMAP M6.5, SOC2 mapping updated.

⚠️ Note for orgs using explicit enabled_modules: add "manufacturing" to keep the new page visible.

v1-archive

Choose a tag to compare

@github-actions github-actions released this 22 Aug 01:00

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

Choose a tag to compare

@github-actions github-actions released this 05 Aug 13:31

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-SHA256 X-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 /email admin 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 /data management page.
  • Docker deployment: multi-target Dockerfile (migrate, api, web,
    worker), production docker-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 gains crm.customer.update, crm.customer.setStatus (guarded lifecycle
    transitions), crm.customer.delete (soft-delete/archive), crm.contact.create /
    crm.contact.delete, crm.interaction.log, plus crm.customer.get,
    crm.contact.list, crm.interaction.list queries. 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 in apps/web/src/components/ui/ for reuse across module workspaces.
  • Typed API client: getCustomer, updateCustomer, setCustomerStatus,
    deleteCustomer, listContacts, createContact, deleteContact,
    listInteractions, logInteraction, listCustomersFiltered methods on
    @chaste/api-client; Contact and Interaction DTO types.
  • Business partner master data (ADR 0009): introduces a platform-level
    business_partners table with type: 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
    businessPartnerId FK β€” one identity per party, multiple roles (customer AND
    vendor, employee AND contact). Platform module owns core.bpartner.create,
    .update, .delete (archive), .list, .get with Zod schemas, outbox
    events, and audit. New permissions: core.bpartner.manage, core.bpartner.read.
  • Directory UI: new /directory page (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): runFollowUpTurn re-entry for deterministic follow-up
    execution, self-contained worker harness with status: done|failed, firedAt,
    and persisted sessionId.
  • 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,
    rejecting platform_roadmap placements.
  • 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_ticket UiParts 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.ts exercises 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 to observability.*
    (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 its toolCallId (not the pending id), 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 dangling pending approvals.
  • Autonomy audit gate: effectiveAutonomyForPlan no longer lets a later
    step's minAutonomyForAuto mask an earlier external/exec confirm 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 notifyUser failure marks that
    reminder failed instead of dropping the whole batch; email outbox gains a
    crash-recovery lease (rows stuck in sending past a lease window are reclaimed
    to queued and 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/db now declares its zod dependency.