Repository navigation
Remove mailing-list export from DataOps; Dapier now owns it #246
Description
Remove mailing-list export from DataOps; Dapier now owns it
Status: pending
Tags: enhancement, portal, frontend, backend, infra, testing, data, P1
Depends on: None
Blocks: None
Reporter context
Alexey: "remove mailing export frmo the code and from ui - it's done in dapier now"
The live Operations nav still has Mailing exports. The page heading is Mailing-list exports and currently shows a load error. Dapier now runs the Mailchimp export, so DataOps must stop requesting, storing, scheduling, and presenting it.
This is a complete capability deletion, not a hide-the-nav or disable-config change. Do not leave shims, dual paths, empty routes, or a dormant Mailchimp reader.
Current surface (researched)
Frontend
- Operations nav item
#mailing-exports-nav-buttoninfrontend/index.html - Hash route
/#/mailing-exportsinfrontend/src/core/workspace.js - Surface
frontend/src/surfaces/finance/mailing.js, composed throughfrontend/src/surfaces/finance/index.js - Runtime wiring in
frontend/src/runtime/application.jsandfrontend/src/runtime/surface-composition.js - Title map in
frontend/src/surfaces/operations-overview.js - Mailing CSS in
frontend/src/styles.css - Asset inventory
backend/src/docs/frontend-assets.json(src/surfaces/finance/mailing.js)
Unknown hashes already recover to Home (/#/). After the route is deleted, /#/mailing-exports must use that existing recovery. Do not add a mailing-specific redirect.
Backend API and service
GET /api/mailing-exportsandPOST /api/mailing-exports/runinbackend/src/routes/mailingExports.ts, dispatched frombackend/src/router.ts- Service, Mailchimp adapter, provider registry, and Dapier credential reader under
backend/src/mailingExports/ - Job persistence
backend/src/db/mailingExports.ts(PK/SKMAILING_EXPORT#…inTABLE_ARTIFACTS) - Scheduled handler branch
detail.dataopsAction === 'mailing-export'inbackend/src/handler.ts - Private artifact download special-case for the mailing bucket in
backend/src/routes/artifacts.ts - Telemetry family
mailing_exportsinbackend/src/apiRequestTelemetry.ts - Local/e2e provider simulator in
backend/scripts/test-server.ts(/__e2e__/mailing-provider) - Local env:
DATAOPS_MAILING_EXPORTS_CONFIG,DATAOPS_MAILING_EXPORTS_BUCKET,DATAOPS_DAPIER_CREDENTIALS_TABLE
This is an operator workflow being deleted. Remove the authenticated API path too. After removal, /api/mailing-exports and /api/mailing-exports/run must behave like any other unknown /api/* route (unauthenticated 401 before existence is revealed; authenticated 404).
Infra, schedule, and deploy
All of this lives in this repo’s infra/template.full.yaml (not ../aws-infra):
- Parameters
MailingExportsConfig,DapierCredentialsTableName,DapierCredentialsTableArn MailingExportsBucket(DeletionPolicy: Retain,UpdateReplacePolicy: Retain, versioned, public-blocked, AES256) andMailingExportsBucketPolicy- Daily EventBridge
BackendFunctionDailyMailingExportatcron(0 9 * * ? *)with inputdataopsAction: mailing-export, plusBackendFunctionDailyMailingExportPermission - Backend IAM:
dynamodb:GetItemon the Dapier credentials table ARN withdynamodb:LeadingKeys: [mailchimp];s3:GetObject/s3:PutObjecton the mailing bucket - Env:
DATAOPS_MAILING_EXPORTS_CONFIG,DATAOPS_MAILING_EXPORTS_BUCKET,DATAOPS_DAPIER_CREDENTIALS_TABLE
GitHub Actions .github/workflows/deploy-dataops-v1.yml currently requires Dapier table name/ARN and passes MAILING_EXPORTS_CONFIG. Those parameters and the required-var check go away with the template parameters.
DATAOPS_DAPIER_CREDENTIALS_TABLE is used only by the mailing-export credential reader. After this issue, DataOps must not read the Dapier credentials table.
Tests and docs that still assume the product exists
backend/tests/mailing-exports.test.ts(delete with the module)- Pagination/auth/telemetry coverage that names
/api/mailing-exports - Frontend
finance-surface,routing, andruntime-compositionmailing cases - E2E:
canonical-capability-behaviormailing journey,canonical-route-parity,frontend-module-characterization,issue-208-pagination-journeysmailing continuation,frontend-capabilities.json/frontend-capabilities.test.mjs, isolated-capability mailing config, parity-target mailing config - Infra:
tests/infra/test_template.pymailing privacy/IAM test,BackendFunctionDailyMailingExportschedule inventory, and the processed-template identity inventory that still lists that rule docs/mailing-list-exports.md(delete)- JTBD bullets for weekly Mailchimp backup in
docs/operations-manager-platform-jtbd.md - Conversational plugin architecture bullet “mailing-list exports” in
docs/CONVERSATIONAL_AGENT_PLUGIN_ARCHITECTURE.md - Baseline recurring seed
Backup MailChimp mailing list to Google Driveinbackend/src/deploymentSeeds.ts - Local env allow-list in
scripts/dev-portal-lib.mjs
Scope
Delete the DataOps mailing-list export product end to end:
- UI. Remove the Operations nav item, hash route, finance mailing surface, runtime wiring, CSS, and asset-list entry. Remaining Operations items (Newsletter, Calendar, Sponsors, Bookkeeping, Review) stay and still work.
- API. Remove
GET /api/mailing-exportsandPOST /api/mailing-exports/run. Do not keep a stub that returns empty configs. - Backend. Delete
backend/src/mailingExports/,backend/src/db/mailingExports.ts,backend/src/routes/mailingExports.ts, the handler scheduled branch, the mailing-bucket download branch, telemetry, and local/e2e Mailchimp simulators. - Schedule and IAM. Remove the daily EventBridge rule/permission, mailing-bucket IAM, and Dapier
GetItemIAM. DataOps must not call Mailchimp and must not read Dapier credentials. - Stack parameters and deploy. Remove
MailingExportsConfig,DapierCredentialsTableName,DapierCredentialsTableArn, related env vars, and the GitHub Actions required-var/parameter-override wiring. - S3 resource. Remove
MailingExportsBucketandMailingExportsBucketPolicyfrom the template. KeepDeletionPolicy: Retainthrough removal so CloudFormation orphans the physical bucket instead of failing or destroying contact archives. Do not add a runtime emptier. - Recurring seed. Remove
Backup MailChimp mailing list to Google DrivefromBASELINE_RECURRING_CONFIGSso new deploys stop creating/updating that weekly task. Do not add a production migrator that deletes existing recurring configs. - Docs. Delete
docs/mailing-list-exports.md. Drop DataOps-owned weekly Mailchimp-backup language from JTBD and the conversational plugin inventory. - Tests. Delete mailing-export product tests. Update shared route/capability/infra inventories so they no longer require the deleted surface. Treat the SAM identity-inventory change as an intentional resource deletion (update
test_processed_template_keeps_baseline_resource_identity_inventoryand schedule tests; do not keep a dummy EventBridge rule to satisfy Make SAM artifacts and scheduled-target previews identity-stable #217).
No compatibility shims, empty /mailing-exports page, disabled-config mode, or leftover Dapier reader.
Data safety
Mailing-export jobs live in TABLE_ARTIFACTS as MAILING_EXPORT#… items. Completed runs created private artifacts mailing-export-{id} whose storageUri points at the mailing bucket (mailing-exports/… ZIP keys) and may be referenced from a recurring task.
Decisions:
- Do not add migration machinery to scan/delete those items on deploy. Once the code stops reading
MAILING_EXPORT#and the mailing download branch is gone, leftover jobs are inert. Leftover artifacts remain ordinary Artifact records; private download must no longer special-case the mailing bucket (expect 409 like any other non-email private object). - Do not keep a dual-read path so old ZIPs remain downloadable from DataOps. Dapier is the source of truth.
- Bucket removal is sequenced by Retain. This issue removes the bucket from the stack. CloudFormation leaves the physical bucket. Emptying or deleting that bucket, and deleting leftover DynamoDB items or artifacts, is
[HUMAN]because it is destructive production data that can contain mailing-list contact archives. - GitHub Actions variables
MAILING_EXPORTS_CONFIG,DAPIER_CREDENTIALS_TABLE_NAME, andDAPIER_CREDENTIALS_TABLE_ARNbecome unused after deploy. Deleting the org/repo vars is[HUMAN]. - Live recurring config created from the Mailchimp backup seed is not auto-deleted.
[HUMAN]may pause or delete it in Recurring if it still generates Thursday tasks. - Do not log, export, or attach archive contents, credentials, or raw bucket identity in this public issue or in tests.
Acceptance Criteria
- Operations sidebar has no Mailing exports item. Newsletter, Calendar, Sponsors, Bookkeeping, and Review remain and open their current surfaces.
-
/#/mailing-exportsis not a workspace route. Visiting it recovers to Home through the existing unknown-hash behavior. No mailing-exports heading, cards, or run actions remain. -
GET /api/mailing-exportsandPOST /api/mailing-exports/runare gone. Unauthenticated calls are refused like other unknown/api/*paths. Authenticated calls 404. No empty-config stub. -
backend/src/mailingExports/,backend/src/db/mailingExports.ts, andbackend/src/routes/mailingExports.tsare deleted. The Lambda no longer handlesdataopsAction: mailing-export. - Artifact private download no longer authorizes mailing-bucket keys. Email-document private download is unchanged.
- EventBridge daily mailing-export rule and permission are gone. Ordinary backend cron and portable execution-export schedules remain.
- Template has no
MailingExportsBucket,MailingExportsBucketPolicy,MailingExportsConfig,DapierCredentialsTableName,DapierCredentialsTableArn, mailing env vars, mailing S3 IAM, or DapierGetItemIAM. Deploy workflow no longer requires or passes those parameters. -
docs/mailing-list-exports.mdis deleted. Remaining docs do not tell operators or agents that DataOps still exports Mailchimp audiences. - Baseline recurring seed no longer includes “Backup MailChimp mailing list to Google Drive”.
- Shared tests, capability catalogs, and SAM identity/schedule inventories no longer require mailing-exports. No new shims or skipped-but-still-present product tests.
- Desktop and mobile screenshots prove the Operations nav without Mailing exports,
/#/mailing-exportsrecovering to Home, and the remaining Operations items still loading. -
[HUMAN]After deploy: confirm the daily mailing-export rule is gone in the live stack; delete unused GitHub Actions varsMAILING_EXPORTS_CONFIG,DAPIER_CREDENTIALS_TABLE_NAME, andDAPIER_CREDENTIALS_TABLE_ARN; optionally empty/delete the retained mailing-exports bucket and leftoverMAILING_EXPORT#/mailing-export-*records; optionally pause/delete the live Mailchimp-backup recurring config. Do not put archive contents or credentials in this repo.
Test Scenarios
Scenario: Operations nav without mailing export
Given: a signed-in operator on the portal
When: they open the workspace sidebar on desktop and the mobile nav
Then: Operations lists Newsletter, Calendar, Sponsors, Bookkeeping, and Review, and does not list Mailing exports
And: each remaining Operations item opens its current surface without a load error caused by this change
Scenario: Old mailing-exports bookmark
Given: the mailing-exports route has been removed
When: the operator visits /#/mailing-exports
Then: the app recovers to Home (/#/) using existing unknown-hash recovery
And: no mailing-exports surface, heading, or API call is made
Scenario: Mailing API is gone
Given: the backend no longer registers mailing-export routes
When: an unauthenticated client calls GET /api/mailing-exports or POST /api/mailing-exports/run
Then: the call is refused before a handler can reveal whether the route exists
When: an authenticated operator calls the same paths
Then: the response is 404 Not found
And: no Mailchimp, Dapier-credential, or mailing-bucket I/O occurs
Scenario: Scheduled mailing export is gone
Given: the SAM template after this change
When: schedule and processed-template identity tests run
Then: there is no BackendFunctionDailyMailingExport rule or dataopsAction: mailing-export input
And: daily backend cron and portable execution-export rules remain
And: the identity inventory is updated for this intentional deletion rather than preserving a dummy mailing rule
Scenario: Artifact download no longer serves mailing ZIPs
Given: a leftover private artifact whose storage URI is on the former mailing-exports bucket
When: an operator requests its private download
Then: the mailing special-case is gone and download is not available for that artifact
And: email-document private downloads still work
Scenario: Shared catalogs drop mailing-exports
Given: frontend capability JSON, route-parity lists, pagination journeys, finance-surface tests, and infra privacy tests
When: the full verification workflow for this issue runs
Then: none of those suites still require /#/mailing-exports, /api/mailing-exports, MailingExportsBucket, or Dapier mailing IAM
And: remaining collection pagination, auth-table, and Operations surfaces still have coverage
Out of Scope
- Dapier’s own Mailchimp export implementation, Dapier UI, and the Dapier-owned credentials table contents. DataOps only stops reading that table.
- Source repos
../dtc-operations,../datatasks,../podcast-assistant, and../aws-infra(mailing resources are ininfra/template.full.yamlhere). - Newsletter, Calendar, Sponsors, Bookkeeping, Review, Home, Tasks, Inbox, and other Operations/Knowledge items except removing mailing-export coupling.
- Mailchimp campaign creation used by the newsletter workflow.
- Historical spreadsheet/todo mapping text in
backend/docs/except where a test fixture would otherwise keep shipping a live mailing-export product. - Building a DynamoDB/S3 cleanup migrator, restore drill, or dual-read for old ZIPs.
- Manually emptying/deleting the retained AWS bucket, GitHub Actions org vars, leftover artifacts, or the live recurring backup config (those are
[HUMAN]after ship). - Closing or retitling Automate private Mailchimp account exports and attach them to recurring work #108 and Converge Newsletter, Calendar, and Mailing Export presentation #222 in GitHub (orchestrator follow-up below).
Related issues (orchestrator follow-up; do not close from this issue body)
- Automate private Mailchimp account exports and attach them to recurring work #108 Automate private Mailchimp account exports and attach them to recurring work: agent-verifiable source already shipped; remaining work is
[HUMAN]real-provider acceptance. That product is superseded. Close Automate private Mailchimp account exports and attach them to recurring work #108 as superseded once this issue is accepted/shipped (or immediately if the orchestrator prefers not to leave a HUMAN gate on a deleted product). Do not run the Automate private Mailchimp account exports and attach them to recurring work #108 Mailchimp acceptance checklist. - Converge Newsletter, Calendar, and Mailing Export presentation #222 Converge Newsletter, Calendar, and Mailing Export presentation: still open and names mailing-export states/screenshots. Retitle and narrow Converge Newsletter, Calendar, and Mailing Export presentation #222 to Newsletter + Calendar only. Drop mailing next-action criteria and mailing screenshot inventory from remaining Converge Newsletter, Calendar, and Mailing Export presentation #222 gates. Do not keep implementing mailing presentation.
#217’s SAM identity inventory will change because this issue deletes a scheduled rule. That is expected; update the inventory here. #217 is not a dependency.
Dependencies
- No issue dependency. Dapier already owns the export; DataOps should stop in this change.
- Infra deletion of the bucket resource is safe in the same deploy because
DeletionPolicy: Retain. Do not wait for a human to empty the bucket before removing code, API, schedule, IAM, and the template resource. - After push, On-Call confirms the mailing EventBridge rule is gone and deploy no longer requires Dapier mailing parameters. Human cleanup of vars/bucket/leftover records does not block merge.
Required verification
Engineer may iterate with focused tests. Independent Tester runs the full relevant workflow on one frozen candidate and records commands, exit codes, and screenshot paths. Search-index rebuild is not required (no content/registry change).
node --test frontend/test/routing.test.mjs frontend/test/runtime-composition.test.mjs frontend/test/finance-surface.test.mjs
npm run test:frontend:unit
npm --prefix backend test
npm --prefix backend run typecheck
npm --prefix backend run build
node backend/scripts/verify-frontend-artifact.mjs --source frontend --artifact backend/dist
npm --prefix backend run test:e2e -- e2e/canonical-route-parity.spec.js e2e/canonical-capability-behavior.spec.js e2e/frontend-module-characterization.spec.js e2e/issue-208-pagination-journeys.spec.js --retries=0
npm --prefix backend run test:e2e
npm --prefix backend run test:e2e:frontend-parity
python -m pytest tests/infra/test_template.py
make sam-validate
make sam-build
make ci
git diff --checkIf a command is skipped, Tester must say why. Do not skip the infra template tests: they currently pin mailing bucket, Dapier IAM, deploy parameters, and the daily mailing EventBridge rule.
Screenshots
Capture untracked native-size PNGs under .tmp/screenshots/issue-246/ (do not commit):
01-operations-nav-no-mailing-desktop-1440x900.png02-operations-nav-no-mailing-mobile-390x844.png03-mailing-exports-hash-recovers-home-desktop-1440x900.png04-newsletter-still-works-desktop-1440x900.png05-calendar-still-works-desktop-1440x900.png06-bookkeeping-still-works-desktop-1440x900.png
Tester reads each image for leftover “Mailing exports” / “Mailing-list exports” copy, broken Operations nav, error pages, and layout overlap.
Activity
alexeygrigorev commentedon Oct 5, 2026
Reporter screenshot of the Mailing exports nav item to remove.
alexeygrigorev commentedon Oct 5, 2026
Reporter screenshot: Operations nav with Mailing exports underlined as the item to remove.
[-]Remove mailing export from DataOps; it now lives in Dapier[/-][+]Remove mailing-list export from DataOps; Dapier now owns it[/+]alexeygrigorev commentedon Oct 5, 2026
GROOMED
Researched the live mailing-export product and rewrote this into an agent-ready deletion spec.
Decision: remove the capability completely from UI, authenticated API, backend service, daily EventBridge schedule, Dapier credential IAM, stack parameters, tests, and
docs/mailing-list-exports.md. Dapier now owns the export; DataOps must not keep a hidden reader, empty/mailing-exportspage, or disabled-config mode.Data safety: mailing jobs (
MAILING_EXPORT#in the artifacts table) and private ZIPs become unused. Do not add a cleanup migrator. RemoveMailingExportsBucketfrom the template while leavingDeletionPolicy: Retainso CloudFormation orphans the physical bucket.[HUMAN]after deploy: delete unused GitHub Actions vars, optionally empty/delete the retained bucket and leftover artifacts, and optionally pause the live “Backup MailChimp mailing list to Google Drive” recurring config.Orchestrator follow-up (not done in this grooming):
Labels: removed
needs grooming; addedtestinganddata. Ready for Software Engineer.alexeygrigorev commentedon Oct 5, 2026
SWE implementation — #246 mailing-export deletion
Complete capability deletion: DataOps no longer requests, stores, schedules, or presents mailing-list export. Dapier owns Mailchimp export. No shims, empty routes, disabled-config mode, dormant Dapier/Mailchimp credential reader, mailing-specific redirect, or runtime S3/Dynamo emptier.
Worktree:
/home/alexey/git/dataops/.tmp/worktrees/issue-246-remove-mailing-exportsBranch:
issue-246-remove-mailing-exportsBase:
0e274de(origin/mainat assignment)Not committed.
Deleted / removed
UI: Operations nav
#mailing-exports-nav-button, hash route/#/mailing-exports,frontend/src/surfaces/finance/mailing.js(unwired fromfinance/index.jsonly), runtime wiring, operations title map, mailing-export CSS rules only, frontend-assets inventory.API/backend:
backend/src/routes/mailingExports.ts,backend/src/mailingExports/,backend/src/db/mailingExports.ts, handlerdataopsAction === 'mailing-export', mailing-bucket private-download special-case (email-document path stays), telemetry familymailing_exports, local/e2e mailing provider simulator.Infra/deploy (
infra/template.full.yaml): parametersMailingExportsConfig,DapierCredentialsTableName,DapierCredentialsTableArn;MailingExportsBucket+ policy (resource still hadDeletionPolicy: Retainat removal so CFN orphans the physical bucket);BackendFunctionDailyMailingExportrule + permission; mailing S3 IAM and DapierGetItemIAM; envDATAOPS_MAILING_EXPORTS_CONFIG,DATAOPS_MAILING_EXPORTS_BUCKET,DATAOPS_DAPIER_CREDENTIALS_TABLE; GitHub Actions deploy wiring. Daily backend cron and portable execution-export schedules remain.Seeds/docs: baseline recurring seed “Backup MailChimp mailing list to Google Drive”;
docs/mailing-list-exports.md; DataOps-owned weekly Mailchimp-backup language in JTBD and conversational plugin inventory. Deploy seed gate now expects 6 recurring configs.Tests: deleted
backend/tests/mailing-exports.test.ts; addedbackend/tests/mailing-exports-removed.test.ts; updated shared inventories. SAM identity inventory compares processed current template to frozen origin/main0e274deminus the four mailing resources (BackendFunction/BackendFunctionRoleexcluded from exact equality because IAM/env change). No dummy EventBridge rule.Changed files
finance/index.jsonly unwires mailing.styles.cssonly removes mailing-export rules/selectors.Tests run
node --test frontend/test/routing.test.mjs frontend/test/runtime-composition.test.mjs frontend/test/finance-surface.test.mjsnpm run test:frontend:unitnpm --prefix backend run typechecknpm --prefix backend testnpm --prefix backend run build(includesverify-frontend-artifact.mjs)uv run --with pytest --with pyyaml python -m pytest tests/infra/test_template.pytest_processed_template_keeps_baseline_resource_identity_inventory,test_five_schedules_are_explicit_identity_stable_resources_with_exact_behavior,test_mailing_export_capability_is_removed_from_template_and_deploy)sam validate --template-file infra/template.full.yamlgit diff --checkThe 8 infra failures already mismatch origin/main
0e274devs older SHA6236865/ stale string contracts. They are not caused by this deletion (KnowledgeWorker/alarms, sandboxDataOpsEnvironment,GITHUB_OWNERon KnowledgeWorker, sponsorConditionCheckItem,$body.templates.total == 11,AUTH_SESSION_LIFETIME_SECONDS: 28800). I did not rewrite those unrelated #217 tests.Screenshots
Skipped. No portal process in this worktree, and Playwright is not installed here (
backend/node_modules/@playwright/testmissing). Tester should capture under.tmp/screenshots/issue-246/.Acceptance criteria
/#/mailing-exportsis not a workspace route; unknown-hash recovery to Home (routing + runtime-composition + e2e specs). Visual proof pending Tester screenshots./api/mailing-exportsand/run→ 401{ error: 'Unauthorized' }; authenticated → 404{ error: 'Not found' }. No stub.mailingExports/modules, DB, routes deleted; handler no longer special-casesmailing-export(falls through to cron).docs/mailing-list-exports.mddeleted; JTBD/plugin inventory no longer say DataOps exports Mailchimp audiences.[HUMAN]after deploy (rule gone, unused GHA vars, optional bucket/item/recurring cleanup).Skipped (Tester)
npm --prefix backend run test:e2e/ focused e2e /test:e2e:frontend-parity— Playwright not installed in this worktree afternpm ci.make sam-build/make ci— full packaging/CI aggregate left for Tester on a frozen candidate.python -m pytestwithout uv — this environment has no pytest; useduv run --with pytest --with pyyaml.Out of scope kept: historical
backend/docs/data.md, Trello import mapping, newsletter Mailchimp campaign links, SOPsystems: ["mailing"].alexeygrigorev commentedon Oct 5, 2026
TEST PASS
Tester independently verified the uncommitted #246 deletion in worktree
issue-246-remove-mailing-exports(base0e274de). Product code was not edited. Playwright was present (node_modules/@playwright/testv1.61.1, workspace-hoisted); Chromium was installed and e2e was run. SWE’s “Playwright missing after npm ci” skip is not accepted as a skip reason.Commands
node --test frontend/test/routing.test.mjs frontend/test/runtime-composition.test.mjs frontend/test/finance-surface.test.mjsnpm run test:frontend:unitnpm --prefix backend run typechecknpm --prefix backend testmailing-export capability is removed(1065ms)npm --prefix backend run build+node backend/scripts/verify-frontend-artifact.mjs --source frontend --artifact backend/distmailing.jscanonical-route-parity,canonical-capability-behavior,frontend-module-characterization,issue-208-pagination-journeys,--retries=0)npm --prefix backend run test:e2e -- --retries=0npm --prefix backend run test:e2e:frontend-parity -- --retries=00e274de; see pre-existingpython -m pytest tests/infra/test_template.pypythonis/home/alexey/git/sandbox-screenshots/.venv/bin/pythonwith no pytest (No module named pytest)uv run --with pytest --with pyyaml python -m pytest tests/infra/test_template.py0e274dewith no #246 diffmake sam-validatemake sam-buildbuild-sam-artifact.mjs); Node 24.13.1 failed the version assert. Build Succeeded; no mailing assetmake ci(Node 20.20.2) first rune2e-global-setup.test.ts(“retains the last HTTP status…”); file is not in this diffbackend/tests/e2e-global-setup.test.tsmake cirerun (Node 20.20.2)git diff --checksam-build/make ciwere run withPATH=/home/alexey/.nvm/versions/node/v20.20.2/bin:$PATH.Diff vs SWE handoff
Uncommitted tree matches a complete deletion: UI nav/route/surface/runtime/CSS, API routes/service/db/handler/telemetry, EventBridge schedule, Dapier IAM +
MailingExportsConfigstack params, deploy workflow params, MailChimp backup seed (recurring gate 7→6), tests, anddocs/mailing-list-exports.md. No empty route, disabled-config mode, dormant Dapier reader, or mailing-specific redirect. Leftover “mailing” strings are absence tests, newsletter Mailchimp campaign links (out of scope), or historical SOPsystems: ["mailing"](out of scope).MailingExportsBucketon0e274dealready hadDeletionPolicy: RetainandUpdateReplacePolicy: Retain. Current template has no mailing resources, so CloudFormation will orphan the physical bucket.Email-document private download remains in
backend/src/routes/artifacts.ts. Leftover mailing ZIP download is 409.Acceptance criteria
frontend-assets.jsonhas no mailing/api/*/#/mailing-exportsrecovers to Homehash=#/, Today);frontend-module-characterizationinvalid-hashes test passed (includes#/mailing-exports);canonical-route-paritypassed/api/mailing-exportsrefused like other unknown/api/*{ error: 'Unauthorized' }/api/mailing-exportsis 404{ error: 'Not found' }MailingExportsBucketremoved with Retain at removal timeartifacts.tsstill allows email-bucket sensitive objects; leftover mailing ZIP 409Screenshots (read)
Untracked native-size PNGs under
.tmp/screenshots/issue-246/(not committed):01-operations-nav-no-mailing-desktop-1440x900.png(1440×900) — Operations = Newsletter, Calendar, Sponsors, Bookkeeping, Review. No “Mailing exports”.02-operations-nav-no-mailing-mobile-390x844.png(390×844) — same Operations list in the drawer.03-mailing-exports-hash-recovers-home-desktop-1440x900.png(1440×900) — Today / Home, no error page.04-newsletter-still-works-desktop-1440x900.png(1440×900) — Newsletter planner.05-calendar-still-works-desktop-1440x900.png(1440×900) — Operations calendar (October 2026).06-bookkeeping-still-works-desktop-1440x900.png(1440×900) — Bookkeeping + invoice ledger.Tester read each image. No leftover mailing copy, broken Operations nav, error page, or layout overlap.
Pre-existing failures (not caused by this diff)
Infra pytest: this worktree 8 failed / 32 passed; origin/main
0e274de9 failed / 31 passed. Extra origin/main failure istest_processed_template_keeps_baseline_resource_identity_inventory(inventory this issue updated). Remaining 8 are stale #217 / SHA6236865contracts (DataOpsEnvironmentsandbox vs prod, KnowledgeWorker alarms,GITHUB_OWNER, sponsorTransactWriteItemsstring, sandbox provenance extra params,$body.templates.total == 11,AUTH_SESSION_LIFETIME_SECONDS: 28800).test_mailing_export_capability_is_removed_from_template_and_deploypassed.Focused e2e 5 fails / full e2e 13 fails: mailing-scoped specs passed (route-parity, characterization unknown hash including
#/mailing-exports, issue-208 files continuation in the full run). 11 of 13 failing spec files have zero diff vs0e274de. The other two only delete mailing tests /noMailingConfig. Failures:EUR 18.50, UI showsEUR Expenses 18.50(Bookkeeping quick wins: ledger form and layout fixes (no data-model change) #243 money-direction; assertion identical on origin/main).ECONNREFUSED/ 30s timeouts (session/Settings, bookkeeping-production-portal) — flake; assistants/artifacts and templates/recurring failed in focused run and passed in full run.664.078125 > 664.078125), issue-223Showing 0 of 0, operating-model unavailable copy, runtime-template “private knowledge repository”, surface-feedback[data-summary-id="home"].frontend-parity:
backend/scripts/frontend-parity.mjsis unchanged. Node 20.20.2:client.getClient is not a functionduring local schema--evalimport. Node 24.13.1:400 /knowledge/statusonsource/home-ready. Knowledge/status, not mailing.make ci first run: one flake in
e2e-global-setup.test.ts(not in this diff). Isolated rerun 18/18; fullmake cirerun exit 0.No #246 code fix required. Pre-existing e2e/pytest/parity failures belong on their own issues (#243 totals copy, newsletter date default, stale #217 infra SHA, knowledge/status parity).
alexeygrigorev commentedon Oct 5, 2026
ACCEPTED
User-perspective acceptance of #246 after Tester TEST PASS.
Alexey asked to remove mailing export from the code and UI because Dapier owns it now. The operator journey matches the groomed complete-deletion spec.
Operator experience
/#/mailing-exportsrecovers to Home (/#/) through the existing unknown-hash behavior. No mailing heading, cards, or run actions remain.Scope vs implementation
Uncommitted worktree
issue-246-remove-mailing-exportsis a complete capability deletion, not a hide/disable:frontend/src/surfaces/finance/mailing.js, runtime wiring, CSS, and asset-list entry are gone.GET /api/mailing-exportsandPOST /api/mailing-exports/runare unknown/api/*paths (unauthenticated 401, authenticated 404). No empty-config stub.mailingExports/service, DB, routes, scheduleddataopsAction: mailing-exportbranch, mailing-bucket download special-case, telemetry family, and local/e2e Mailchimp simulator are gone.GetItemIAM, stack parameters, env vars, and GitHub Actions required-var/overrides are gone.docs/mailing-list-exports.mddeleted; shared catalogs no longer require the surface.No empty
/mailing-exportspage, mailing-specific redirect, disabled-config mode, or leftover Dapier credential reader. Remaining “mailing” strings are absence tests or out-of-scope historical mapping (Trello import, SOPsystems: ["mailing"], newsletter Mailchimp campaigns).Evidence
Tester ran the issue’s verification workflow on this frozen candidate (frontend unit, backend unit/typecheck/build, focused + full e2e,
make sam-validate/make sam-build/make ci, infra pytest) and captured the six required screenshots. I read each PNG:01-operations-nav-no-mailing-desktop-1440x900.png— Operations = Newsletter, Calendar, Sponsors, Bookkeeping, Review. No mailing item.02-operations-nav-no-mailing-mobile-390x844.png— same list in the mobile drawer.03-mailing-exports-hash-recovers-home-desktop-1440x900.png— Today / Home after the old hash; capture noteshash=#/.04-newsletter-still-works-desktop-1440x900.png— Newsletter planner.05-calendar-still-works-desktop-1440x900.png— Operations calendar (October 2026).06-bookkeeping-still-works-desktop-1440x900.png— Bookkeeping + invoice ledger.No leftover “Mailing exports” / “Mailing-list exports” copy, broken Operations nav, error page, or layout overlap.
Pre-existing e2e/infra/parity failures Tester listed are not caused by this deletion and do not block acceptance.
[HUMAN] after ship (does not block merge)
After deploy: confirm the daily mailing-export EventBridge rule is gone in the live stack; delete unused GitHub Actions vars
MAILING_EXPORTS_CONFIG,DAPIER_CREDENTIALS_TABLE_NAME, andDAPIER_CREDENTIALS_TABLE_ARN; optionally empty/delete the retained mailing-exports bucket and leftoverMAILING_EXPORT#/mailing-export-*records; optionally pause/delete the live Mailchimp-backup recurring config. Do not put archive contents or credentials in this repo.Orchestrator follow-up
Ready for Software Engineer commit (
Closes #246). Do not wait on the [HUMAN] cleanup.Remove mailing-list export from DataOps; Dapier owns it
Merge issue-246-remove-mailing-exports: Remove mailing-list export fr…
alexeygrigorev commentedon Oct 5, 2026
Shipped on
mainasf38578e(merge ofee6fb16).Mailing-list export is gone from the DataOps portal, API, schedule, Dapier IAM, and docs. Dapier owns Mailchimp export.
[HUMAN] remaining after deploy
Do not close this issue until these are confirmed in production:
BackendFunctionDailyMailingExportis gone after SAM deployMAILING_EXPORTS_CONFIG,DAPIER_CREDENTIALS_TABLE_NAME,DAPIER_CREDENTIALS_TABLE_ARNdeleteddataops-v1-mailing-exportsthen delete the orphaned bucketrecurring-config-mailing-list-backupif it still existsRelated: closing #108 as superseded.
alexeygrigorev commentedon Oct 5, 2026
On-call CI/CD after merge
f38578eWatched the
mainpush for f38578e (Merge issue-246-remove-mailing-exports).Deploy (the #246 gate): pass
sam deploydid not passMAILING_EXPORTS_CONFIG/DAPIER_CREDENTIALS_*. Those keys are gone from.github/workflows/deploy-dataops-v1.yml,infra/template.full.yaml, and the deploy parameter-overrides.BackendFunctionDailyMaAWS::Events::RuleDELETE_COMPLETE) plus its Lambda permission andMailingExportsBucketPolicy.MailingExportsBucketwas DELETE_SKIPPED (S3 retention). HUMAN still owns live AWS confirmation that the rule is gone.Other workflows on this SHA
Not a #246 mailing-export regression
E2E failures are the same pre-existing main set (already failing on
db06b87/fda3592), none of them are mailing-export journeys:canonical-capability-behaviorNewsletter/Calendar (Server newsletter ${id}not visible)canonical-task-workflow-behaviorTasks queue overdue empty copydocs-outageempty corpus copyeditor-screenshotsuploaded screenshot geometryissue-223-workspace-redesign.home-attention-countempty textruntime-template-readonly“private knowledge repository” copysurface-feedback-statesHome/Tasks summariesPlanning-docs SOP lint already failed on
16bd8c5andad09a89. That job never reached infra template tests; deploy SAM validate covered the #246 template change.SWE: no #246 follow-up from this deploy. Do not treat the pre-existing E2E/planning-docs failures as mailing-export work. A separate session is already on production IAM
ConditionCheckItem; this deploy did not collide with that.On-call: pass for #246 deploy/wiring. E2E + planning-docs remain red on main independently of this merge.
alexeygrigorev commentedon Oct 5, 2026
HUMAN close-out done.
f38578e; still absent now).MAILING_EXPORTS_CONFIG,DAPIER_CREDENTIALS_TABLE_NAME,DAPIER_CREDENTIALS_TABLE_ARN. Remaining repo var is onlyEMAIL_DOCUMENT_EXTERNAL_SOURCE_PREFIX.dataops-v1-mailingexportsbucket-ftjb0jgjayfjanddataops-v1-mailingexportsbucket-nxsjwruqoigw). No current objects or versions.MAILING_EXPORT#job record (one failed run). Nomailing-export-*artifact records remained.RECURRING#8eabd05d-…). Archived its 6 leftovertodotasks so they leave the active queues. One already-donetask was left in history.dapier-poll-mailchimp-drive-backuprule was left alone.No further HUMAN work on this issue.
alexeygrigorev commentedon Oct 5, 2026
HUMAN production cleanup is done. Closing.