21 slides · use ← → · built from the report

existing-system audit

SaaS ERP

Two years of good engineering and not a single launch. The system can quietly block the shop floor and has no way to say so — which is why the owner of two working factories keeps stepping back.

See the full report ↗1 / 21

PL1 · direction · proposed

A complaint needs an address: the chat becomes a tracker, Sentry files issues itself.

Addresses
RC1 (the owner's complaint has nowhere to land) · D6 (Telegram as a task board) · R5 (the owner stalls on data entry again) · R1 (the line stops and no one finds out) · D3 (zero observability)
Relation
refines S3 (the task board is Telegram)
Operations
Three actions, no meetings. One-off: an agent goes through the chat export and files every unclosed requirement, complaint and promise in GitHub Projects, with the original date and author. Standing: the same pass once a week over new messages, exiting quietly when there is nothing to file. Automatic: the Sentry integration files an issue for every new production error, with no human in the chain.
Executed by
GitHub Projects on the backend repository: a one-off conversion of the history, a weekly agent pass over the chat, a Sentry → GitHub Issues integration
Review
2026-11-13

This is the cheapest policy in the set, and it targets the most expensive defect. Everything breaks in one place: the channel that serves as the task board has no state.

See full: Policies & Operations ↗2 / 21

PL2 · direction · proposed

main is guarded by green rspec, and every run publishes coverage.

Addresses
RC3 (the signal exists but costs nothing) · D1 (rspec outside CI)
Relation
replaces S2 (a known test failure is the normal state); ratifies S1 (quality is ensured locally and voluntarily)
Operations
Automation: a job in the existing workflow. SimpleCov in the :test group, a coverage artifact as the job's output, and a threshold below which a merge fails. No one has seen the number yet, so the first step is to make it visible, not to quarantine right away. The seven known failures are split up rather than quarantined wholesale : six in the video subsystem (videos_spec, aws_events_controller_spec) go into quarantine with an issue and a date, and the seventh, users_controller_spec, is not eligible for quarantine because it is a live defect, so it gets fixed.
Executed by
A required GitHub Actions check on main and staging (deterministic rung)
Review
2026-09-13

The project has 6,114 rspec examples and 95.71% line coverage. The BE developer runs them regularly , so the suite is not dead: it covers the changes that pass through his hands.

See full: Policies & Operations ↗3 / 21

A USD 100k grant equals what's already spent, and its condition is launch.

A startup grant of up to USD 100k requires a launched version of the product, preferably with revenue. The thread lived for a week in December 2025 and died after a meeting was rescheduled. Over the following seven months the word “grant” does not appear in the export once.

See full: Business Context: Less Money Than It Seems ↗4 / 21

The fallback path got full development and seven e2e tests. The loop didn't.

In May 2025 the developer designed a “fallback function so the admin could manually enter data about completed processes”. In June 2026 it got full CRUD for shift processes on the web and seven e2e specs. The mobile half of the loop, the half that carries the promise, has not been tested on people since August 2025.

See full: Product: A Promise Tested Once ↗5 / 21

Three people, three roles, and none holds the engineering direction.

Ownerdomain truth, priorities, money, access to two factoriestechnical strategy — no expertise
BE developerbackend domain, Heroku infrastructuredoes not take on improving the machine or engineering leadership
FE developerCI, ADRs, PRDs, harness, e2e, and in practice the backend toono deep BE expertise; on 2026-07-30 asks whether he should look for a job
See full: Organization: No Adult in the Room ↗6 / 21

Three coverage numbers nobody had seen before this audit.

  • 95.71%backend coverage from rspec, 6,114 examples
  • 79.05%backend coverage from e2e, 303 tests
  • 80.72%frontend coverage from e2e
  • 0of these had ever been measured before this audit
See full: Engineering: High Quality With No Gates at All ↗7 / 21

The system has a built-in way to block work and none to report it.

A quantity reservation with no expiry stops the next person on the operation. Observability is zero. For a factory, time to detection equals downtime, and the detection mechanism today is the owner writing in Telegram.

See full: The Mechanism That Stops a Shop Floor ↗8 / 21

Seven strategies already in force, and only one is written down.

RuleWritten where?Health
S1Quality is ensured locally and voluntarily, not by gates. Evidence : 6,114 examples, 95.71% coverage, and not a single job that runs them.not written down anywherethe suite is excellent, protects no one
S2A known test failure is the normal state. Evidence : seven rspec failures are known to the developers, documented and tolerated to this day.shadow — held by the machine, not a documentworks as a norm and destroys the signal
S3The task board is Telegram. Evidence : 5,735 messages, no tracker; the launch date, the grant and the measured complaint all dissolved the same way.not written down anywhereno — the channel has no state
S4Architectural discipline is set by the frontend. Evidence : FSD boundaries as CI errors, two ADRs, a 426-line harness, pinned skills.ratified in frontend_v2/CLAUDE.md and the CI gatesyes — the project's best-working strategy
S5Backend context lives in the private memory of the developer's agent. Evidence : there is no root CLAUDE.md or AGENTS.md; across the whole repository there are two harness artifacts, both frontend.not written down anywhereno — knowledge does not accumulate
S6When adoption stalls, we rewrite. Evidence : v1→v2 since February 2026, a wave of 70/44/35 commits a month, a rework of the materials model in July 2026. Since September 2026 the mobile app is being rewritten, and there has still never been a launch at a factory .not written down anywhere, but prescriptive in practiceproduces quality, does not produce a launch
S7No one holds the product promise. Evidence : the loop failed in August 2025 and has not been tested since, the fallback path grew up alongside it, and there is no written trace of a decision about this .by default — through the absence of a decisionno
See full: Strategy Already in Force ↗9 / 21

Six causes, and none of them is about code quality.

Getting into the system costs more than getting out of it; failure is silent and dangerous at the same time; the owner's complaint has nowhere to go; a known defect costs nothing to ignore; the promise is neither tested nor withdrawn; no one is responsible for the engineering machine and the sequencing of work. Rewriting code cures none of the six; all six are cured by decisions about where the signal goes and who reads it.

See full: Root Causes ↗10 / 21

Risk map: the dangerous quadrant is the quiet one, not the loud one.

noticeability →
loud but unlikelyloud and likelyquiet and unlikelyquiet and likely — the most expensiveR1The line stops: no error tracking, the signal comes from a personR3The scan loop: noticeability is zero until the first day on the shop floorR6Mobile app: the audit has not seen it, likelihood unknownR4Money: the receipts are visible, the real accounting is in the owner’s spreadsheetR5The owner stalled on data entry: materialized in September 2026R2A developer leaving: reduced by the mobile rewrite, not by an agreement
likelihood →
  1. R1The line stops: no error tracking, the signal comes from a person
  2. R3The scan loop: noticeability is zero until the first day on the shop floor
  3. R6Mobile app: the audit has not seen it, likelihood unknown
  4. R4Money: the receipts are visible, the real accounting is in the owner’s spreadsheet
  5. R5The owner stalled on data entry: materialized in September 2026
  6. R2A developer leaving: reduced by the mobile rewrite, not by an agreement
Six risks: likelihood versus noticeability. Positions are estimated from each risk's description in the register below, not measured.
See full: Risk Register ↗11 / 21

Six risks. The most expensive is the one nobody will notice.

RiskFlagLikelihoodWould you notice?
R1The line stops, and nobody finds outhigh in the first week of real work: both scenarios already happened in 2025close to zero: there is no error tracking, Heroku logs sit in a ~1,500-line buffer with no search, and the only reliable signal channel is the owner writing in Telegram
R2The sole knowledge holder, also the only leadership candidate, leavesreduced but not removed: the project is full-time work for the FE developer, and the 2026-07-30 question about looking for a job came from a lack of tasks; since September 2026 he has been rewriting the mobile app. The workload came from a new rework, not from an agreement, so the risk returns once the rework is finishedhigh: it has already been said out loud, a rare case of a loud risk
R3The scan loop still does not work, and this surfaces only after onboardingunknown, and dangerous for that reason: the audit has no access to the mobile app repositoryzero until the first day on the shop floor
R4The money runs out before launchmedium: the amounts fluctuate, there is a five-month gap in payments, and an amount is outstandingmedium: the receipts are visible, but the real accounting is kept in a spreadsheet the audit cannot access
R5The owner stalls on data entry againmaterialized: as of 2026-09-08 there is still no factory launch; the owner stalled on how to group the equipment, and there is still no loading mechanism eitherhigh: it shows as days of silence in the channel
R6The mobile app contains defects unknown to the auditunknownlow
See full: Risk Register ↗12 / 21

Seven debts, and the costliest one shows up on no dashboard.

DebtKind
D1rspec outside CIorganizational and technical
D3Zero observabilitytechnical
D4Two client surfaces for two pairs of handsstrategic
D8Zero security gates and zero dependency hygienetechnical
D5Backend context exists only in an agent's private memoryknowledge
D6Telegram serves as the task boardorganizational
D7A quantity reservation with no expirytechnical
See full: Debt Ledger ↗13 / 21

Eight credits. The machine is well built — and connected to nothing.

CreditStatus
C1The backend test suite: 6,114 examples, 95.71% of lines, 82.12% of branchesworks, but covers only half of the changes
C2303 e2e tests in 110 files, with fixture infrastructureconfirmed — the suite passes in full
C3e2e fixtures as a reference set for agentic onboardingconfirmed — the most valuable credit for B3
C4The system already produces a product's full tech cardconfirmed — this is the system's output, not its input
C8e2e gives 79% backend coverage and 81% frontend coverageconfirmed
C5Documentation: PRD, user stories, data models, two ADRsconfirmed
C6The frontend's agent harnessconfirmed
C7The owner as a domain oracleconfirmed
See full: Credit Ledger ↗14 / 21

Easy wins: each costs one day of agent time or less.

WinFeedsDayStatus
E2An rspec job in the existing workflow, plus quarantine of the seven known failures with an issue. Executes PL2.verification: tests in the pipeline0.5
E3Record coverage from both suites, not just rspec: SimpleCov in the :test group gives 95.71% from unit tests and 79.05% from e2e (the same SimpleCov in the Puma process), and vite-plugin-istanbul plus nyc give 80.72% of the frontend. A CI artifact and Codecov make C1 and C8 visible to the team for the first time; today nobody has seen any of these numbers.verification: coverage floor0.5
E4Sentry in the backend and in both frontends. Source maps are already uploaded; only the receiver is missing. Set it up with the Sentry → GitHub Issues integration from the start, because that is what makes PL1 complete: the machine signal lands in the same tracker as the human one. Closes half of D3.observability: error tracking0.5
E5Connect a log drain on Heroku. The logs currently live in Logplex: a buffer of ~1,500 lines kept for at most a week, with no search . A drain forwards every line to an external service that stores it and makes it searchable, so investigating a failure on the shop floor stops meaning “reproduce it again.”observability: structured logs0.2
E6A separate database for rspec in the test stack. It removes the deadlock that keeps the suite from starting normally.verification: fast feedback0.2
E7A top margin on the QR label. The developer named this as the cause of poor scanning in August 2025.release safety: print quality0.1
E8A root AGENTS.md for the backend modeled on frontend_v2/CLAUDE.md: rules, commands, pitfalls, a domain map. Closes D5.agent harness: context routing1.0
E10brakeman and bundler-audit as gems, plus two jobs in the existing workflow. Closes half of D8.static gates: security scanners0.3
E11.github/dependabot.yml for two ecosystems (bundler and npm). The second half of D8.dependency hygiene: automatic updates0.2
E9A script to dump and restore the production database, with verification. It is a prerequisite for any pilot on real data.release safety: verified backups0.5
See full: Easy Wins ↗15 / 21

Seven bets, each with a verdict: do, wait or decide.

BetVerdictAddressesCost
B1Make failure visible and safe: error tracking, a timeout on the reservation of an unfinished process, idempotent process creation, an alert on a blocked operation. R1 · RC6 · D3 · D7Do≈1 week
B2One product, one workshop, in parallel with the existing books. Load the product from whatever source the owner actually has (Q6), by hand or with an agent. The readiness criterion already exists: the system must produce a tech card that matches the paper one C4. Then run the full cycle through to a closed shift and calculated pay, reconciling against the existing books every day. RC4 · RC5 · R3 · R5Do≈6 weeks, 2 of them on the shop floor
B4Appoint an owner of the engineering machine: one person responsible for CI, deploys, observability and the sequencing of work, with the access that makes this possible. There is one candidate. RC2 · R2 · D5Doone conversation + access
B3Agentic onboarding as a repeatable mechanism: a skill that reads the owner's source data (in whatever format Q6 establishes) and fills a factory through the API, idempotently and with a dry run. It learns from the e2e fixtures as a reference set C3 and is checked against them. RC5 · C3Wait for B2≈2 weeks after
B5The mobile app: either audit it with the same discipline, or officially recognize web mode as primary and withdraw the promise. R6 · RC4Decide≈3 days for the audit
B7A one-off QA consultation on the existing e2e suite: is the methodology right, and which critical paths are missing? Not a hire, but an outside look at what is already written. C2 · R3 · RC4Buy oncea few hours of consulting
B6The v1→v2 migration was completed without this report: the v1 build was removed from the pipeline on 2026-07-10, and the directory itself was added to .slugignore on 2026-07-22.DoneD4
See full: Strategic Bets ↗16 / 21

The sequence: what happens now, next quarter, and on the horizon.

Now (weeks)
Next quarter
Horizon 2
Safety and the machinethe precondition for everything else
Easy Wins E2‑E11 (≈4 days)
B1 — failure is visible and safe
B4 — an owner for the machine
Launchthe only thing that changes the position
Pilot date
B2 — pilot on one product (6 weeks)
Second factory
First external client
Cost of entry
B3 — agentic onboarding
Onboarding as part of the product
Clients
B5 — decision on mobile
Money
Self-signup and billing
Grant track
See full: Investment Priorities ↗17 / 21

Two supposed SaaS ERP advantages are standard in the niche: shop-floor scanning and locality.

Shveika 8 claims more than 550 Ukrainian enterprises, ships barcoding of technological operations in the ready-made solution, and sells a productized paid onboarding, “Prymirka” (2 months, UAH 11,000, credited toward the purchase). The mobile loop on the shop floor is not a SaaS ERP differentiator but an expected feature, shipped by the competitor and unconfirmed here.

See full: The market: the niche is taken, and more firmly than it seemed ↗18 / 21

The 1C/BAS ban doesn't compel private factories; the window is narrower than it seemed.

The list of banned software from 9 January 2026 applies to the state sector and critical infrastructure; bill No. 13505 with fines has not been adopted. Meanwhile BAF was designed as an approximation of 1C, so moving 1C → BAS is cheaper than moving 1C → SaaS ERP, and most of the migration wave flows there.

See full: The market: the niche is taken, and more firmly than it seemed ↗19 / 21

Don't take the deck's word for it: this report has check dates.

2026-09-13PL2: whether the gates are switched on and whether they have stopped even one mergethe technical owner (B4)
2026-09-13Easy Wins E2–E11: what shipped, what overran its day and what resistedthe technical owner
2026-10-13PL3 and PL5: whether the pilot started, whether the daily discrepancy is reconciledthe business owner
2026-10-13PL4: which column the work actually went intothe business owner
2026-11-13PL1: how many complaints became issues and how many of them were closedthe technical owner
2026-11-13C1 and C2: whether they moved from projected to confirmedthe technical owner
2027-02-13PL6: the mobile app rewrite began in September 2026; whether its reason, exit criterion and date are written downthe technical owner
See full: Watchlist ↗20 / 21

Before the conclusions

112 tagged claims

observed44%50
web20%22
stakeholder29%32
inferred3%3
assumed4%5

How much of what you just heard was actually observed.

See the full report ↗21 / 21