Repository navigation
Converge DataOps onto one canonical frontend #148
Description
Activity
- addedbugSomething is brokenSomething is brokenmigrationImport or migration workImport or migration workportalShared portal shell and UXShared portal shell and UXfrontendFrontend UIFrontend UIbackendBackend/APIBackend/APIinfraDeployment and infrastructureDeployment and infrastructuretestingTests and QATests and QAP0Must haveMust have
on Aug 11, 2026 - changed the title
[-]Converge DataOps to one canonical frontend[/-][+]Converge DataOps onto one canonical frontend[/+]on Aug 11, 2026 PM GROOMING PASS
Rewrote #148 as an agent-ready P0 convergence spec after reviewing the preserved UI analysis, both frontend implementations, portal/router fallback, SAM packaging, deployment workflow, browser/unit coverage, planning direction, and current #136/#143/#147 tracker state.
Key decisions:
- top-level
frontend/is the sole canonical UI; - legacy deletion is gated by a complete capability/test matrix and porting, with real Inbox/intake called out as a confirmed gap;
- local, default E2E, built artifact, and deployed runtime must use the same assets, and missing assets fail explicitly instead of falling back;
- legacy tests must be retargeted to canonical behavior, with deterministic paired source/artifact screenshots;
- the broad IA redesign remains out of scope except where parity needs a reachable home;
- Migrate Sponsor CRM GSIs in a protected stage-only workflow #136 gates only normal deployed verification, not implementation, local gates, review, or merge;
- rollout and rollback stay on the existing main-push GitHub Actions OIDC path, with no manual deploy or AWS action.
The issue had no
needs groominglabel. Existing appropriate labels were preserved unchanged.Verdict: PASS — ready for Software Engineer.
- top-level
User approved the convergence guideline on 2026-08-11:
- top-level
frontend/is canonical; - production-visible Inbox, assistant lifecycle, and runtime-template administration are retained before cutover;
- the broader information-overload redesign remains separate follow-up work.
Implementation issue graph:
- Preserve canonical frontend routes and deep links #150 — canonical route/deep-link contract
- Port Inbox and intake lifecycle to the canonical frontend #151 — Inbox/intake parity (depends on Preserve canonical frontend routes and deep links #150)
- Port assistant job lifecycle to the canonical frontend #152 — assistant lifecycle parity (depends on Preserve canonical frontend routes and deep links #150)
- Port runtime template and workflow administration to the canonical frontend #153 — runtime template/workflow administration parity (depends on Preserve canonical frontend routes and deep links #150)
- Package the canonical frontend and delete the backend fallback SPA #154 — package canonical frontend and delete fallback SPA (depends on Preserve canonical frontend routes and deep links #150–Port runtime template and workflow administration to the canonical frontend #153)
- Verify the canonical frontend through normal DataOps deployment #155 — normal deployed acceptance (depends on Package the canonical frontend and delete the backend fallback SPA #154 and deployment blockers Migrate Sponsor CRM GSIs in a protected stage-only workflow #136/Reconcile Sponsor CRM table ownership with CloudFormation #143)
Work is being performed directly in the current checkout as requested. Research derivatives remain under gitignored
.tmp/.- top-level
PM ISSUE-GRAPH RECONCILIATION — BLOCK monolithic source; child graph PASS
Reconciled #148 and user-authored #150–#154 against the process, current specialist findings, API/route/template/SAM code, and the uncommitted
.tmp/worktrees/issue-148candidate.Verdict: BLOCK accepting, committing, merging, or closing from the monolithic #148 worktree. The 48-path candidate (about +554/-22,103) deletes legacy sources and broad behavior coverage before child acceptance, has no canonical hash/deep-link adapter, implements assistant retry without the required retry→submit sequence, renders assistant artifact access as plain URI text, uses raw JSON as runtime-template administration without an adequate server-side admin mutation guard, and verifies
backend/distrather than the actual SAMBackendFunction.The issue graph/specification is now PASS:
- Converge DataOps onto one canonical frontend #148 is the epic only.
- Preserve canonical frontend routes and deep links #150 is the single currently implementable child.
- Once Preserve canonical frontend routes and deep links #150 is Tester-passed, PM-accepted, committed, merged/pushed, and through its source gate, the exact next two implementable children are Port Inbox and intake lifecycle to the canonical frontend #151 and Port assistant job lifecycle to the canonical frontend #152, which can run independently.
- Port runtime template and workflow administration to the canonical frontend #153 follows the same Preserve canonical frontend routes and deep links #150 dependency and can use the next available safe track.
- Package the canonical frontend and delete the backend fallback SPA #154 remains blocked until Preserve canonical frontend routes and deep links #150–Port runtime template and workflow administration to the canonical frontend #153 are all accepted and integrated; it owns final inventory, actual SAM packaging verification, paired source/artifact evidence, and only then deletion.
- Verify the canonical frontend through normal DataOps deployment #155 remains deployed acceptance.
Worktree handling: keep
.tmp/worktrees/issue-148untouched as a read-only donor. Do not commit it, merge it, reset it, or use it as the implementation branch for any child. Create a fresh child worktree from clean currentmain; manually reimplement only the narrow owned slice described in that child. Preserve all deleted tests until replacement behavior coverage is green. After #150–#153 integrate, create a fresh #154 worktree and reimplement/rebase packaging/removal against that integrated state. Remove the donor only after useful patches/evidence have been extracted and accepted.No repository, AWS, deployment, workflow-dispatch, commit, or push action was performed by this reconciliation.
- added a commit that references this issue
on Aug 11, 2026 Source convergence is complete in e904a5d on main. The canonical frontend/ now owns legacy route compatibility, Inbox, full assistant lifecycle, and runtime-template administration. Production packaging copies only that tree; the retired backend pages/public SPA and its serving paths are deleted. Verification: backend 1,221 passed + 1 skipped, Playwright/API E2E 182 passed, planning-doc tests 7 passed, typecheck/build/SAM validate/full SAM build passed, and the actual BackendFunction artifact contains canonical assets with no fallback tree. #150–#154 are closed. This umbrella stays open only for normal deployed acceptance in #155; no manual deployment or guard bypass was used.
- added a commit that references this issue
on Aug 11, 2026 The canonical frontend convergence is complete. Children #150, #151, #152, #153, #154, and #156 are closed and integrated; #155 final normal-deployment acceptance has passed. Live
ops.dtcdev.clicknow serves the single top-levelfrontend/artifact, with authenticated desktop/mobile route evidence and exact source/live byte parity recorded on #155. Deferred infrastructure cleanup (Sponsor TTL) remains separately tracked in #163.Accepted: convergence is complete. All canonical frontend child issues and final deployed acceptance are closed; the live portal serves one canonical frontend. Sponsor TTL restoration remains a separate follow-up in #163.
- added 2 commits that reference this issue
on Aug 14, 2026
Converge DataOps onto one canonical frontend
Status: in progress — epic coordination; child implementation is gated below
Tags:
bug,migration,portal,frontend,backend,infra,testing,P0Depends on: None
Blocks: #155 and retirement of the backend fallback SPA
Next owner: Orchestrator — advance #150 first; after #150 is accepted and integrated, advance #151 and #152 independently
Product decision
Top-level
frontend/is the only canonical DataOps UI. The backend SPA is migration debt, not a second supported product, but it must remain intact until every production-visible behavior has an accepted canonical replacement.This issue is the epic and source of product intent. It is not an implementation unit: no monolithic source candidate may be accepted, committed, merged, or use
Closes #148. Each child below must complete the repository lifecycle independently.Child issue graph
“Accepted and integrated” means Tester PASS, PM ACCEPTED, a Software Engineer commit, orchestrator merge/push to
main, and the applicable source CI/On-Call gate. A draft or passing local worktree does not satisfy a dependency.Cross-cutting acceptance criteria
backend/src/pages/,backend/src/public/, or meaningful legacy tests until Preserve canonical frontend routes and deep links #150–Port runtime template and workflow administration to the canonical frontend #153 are accepted and integrated and replacement behavior coverage is green.BackendFunctionartifact-served evidence use the same deterministic fixture and prove the same shell, routes, behavior, and bytes.Current uncommitted prototype disposition
The uncommitted candidate in
.tmp/worktrees/issue-148is a read-only donor, not an acceptable #148 implementation.frontend/src/app.jsandfrontend/src/styles.cssplus its screenshots/test fixturefrontend/src/app.jsplus its screenshot fixturePORTAL_ANALYSIS.mdbackend/dist, not the actual.aws-sam/build/BackendFunctionartifact, so it does not satisfy the SAM gate..tmp/screenshots/issue-148/Required lifecycle
For every child:
Closes #<child>only after acceptance.main.Test scenarios
Scenario: Dependency-safe cutover
Given: #150–#153 child candidates or only local passing evidence
When: #154 is considered for implementation or deletion
Then: it remains blocked until all four children are accepted and integrated into
mainScenario: Prototype is decomposed
Given: the uncommitted issue-148 donor worktree
When: child implementation starts
Then: only narrow reviewed hunks are reimplemented in the owning fresh child worktree; the monolithic diff and bulk test deletion are never committed as #148
Scenario: Epic completion
Given: #150–#154 are accepted, integrated, and source gates pass
When: normal deployment is available
Then: #155 performs deployed acceptance; #148 closes only after the child graph and final product outcome are complete
Out of scope
../dtc-operations,../datatasks, or../podcast-assistant.