docs(rollout): record deferred-actions + Task 6.3 + docs work#34
Open
mpge wants to merge 20 commits intofeat/public-ticket-systemfrom
Open
docs(rollout): record deferred-actions + Task 6.3 + docs work#34mpge wants to merge 20 commits intofeat/public-ticket-systemfrom
mpge wants to merge 20 commits intofeat/public-ticket-systemfrom
Conversation
Appends three new sections to the rollout status doc covering the post-iter-120 work that's now shipped: 1. Deferred workflow actions across 4 frameworks (send_webhook, add_follower, assign_round_robin, delay) — NestJS as reference plus delay-only ports to Spring / Phoenix / WordPress. 2. Greenfield Task 6.3 runtime guest-policy settings endpoints across dotnet / go / spring / phoenix — the plan's last remaining gap. 3. Two public-facing docs pages in escalated-dev/escalated-docs: workflows.md (#9) + public-tickets.md (#10). Closes out the "End state" — every plan task has shipped or been explicitly deferred as pre-existing infrastructure. Lists three small follow-ups (CHANGELOG catch-up, the 1-line Phoenix runner update, and the WP plugin-upgrade-path gap) so a future iteration can pick them up with context.
Updates the status doc to reflect everything shipped since the original append: - workflows.md (#9) description now matches what the doc actually says after 11 rounds of factual-error corrections (5 trigger events not 14, real condition model, unit divergence called out, etc.) - public-tickets.md (#10) description matches after 10 rounds of corrections (4-priority chain, real widget snippet, provider coverage split, etc.) - New 'Infrastructure fixes surfaced along the way' section documents the Phoenix CI config fix (#46 — lint.yml was broken, never ran on any PR since repo creation), the .NET PR #32 accidental stacking rebase, and the three earlier settings-PR lint fixes (Django / Adonis / Symfony). Noted that the 20+ factual corrections in the docs were caught via self-review, not user-reported — keeping that visible in the status doc so future iterations know the docs were hand-audited against source, not just generated.
… gap - Adds escalated-nestjs#27 to the Task 6.3 settings-endpoint table. The reference was subtly out of step with its own ecosystem: all 10 host-framework plugins had dedicated /admin/settings/public-tickets endpoints, but NestJS required callers to hand-craft a generic settings payload. #27 closes that gap. - Notes a genuine cross-framework functionality gap caught during docs self-review: Laravel's admin settings page for the guest policy has no behavioral effect — WidgetController writes guest_name/ guest_email/guest_token unconditionally, ignoring guest_policy_mode. NestJS avoids this because the settings endpoint writes to a guest_policy JSON key that WidgetController already reads. Other legacy plugins (Rails/Django/etc.) likely have the same issue. Documented as a follow-up so future iterations can wire each plugin's widget controller to its own persisted settings.
…section All 6 affected frameworks (NestJS, Laravel, Rails, Django, Adonis, WordPress) now have the widget/settings-disconnection fix shipped. Replaces the 'follow-up' bullet with a dedicated section listing each framework's fix PR, the entry points it covers, the shared 3-mode semantics, and the test coverage added (20 new cases across the sweep).
Widget sweep completed; audit turned up the same bug in each framework's InboundEmailService. Shipped as 5 PRs across 5 frameworks (NestJS, Laravel, Rails, Django, Adonis) — WordPress inherits the fix for free because its InboundEmailService delegates to TicketService::create_guest, which was already patched by the widget PR #36. One of those rare wins from having centralized ticket-create logic.
The End state section (written before the sweeps) claimed 'every plan task has shipped'. Technically true — but docs self-review turned up 11 more PRs of real bug-fixing (widget sweep + inbound sweep) that aren't plan-scoped but are essential for the rollout to deliver what the docs promised. Weave that narrative bridge into End state so readers see the full arc: plan completion → docs review → reality gap → additional sweeps. Also add the Phoenix mix format follow-up to the 'Remaining follow-ups' list explicitly — needs local Elixir+Erlang to run mix format across the ~20 files with pre-existing drift surfaced by #46.
While sweeping for hardcoded /support/widget paths in the shared frontend, grep turned up 79 Vue components that call Ziggy's route() helper with 'escalated.*' named routes — 'escalated.admin.saved- views.update', 'escalated.admin.tickets.side-conversations.reply', etc. Ziggy is Laravel-specific. Laravel gets it for free, but on Rails / Django / NestJS / etc. the global route() is undefined. Two components (AttachmentList, ChatBubble) have defensive 'typeof window.route === function' checks, but the other 77 callers don't — calling them on a non-Laravel host framework will ReferenceError. Each non-Laravel host needs to ship a Ziggy-compatible window.route() shim for the admin + agent UI to function. Out of scope to fix in the current rollout (79 file touchpoints; real solution is per-framework Ziggy shim), but important for whoever productionizes those plugins. Added to the follow-ups list.
Line 136 was stale — it claimed provider parsers + webhook controllers were 'still open' for the 5 greenfield frameworks, but all 35 PRs (7 per framework × 5) have been drafted and stacked. Added a full matrix of PR links by framework × component. Remaining work is only the legacy guest_* column deprecation across all frameworks.
Expand the phoenix#46 row to explain the full CI scoping (format + credo both scoped to PR-changed lib/test paths) and note that lint is now green. Supersedes the stale 'needs local Elixir toolchain' note.
Records the gap surfaced 2026-04-24: NestJS reference is missing the Automation backend; Symfony / Phoenix / Go are missing both Automation and Macro. Backed by ADR 2026-04-24-admin-agent-tool-split in the context repo. Doesn't block the public-ticket-system rollout — these are independent follow-up workstreams.
All 7 PRs landed across the 4 frameworks that had gaps: - NestJS: Automation #29 (Macro existed) - Symfony: Automation #40 + Macro #41 - Phoenix: Automation #48 + Macro #49 - Go: Automation #40 + Macro #41 Every framework in the portfolio now has Workflow + Automation + Macro backends. ADR escalated-developer-context/decisions/2026-04-24-admin-agent-tool-split.md locked the taxonomy; this sweep closes the implementation gap.
…ion+Macro PR Each of the 7 entity+service PRs got a follow-up controller commit on the same branch: nestjs#29 Automation admin controller (CRUD + run-now) symfony#40 Automation admin controller (CRUD + run-now) symfony#41 Macro admin + agent controllers phoenix#48 Automation admin controller (CRUD + run-now) phoenix#49 Macro admin + agent controllers go#40 Automation admin handler (CRUD + run-now) go#41 Macro admin + agent handler The shared frontend's Admin/Automations/ and Admin/Macros/ folders are wire-compatible with these endpoints.
e8d35bc to
a9ce8b0
Compare
Each framework's new Automation/Macro controllers are now wired into the host router so they respond at canonical paths: - nestjs: auto via @controller decorators (already in module) - symfony: auto via #[Route] attribute discovery; existing routes.yaml resource loaders pick up the new files - phoenix: router.ex escalated_routes/2 macro mounts the new resources/routes for both admin + agent scopes - go: both chi and stdlib routers wire the new handlers behind RequireAdmin/RequireAgent middlewares Plus Symfony bonus: bin/console escalated:automations:run command for the cron entry.
All 7 PRs are CLEAN / MERGEABLE. Verified 2026-04-25:
nestjs#29 — lint + test (18) + test (20) + test (22) all pass
symfony#40, #41 — PHP-CS-Fixer pass
go#40, #41 — golangci-lint pass
phoenix#48, #49 — no CI yet (Phoenix workflow trigger targets main
not master; unblocks when phoenix#46 merges)
Lint/style fixes shipped along the way:
nestjs: pre-existing chat-session.spec unused-vars + prettier on
automation.spec + .gitignore tsbuildinfo
symfony: php-cs-fixer auto-fixes on both branches
go: gofmt auto-fixes on both branches
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Updates
docs/superpowers/plans/2026-04-24-public-tickets-rollout-status.mdso a future iteration landing on this codebase has a current picture of what's shipped.Every framework's ticket-system work, email infrastructure, workflow stack, and public-submission guest-policy wiring is either shipped or in open CI-green PRs. The doc now tracks:
Fix-sweeps surfaced during rollout self-review
/admin/settings/public-ticketsendpoint (fix: compute attachment download URL when url is missing #27) — closes the NestJS-reference API-surface gap vs the 10 host pluginsdata-widget-pathattribute +widgetPathoption threaded through 6 chat endpoints; unblocks NestJS hostsroute()stub (fix(plugin): install window.route stub for non-Laravel hosts #36) — safety stub on non-Laravel hosts so missing Ziggy surfaces as a descriptive error instead ofReferenceErrorInfrastructure fixes
mainbut the default branch ismaster, so Phoenix CI had literally never run. Workflow now targets master, scopesmix formatandmix credoto PR-changedlib//test/files (master has pre-existing drift that would otherwise block every PR), and relaxes an unsatisfiableinertia_phoenixconstraint. Lint now green.Activator::maybe_upgrade()onplugins_loadedso existing installs pick up schema/permission changes on version bumps. WordPress doesn't fireregister_activation_hookon auto-update, so without this the upcoming stacked PRs (new tables, new permission rows) would silently miss existing installs.Deferred
Only one item: full functional Ziggy
route()compat shim for non-Laravel hosts (would require per-host-framework named-route mapping for 77 call sites). Partial mitigation shipped via #36. Documentation added in escalated-dev/escalated-docs#11.Test plan