Repository navigation
v0.6.1 — Workflow builder, MySQL installs and blank screens
Fixed
-
The engine could not be installed on MySQL.
rails db:migratestopped on the first of four incompatibilities, each surfacing as a raw adapter error rather than naming its cause: eight JSON columns carried a database default, which MySQL forbids;import_jobsusedid: :uuid, a type MySQL does not have;newsletter_list_members.added_atdefaulted toCURRENT_TIMESTAMP, which MySQL rejects on thedatetime(6)column Rails creates; and the settings seed wrote iso8601 timestamps into raw SQL, whoseTandZMySQL refuses.The JSON defaults moved to the models, where every adapter honours them the same way. PostgreSQL keeps its native
uuidcolumn, which existing installs already have; elsewhere the id is a 36-character string thatEscalated::ImportJobgenerates.Escalated::NewsletterListMemberstampsadded_aton create, and the seed asks the adapter for its ownquoted_date. -
Twenty-five screens rendered blank. They rendered page names with no component behind them in
@escalated-dev/escalated, and Inertia resolves such a name to nothing rather than to an error, so each returned 200 and an empty panel. Fifteen are renamed to the component the frontend ships, among themAdmin/Workflows/{Edit,New,Show}toAdmin/Workflows/FormandAdmin/Imports/ShowtoAdmin/Import/Progress.Escalated/Error, rendered for every 403 and 404 inside the panel, now exists in@escalated-dev/escalated0.11.5.Five of those needed their props fixed too, or they would have resolved and still shown nothing. The escalation rule and SLA policy forms read
ruleandpolicy. Articles, audit logs and webhook deliveries now get the paginator shape their list components page through, where they showed the first page with no way past it. The overview report takes its figures flat, where it had rendered zeroes that read as a quiet week. Eight names stay blank because this engine's surface is a different shape from the component's: six advanced reports,Settings/CsatandSettings/Sso. -
Turning on two-factor authentication from the admin settings never worked. Setup rendered
Escalated/Admin/Settings/TwoFactorSetup, which the frontend does not ship; it generated the secret withROTP::Base32.random, thoughrotpis not a dependency; and confirming calledEscalated::TwoFactor.create_or_update_for, which was never defined.The controller now drives the enrolment the shared
Admin/Settings/TwoFactorpage runs, following escalated-laravel. Setup stores a secret and eight recovery codes from the engine's ownTwoFactorServiceand flashes the QR URI; confirm checks the posted code against the stored secret rather than one round-tripped through the form; and the index passesenabledandpending. The engine still does not ask for a second factor at sign-in, so this makes enrolment work without yet enforcing it. -
The shared workflow builder could not save a workflow.
workflow_paramsread the body under aworkflowkey that exists only when the host turns on ParamsWrapper, so every create was a 400, and even a wrapped body lost its actions, becauseactions: []permits only arrays of scalars. The trigger list also disagreed with what fires:ticket.repliedandticket.escalatedwere refused, while seven events nothing dispatches were accepted and offered.The endpoints now follow escalated-developer-context
domain-model/workflow-admin-contract.md. The body is read top-level, a workflow needs at least one action, omitted conditions are stored as{ "all": [] }, andtrigger_eventmust be one of the seven events something dispatches, which is also the list the form offers. A failed save returns field errors through the session foruseForm, and the create form getsworkflow: null. The engine handlesinsert_canned_reply, and{ "any": [] }matches every ticket.delayandsend_notificationare no longer offered, since neither does anything with the builder's shape, but rows that store them still run.
Changed
- The test suite runs on PostgreSQL and MySQL as well as SQLite.
spec/dummy/config/database.ymlreadsESCALATED_TEST_ADAPTER(sqlite3,postgresqlormysql2) and defaults to SQLite, so running the suite locally still needs nothing installed. An unrecognised value raises rather than falling back, because a CI leg that quietly ran SQLite would report green having tested nothing the matrix exists for.
Added
spec/page_name_parity_spec.rb, asserting every page name this engine renders resolves to a component. It diffs them against the manifest the frontend publishes, vendored atspec/fixtures/escalated-pages.json, and fails if its list of known-blank names still excuses one that has since been fixed, so that list can only shrink.