You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make sandbox the only active DataOps deployment and rollout target
Status: source accepted by Architecture, Security, Tester, and PM; source commits and protected-boundary activation remain incomplete
Tags: bug, infra, testing, migration, P0
Depends on: None — this pre-#136 boundary repair can proceed while #143 independently owns Sponsor table ownership reconciliation
Blocks: #136 directly; #30, #41, #71, #108, #113–#115, #120–#129, #131, #134, and #137 at their current deployment, migration, provider-smoke, or rollout gates
Next owner: Software Engineer to commit both accepted source candidates on their review branches without activation; then the authorized GitHub environment administrator, sandbox AWS operator, and orchestrator follow the documented environment → trust → workflow order
Resume condition: commit accepted source without activation; configure/read back exact dataops-v1-sandbox; then integrate/apply/read back exact trust; only then activate the accepted DataOps workflow and verify source CI. #136 still resumes only after its independent #143 ownership prerequisite and fresh gates also pass
Authoritative product decision
DataOps runs only in the shared AWS sandbox for now. Current work must not require, create, select, deploy, mutate, smoke-test, or roll out a production target. Any future production work requires new user authorization and a separately groomed issue.
The current stack, role, table, bucket, and domain names are legacy neutral identities. Do not rename or replace them under this correction. Sandbox also does not declassify Sponsor, finance, contact, Telegram, Mailchimp, Trello, or other operational data; existing privacy, integrity, backup, retention, rollback, and explicit HUMAN controls remain.
Current state and issue graph
Shared sandbox infrastructure is sourced from ../aws-infra/sandbox/dataops/.
Ordinary application deployment uses .github/workflows/deploy-dataops-v1.yml, the exact main branch OIDC subject, samconfig.toml environment full-sandbox, and stack dataops-v1.
The protected Sponsor migration incorrectly references nonexistent GitHub environment dataops-v1-production.
The effective sandbox deploy-role trust currently admits only the exact main branch subject. An environment-protected job receives an environment subject, so the exact sandbox-environment subject must be added without removing or broadening the branch subject.
Change only the protected migration boundary and its direct public-safe documentation/tests:
.github/workflows/migrate-sponsor-crm-gsis.yml
scripts/deploy/README.md
scripts/deploy/sponsor-crm-gsi-core.test.mjs
Required behavior:
Replace the migration job environment with exact dataops-v1-sandbox.
Preserve workflow_dispatch as the only trigger, actor/repository/main-ref validation, shared non-cancelling deployment concurrency, existing OIDC role, migration command, and every Migrate Sponsor CRM GSIs in a protected stage-only workflow #136 fail-closed ownership/state check.
Preserve the ordinary deploy workflow and its exact accepted SAM command byte-for-byte. Do not add migration behavior to it or application deployment to the migration workflow.
Prove no active workflow in this repository names or selects a production environment/target.
Do not change infra/template.full.yaml, samconfig.toml, application resources, migrator/guard runtime logic, stack/resource names, flags, or provider configuration in this issue.
Because this changes one path in #136's accepted workflow fingerprint, freeze a new exact base/path/tree/diff fingerprint and require fresh Architecture/Security consideration before any later #136 dispatch. Preserve the accepted #136 implementation and test evidence; do not represent the old fingerprint as the new candidate.
Scope B — exact additive sandbox OIDC trust
Use a clean isolated ../aws-infra worktree created from current origin/main. The existing ../aws-infra checkout is dirty and contains user-owned changes and missing worktree files; do not modify, restore, stage, stash, reset, or commit anything in that checkout.
../aws-infra/sandbox/dataops/README.md only for the exact public-safe trust explanation
The deploy-role trust must accept exactly two sub values for DataTalksClub/dataops:
the existing exact main branch subject used by ordinary sandbox deployment; and
the exact dataops-v1-sandbox environment subject used by the protected migration.
Keep exact aud=sts.amazonaws.com. The environment name may be a CloudFormation parameter only if its allowed values are restricted to exactly dataops-v1-sandbox; no caller-selected alternate environment is allowed.
Reject every wildcard, pull-request, tag, other branch, other environment including dataops-v1-production, other repository/owner, alternate audience, StringLike, or missing condition. Do not alter any permission-policy action/resource, managed-policy attachment, session duration, role name, stack name, account/region boundary, retention policy, or unrelated resource. Tests must recompute the expected trust/source fingerprints and prove all prior #129/#130/#131/#135/#138/#139 permission and negative cases remain exact.
A source commit or push does not make this trust effective. aws-infra has no self-deploying CI/CD path for this stack.
Scope C — protected sandbox environment HUMAN gate
After accepted source is integrated, an authorized GitHub environment administrator must configure exact dataops-v1-sandbox with:
deployment branch policy permitting only main;
at least one required reviewer independent from the dispatching actor;
self-review prevented;
administrator bypass disabled; and
no production environment, secret, variable, or deployment target created by this issue.
Public evidence contains only environment name, sanitized rule counts/results, UTC verification time, verifier role, and PASS/FAIL. Do not publish reviewer identity/contact details, screenshots, private links, secrets, or provider/resource identifiers. Environment configuration does not authorize workflow dispatch.
Scope D — effective trust HUMAN gate
After the reviewed aws-infra source is integrated, an authorized sandbox AWS operator must:
create and review a change set for the existing deploy-role stack;
require exactly one non-replacing deploy-role trust-policy modification and no permission, attachment, role-name, session, tag, or unrelated-resource change;
apply only that accepted change set;
wait for a terminal successful stack state; and
record a sanitized read-only comparison proving the two exact allowed subject classes and all permission policies unchanged.
No agent or grooming action authorizes this AWS mutation. Do not dispatch the Sponsor migration to test the trust. The first migration dispatch remains owned by #136 after #143 and every #136 gate pass.
Bounded tracker reconciliation
After the source target and protected-boundary design are accepted, Product Manager updates only current status/dependency/resume text and unchecked environment-specific HUMAN criteria that incorrectly require production in:
Use sandbox deployment, sandbox migration, sandbox provider smoke, or sandbox operational-data wording as applicable. Do not mechanically rewrite generic deployed-code terms such as production transaction/client/runtime paths, checked implementation criteria, historical comments, review verdicts, workflow runs, fingerprints, or evidence links. #140's route-A rejection and #141's evidence boundary remain unchanged. #143 still requires an independently accepted ownership path unless fresh Architecture/Security review explicitly changes it.
Acceptance criteria
The migration workflow uses exact protected environment dataops-v1-sandbox; no active workflow names or selects a production target.
The ordinary deploy workflow, exact SAM command, application template, full-sandbox config, runtime resources, stack/resource names, flags, and provider configuration are unchanged.
The sandbox deploy-role trust accepts exactly the existing main-branch subject and the new dataops-v1-sandbox environment subject with exact audience; every broader or alternate subject/audience is rejected.
No deploy-role permission, resource scope, attachment, role/session property, retention control, or unrelated aws-infra resource changes.
Work occurs in clean isolated worktrees; both dirty main checkouts and all unrelated user-owned changes remain untouched.
DataOps and aws-infra candidates record exact bases, NUL-safe path inventories, tree/diff/file hashes, and clean focused diffs for independent review.
DataOps Sponsor migration tests and infrastructure tests cover the sandbox environment, workflow split, unchanged application deploy command, and rejection of production/alternate targets.
aws-infra parsed and adversarial tests cover exact two-subject trust, exact audience, production/other subject rejection, unchanged permission-policy fingerprints, quotas/counts, and no replacement/broadening.
Security accepts exact OIDC subjects, independent-review protection, no bypass/wildcard, unchanged least privilege, and sanitized evidence boundaries.
Tester runs the full commands below, verifies every criterion, and records exact exit codes/test counts; no UI changed, so browser screenshots are not required.
PM accepts the sandbox-only operator flow and performs the bounded current-tracker reconciliation without rewriting historical evidence.
Software Engineer commits accepted DataOps changes with Refs #145; accepted aws-infra changes use Refs DataTalksClub/dataops#145 through that repository's approved integration path. Neither commit closes Make sandbox the only active DataOps deployment and rollout target #145 before HUMAN gates.
[HUMAN] An authorized operator applies and verifies the exact sandbox OIDC trust change from the accepted source revision.
[HUMAN] An authorized administrator configures and verifies dataops-v1-sandbox with main-only deployment, an independent required reviewer, no self-review, and no administrator bypass.
npm run test:sponsor-gsi-migrator
uv run --with pytest python -m pytest -q tests/infra
git diff --check <accepted-dataops-base>...HEAD
Also parse all active .github/workflows/*.yml and assert that the migration uses only dataops-v1-sandbox, no active workflow contains dataops-v1-production, and the ordinary deploy workflow/SAM command digest equals the accepted pre-#145 value.
From the clean isolated aws-infra worktree:
uv run --with pytest python -m pytest sandbox/dataops/tests -q
sam validate --lint --template-file sandbox/dataops/template.github-actions.yaml
git diff --check <accepted-aws-infra-base>...HEAD
Tester must inspect the parsed CloudFormation trust object and mutation cases, not rely only on substring checks. No AWS-backed validation, workflow dispatch, browser test, or screenshot is required for the agent-verifiable stage.
Test scenarios
Ordinary sandbox deployment retains its identity
Given the exact existing main branch OIDC subject
When the trust policy is rendered and parsed
Then it remains accepted with exact audience and every permission policy remains byte-equivalent.
Protected sandbox migration receives an environment subject
Given a manually dispatched migration from main after environment approval
When GitHub issues the dataops-v1-sandbox environment subject
Then the exact subject is admitted and no other environment subject is admitted.
Production or alternate target is attempted
Given a production, pull-request, tag, other-branch, other-environment, other-owner/repository, wildcard, or alternate-audience subject
When trust and workflow tests evaluate it
Then it fails closed before credentials or migration work.
Environment is absent or under-protected
Given dataops-v1-sandbox is missing, permits a non-main branch, lacks an independent reviewer, permits self-review, or permits administrator bypass
When the HUMAN gate is reviewed
Then #145 and #136 remain blocked and no dispatch occurs.
Existing ownership blocker remains
Given #145 source and HUMAN boundary gates pass while #143 remains incomplete
When #136 readiness is assessed
Then migration/deployment remain blocked; sandbox naming does not establish Sponsor table ownership.
Tracker text is reconciled
Given current issue bodies still describe active production gates
When PM performs bounded reconciliation
Then current routing says sandbox-only, future production requires new authority, and historical evidence remains unchanged.
Deferred child boundary
Runtime/export labeling is deliberately excluded before #136. Do not change DataOpsEnvironment, DATAOPS_ENV, the application template, or the ordinary deploy parameter list under #145: those bytes participate in #136's accepted template/deploy contract.
After #136 reaches accepted sandbox migration completion and the ordinary sandbox deploy succeeds, a separate child may change runtime/export labeling from prod to sandbox with a no-replacement change-set proof. #145 must not create or implement that child.
Out of scope
Any production environment, deployment, data action, smoke, rollout, or future-production design.
Dispatching/rerunning migration or application workflows.
Make sandbox the only active DataOps deployment and rollout target
Status: source accepted by Architecture, Security, Tester, and PM; source commits and protected-boundary activation remain incomplete
Tags:
bug,infra,testing,migration,P0Depends on: None — this pre-#136 boundary repair can proceed while #143 independently owns Sponsor table ownership reconciliation
Blocks: #136 directly; #30, #41, #71, #108, #113–#115, #120–#129, #131, #134, and #137 at their current deployment, migration, provider-smoke, or rollout gates
Next owner: Software Engineer to commit both accepted source candidates on their review branches without activation; then the authorized GitHub environment administrator, sandbox AWS operator, and orchestrator follow the documented environment → trust → workflow order
Resume condition: commit accepted source without activation; configure/read back exact
dataops-v1-sandbox; then integrate/apply/read back exact trust; only then activate the accepted DataOps workflow and verify source CI. #136 still resumes only after its independent #143 ownership prerequisite and fresh gates also passAuthoritative product decision
DataOps runs only in the shared AWS sandbox for now. Current work must not require, create, select, deploy, mutate, smoke-test, or roll out a production target. Any future production work requires new user authorization and a separately groomed issue.
The current stack, role, table, bucket, and domain names are legacy neutral identities. Do not rename or replace them under this correction. Sandbox also does not declassify Sponsor, finance, contact, Telegram, Mailchimp, Trello, or other operational data; existing privacy, integrity, backup, retention, rollback, and explicit HUMAN controls remain.
Current state and issue graph
../aws-infra/sandbox/dataops/..github/workflows/deploy-dataops-v1.yml, the exactmainbranch OIDC subject,samconfig.tomlenvironmentfull-sandbox, and stackdataops-v1.dataops-v1-production.mainbranch subject. An environment-protected job receives an environment subject, so the exact sandbox-environment subject must be added without removing or broadening the branch subject.Scope A — exact DataOps workflow correction
Change only the protected migration boundary and its direct public-safe documentation/tests:
.github/workflows/migrate-sponsor-crm-gsis.ymlscripts/deploy/README.mdscripts/deploy/sponsor-crm-gsi-core.test.mjsRequired behavior:
dataops-v1-sandbox.workflow_dispatchas the only trigger, actor/repository/main-ref validation, shared non-cancelling deployment concurrency, existing OIDC role, migration command, and every Migrate Sponsor CRM GSIs in a protected stage-only workflow #136 fail-closed ownership/state check.infra/template.full.yaml,samconfig.toml, application resources, migrator/guard runtime logic, stack/resource names, flags, or provider configuration in this issue.Because this changes one path in #136's accepted workflow fingerprint, freeze a new exact base/path/tree/diff fingerprint and require fresh Architecture/Security consideration before any later #136 dispatch. Preserve the accepted #136 implementation and test evidence; do not represent the old fingerprint as the new candidate.
Scope B — exact additive sandbox OIDC trust
Use a clean isolated
../aws-infraworktree created from currentorigin/main. The existing../aws-infracheckout is dirty and contains user-owned changes and missing worktree files; do not modify, restore, stage, stash, reset, or commit anything in that checkout.Change only:
../aws-infra/sandbox/dataops/template.github-actions.yaml../aws-infra/sandbox/dataops/tests/test_template_github_actions.py../aws-infra/sandbox/dataops/README.mdonly for the exact public-safe trust explanationThe deploy-role trust must accept exactly two
subvalues forDataTalksClub/dataops:mainbranch subject used by ordinary sandbox deployment; anddataops-v1-sandboxenvironment subject used by the protected migration.Keep exact
aud=sts.amazonaws.com. The environment name may be a CloudFormation parameter only if its allowed values are restricted to exactlydataops-v1-sandbox; no caller-selected alternate environment is allowed.Reject every wildcard, pull-request, tag, other branch, other environment including
dataops-v1-production, other repository/owner, alternate audience,StringLike, or missing condition. Do not alter any permission-policy action/resource, managed-policy attachment, session duration, role name, stack name, account/region boundary, retention policy, or unrelated resource. Tests must recompute the expected trust/source fingerprints and prove all prior #129/#130/#131/#135/#138/#139 permission and negative cases remain exact.A source commit or push does not make this trust effective.
aws-infrahas no self-deploying CI/CD path for this stack.Scope C — protected sandbox environment HUMAN gate
After accepted source is integrated, an authorized GitHub environment administrator must configure exact
dataops-v1-sandboxwith:main;Public evidence contains only environment name, sanitized rule counts/results, UTC verification time, verifier role, and PASS/FAIL. Do not publish reviewer identity/contact details, screenshots, private links, secrets, or provider/resource identifiers. Environment configuration does not authorize workflow dispatch.
Scope D — effective trust HUMAN gate
After the reviewed
aws-infrasource is integrated, an authorized sandbox AWS operator must:No agent or grooming action authorizes this AWS mutation. Do not dispatch the Sponsor migration to test the trust. The first migration dispatch remains owned by #136 after #143 and every #136 gate pass.
Bounded tracker reconciliation
After the source target and protected-boundary design are accepted, Product Manager updates only current status/dependency/resume text and unchecked environment-specific HUMAN criteria that incorrectly require production in:
Use sandbox deployment, sandbox migration, sandbox provider smoke, or sandbox operational-data wording as applicable. Do not mechanically rewrite generic deployed-code terms such as production transaction/client/runtime paths, checked implementation criteria, historical comments, review verdicts, workflow runs, fingerprints, or evidence links. #140's route-A rejection and #141's evidence boundary remain unchanged. #143 still requires an independently accepted ownership path unless fresh Architecture/Security review explicitly changes it.
Acceptance criteria
dataops-v1-sandbox; no active workflow names or selects a production target.full-sandboxconfig, runtime resources, stack/resource names, flags, and provider configuration are unchanged.dataops-v1-sandboxenvironment subject with exact audience; every broader or alternate subject/audience is rejected.aws-infraresource changes.aws-infracandidates record exact bases, NUL-safe path inventories, tree/diff/file hashes, and clean focused diffs for independent review.aws-infraparsed and adversarial tests cover exact two-subject trust, exact audience, production/other subject rejection, unchanged permission-policy fingerprints, quotas/counts, and no replacement/broadening.Refs #145; acceptedaws-infrachanges useRefs DataTalksClub/dataops#145through that repository's approved integration path. Neither commit closes Make sandbox the only active DataOps deployment and rollout target #145 before HUMAN gates.dataops-v1-sandboxwith main-only deployment, an independent required reviewer, no self-review, and no administrator bypass.Required verification
From the DataOps repository:
Also parse all active
.github/workflows/*.ymland assert that the migration uses onlydataops-v1-sandbox, no active workflow containsdataops-v1-production, and the ordinary deploy workflow/SAM command digest equals the accepted pre-#145 value.From the clean isolated
aws-infraworktree:Tester must inspect the parsed CloudFormation trust object and mutation cases, not rely only on substring checks. No AWS-backed validation, workflow dispatch, browser test, or screenshot is required for the agent-verifiable stage.
Test scenarios
Ordinary sandbox deployment retains its identity
Given the exact existing
mainbranch OIDC subjectWhen the trust policy is rendered and parsed
Then it remains accepted with exact audience and every permission policy remains byte-equivalent.
Protected sandbox migration receives an environment subject
Given a manually dispatched migration from
mainafter environment approvalWhen GitHub issues the
dataops-v1-sandboxenvironment subjectThen the exact subject is admitted and no other environment subject is admitted.
Production or alternate target is attempted
Given a production, pull-request, tag, other-branch, other-environment, other-owner/repository, wildcard, or alternate-audience subject
When trust and workflow tests evaluate it
Then it fails closed before credentials or migration work.
Environment is absent or under-protected
Given
dataops-v1-sandboxis missing, permits a non-main branch, lacks an independent reviewer, permits self-review, or permits administrator bypassWhen the HUMAN gate is reviewed
Then #145 and #136 remain blocked and no dispatch occurs.
Existing ownership blocker remains
Given #145 source and HUMAN boundary gates pass while #143 remains incomplete
When #136 readiness is assessed
Then migration/deployment remain blocked; sandbox naming does not establish Sponsor table ownership.
Tracker text is reconciled
Given current issue bodies still describe active production gates
When PM performs bounded reconciliation
Then current routing says sandbox-only, future production requires new authority, and historical evidence remains unchanged.
Deferred child boundary
Runtime/export labeling is deliberately excluded before #136. Do not change
DataOpsEnvironment,DATAOPS_ENV, the application template, or the ordinary deploy parameter list under #145: those bytes participate in #136's accepted template/deploy contract.After #136 reaches accepted sandbox migration completion and the ordinary sandbox deploy succeeds, a separate child may change runtime/export labeling from
prodtosandboxwith a no-replacement change-set proof. #145 must not create or implement that child.Out of scope
infra/template.full.yaml,samconfig.toml,.github/workflows/deploy-dataops-v1.yml, application runtime, export schemas,DataOpsEnvironment, orDATAOPS_ENV.../aws-infrapaths explicitly authorized above.