Repository navigation
Reconcile missing CloudFormation ownership provenance for Sponsor CRM table #140
Description
Establish trusted historical ownership provenance for the Sponsor CRM table
Status: done — bounded research accepted; route A is rejected as insufficient and route B is independently owned by #143
Tags: bug, research, infra, data, P1
Depends on: None
Blocks: None — #143 independently blocks #136; #141 remains open/nonblocking and must not be recollected
Next owner: None for #140; the downstream HUMAN AWS Support/remediation owner remains exclusively under #143
Resume condition: Closed. Reconsider route A only through a fresh Architecture and Security review if a newly identified authoritative immutable source explicitly binds the exact historical pair
Lifecycle verification
This bounded research lifecycle is complete. Architecture and Security selected route B, Tester independently verified all ten checked criteria against the public sanitized record without AWS or private-evidence access, and Product Manager accepted the operator outcome after Tester PASS.
#143 owns remediation execution and remains independently blocked on its documented HUMAN Support signal. It is out of scope for #140 and did not need to complete before this research issue closed. #136 remains blocked by #143 and its separate protected-environment gate; closing #140 removes only the completed research-lifecycle gate.
Final research decision
The bounded, hashed #141 investigation found exactly one historical Sponsor CRM table-creation event. That event contains a historical DynamoDB table identifier but does not contain or cryptographically link the exact CloudFormation stack identifier. Authenticated deployment provenance establishes the relevant stack incarnation and logical resource but does not contain the table identifier. No trustworthy artifact binds both exact identifiers.
Architecture and Security therefore classify the historical ownership evidence as insufficient, not conflicting and not unavailable. Matching name/ARN, current logical mapping, current schema/configuration, remaining tags, sequence, and the current table identifier are corroboration only.
Route A is rejected. Route B is selected and fully groomed in #143. #140 has no open evidence or execution dependency and its bounded research lifecycle is accepted. #143 independently owns route-B remediation and blocks #136. #141 remains open only for honest HUMAN session-expiry/revocation and authentic provenance cleanup; it blocks neither #140 nor #143, must not recollect the same evidence, and does not block this route decision.
If AWS Support later supplies an authoritative immutable record that explicitly binds the exact historical pair, route A may be reconsidered only through a fresh Architecture and Security review. It does not reactivate automatically.
Evidence reviewed
- Migrate Sponsor CRM GSIs in a protected stage-only workflow #136 read-only discovery of the missing canonical ownership marker and the original deployment/migration block.
- Authenticated repository/deployment provenance for the relevant stack incarnation and logical resource.
- Close out the retained CloudTrail audit session record #141 fixed-window CloudTrail Event History collection, byte-exact private artifacts, public sanitized counts/digests, and four-state classification.
- #141 Architecture decision.
- #141 Security decision.
- #140 Architecture route decision.
- #140 Security route decision.
Raw events, resource/account/principal identifiers, private storage locations, support correspondence, and operational evidence remain outside this public repository. Public evidence is sanitized only.
Why route A is rejected
A one-time tagless exception required authoritative pre-incident evidence explicitly binding:
- the exact current CloudFormation stack incarnation; and
- the exact current DynamoDB table incarnation.
The available source classes split those identifiers across unlinked records. Temporal sequence, matching names, name-derived identifiers, current resource reads, configuration similarity, or absence of observed later mutations cannot create the missing authenticated link. The negative mutation history is useful corroboration but does not prove completeness outside the bounded Event History source.
Any mismatch, ambiguity, incomplete identifier, mutable artifact, unverifiable provenance, or late/current-only evidence fails closed. No code-only bypass is safe.
Selected route B
#143 owns the design and approval path for AWS-supported CloudFormation ownership reconciliation. It requires:
- AWS Support guidance and private read-only diagnosis;
- a verified backup/export and retained recovery boundary;
- an isolated non-production restore and ownership rehearsal;
- deterministic full key/item integrity plus exact schema/configuration checks;
- explicit import/replacement/Retain/UpdateReplacePolicy/named-table analysis;
- downtime, write consistency, load, cost, rollback, cleanup, and hard abort criteria;
- explicit HUMAN approval for each later mutation; and
- fresh Architecture, Security, Tester, PM, HUMAN, and On-Call gates.
No production repair is performed under #140. Reaching a route decision does not authorize any action in #143.
No-mutation boundary
Do not under #140:
- change application, guard, migrator, workflow, IAM, SAM, infrastructure, environment, or provider configuration;
- create, update, delete, restore, import, replace, or retag the table;
- manually create reserved
aws:tags; - create, execute, or delete CloudFormation change sets;
- dispatch/rerun migrations or deployments, enable flags, seed/smoke production, or touch retained queues;
- recollect Close out the retained CloudTrail audit session record #141 without a newly identified authoritative exact-pair source and fresh scope; or
- publish private operational evidence or identifiers.
The normal deployment and Sponsor GSI migration remain prohibited until #143 completes and ownership is independently re-proved.
Acceptance criteria
- Relevant available pre-incident evidence sources were inventoried with retention/access limits and sanitized integrity metadata.
- The collection was read-only and its API inventory honestly records the precollection STS identity-read deviation documented in Close out the retained CloudTrail audit session record #141; no mutation occurred.
- Each candidate artifact was classified against the evidence standard.
- Current mapping/name/ARN/schema/current table identifier were rejected as historical proof.
- Architecture and Security independently classified the evidence as insufficient and rejected route A.
- No one-time-exception implementation issue was created or authorized.
- Route B was separately groomed in Reconcile Sponsor CRM table ownership with CloudFormation #143 with backup, rehearsal, exact integrity, CloudFormation constraints, rollback/abort, cost/downtime, and approval gates.
- Migrate Sponsor CRM GSIs in a protected stage-only workflow #136 remains blocked and continues to prohibit migration/deployment.
- Public evidence is sanitized; raw evidence stays outside the public repository.
- The immediate Reconcile missing CloudFormation ownership provenance for Sponsor CRM table #140 lifecycle owner and action are precise: Tester performs bounded public/sanitized verification, then PM performs final acceptance; after Reconcile missing CloudFormation ownership provenance for Sponsor CRM table #140 acceptance, the downstream HUMAN AWS Support owner remains under independent Reconcile Sponsor CRM table ownership with CloudFormation #143 without treating grooming as mutation authorization.
Test scenarios
Current or split evidence only
Given the stack and table identifiers appear only in separate unlinked sources
When historical ownership sufficiency is assessed
Then route A remains rejected and #143 is the only selected path.
Negative mutation history
Given the bounded source contains no target delete, restore, recreate, or ownership-tag mutation
When it is reviewed
Then it remains corroboration and cannot substitute for the missing exact historical binding.
Support later supplies the exact pair
Given AWS Support later returns authenticated exact-pair provenance
When #143 receives it privately
Then work stops for a fresh #140 Architecture/Security review; route A is not inferred or auto-approved.
#141 procedural closure remains incomplete
Given session expiry/revocation or authentic retrieval provenance is still pending
When route selection is reviewed
Then #141 remains open for HUMAN cleanup but does not trigger recollection and no longer blocks #140's substantive decision.
OIDC boundary remains separate from ownership
The #145/#136 migration uses the existing exact main-branch OIDC trust with no GitHub Actions environment. That identity choice does not establish table ownership and cannot unblock migration by itself. #140 does not alter OIDC, workflow, or ownership state.
Out of scope
- A generic or one-time tagless exception implementation.
- Treating current live identity or same-name continuity as historical provenance.
- Executing Reconcile Sponsor CRM table ownership with CloudFormation #143 remediation.
- Manual reserved-tag repair.
- Migration, deployment, environment configuration, feature enablement, production data mutation, or retained-resource cleanup.
Activity
alexeygrigorev commentedon Jul 31, 2026
PM GROOMED — trusted historical binding or no exception
Selected the Security decision as the product requirement. Current StackId/logical/physical mapping, name-derived ARN, schema, remaining tags, drift, and a newly observed TableId are corroboration only; they cannot authorize a tagless path.
#140 is read-only-first. It inventories authenticated pre-incident sources and asks Architecture/Security to decide whether any immutable artifact explicitly binds the exact current StackId to the exact current TableId. If yes, the output is a separately groomed, one-table/one-migration exception issue with strict pinning and removal—not an exception implemented here. If no, the output is a separately reviewed, backed-up HUMAN/AWS ownership-remediation issue. Either way, #136 remains blocked until the selected follow-up actually passes its own gates.
The missing
dataops-v1-productionenvironment remains a separate #136 HUMAN gate. Creating it neither proves ownership nor authorizes migration. No code, AWS, environment, workflow, or data mutation is authorized by this grooming.alexeygrigorev commentedon Jul 31, 2026
ARCHITECTURE DECISION — ROUTE A BLOCK; CURRENT EVIDENCE REQUIRES ROUTE B
I independently reviewed the complete retained #141 CloudTrail evidence set and compared its binding semantics with the already-reviewed GitHub deployment provenance. I made no AWS call, repository edit, workflow action, or mutation, and this review discloses no raw identifier or private location.
The sources prove complementary but unlinked facts:
CreateTableevent is an authenticated pre-incident CloudTrail record and explicitly contains the historical DynamoDB TableId;The complete bounded mutation inventory also finds no Sponsor delete, restore, recreate, tag, untag, backup, or update event. That is useful corroboration and shows no conflict in the retained Event History window, but absence of those events does not create the missing exact StackId↔TableId link.
Accordingly, no safe route A remains from the #141 evidence plus the already-reviewed GitHub provenance. Pinning the two values from separate records would be an inference expressly prohibited by #140, not an attested pair. The correct classification is
insufficient, notcandidate exact bindingand notconflict.#141's evidence-content review passed Architecture, but #141 itself still has procedural closure gates: the pre-collection read-only STS identity check must be recorded as a deviation from the literal single-API inventory; the separate phone sandbox role's least-privilege policy and authoritative duration/expiry are not independently proved; explicit retrieval-time/session provenance is absent from the manifest; and revocation/expiry confirmation remains HUMAN. Those gaps do not turn the split records into a binding, but #141 must resolve them before dependency closure.
ARCHITECTURE VERDICT: BLOCK route A and any tagless exception; select route B after #141 procedural completion and independent Security agreement. The next process artifact must be the separately groomed, backed-up HUMAN/AWS ownership-remediation issue required by #140. #136 remains blocked; no migration, normal deployment, import, replacement, retagging, or other production mutation is authorized by this decision.
alexeygrigorev commentedon Jul 31, 2026
SECURITY BLOCK — route A is not proved; route B is required
I independently reviewed the complete private #141 CloudTrail bundle without making an AWS call.
The retained
CreateTablemanagement event is authentic-looking, complete, and consistently selected; it contains the historical DynamoDB TableId and shows CloudFormation invocation. But it contains no exact CloudFormation StackId, and its request contains none of the CloudFormation ownership tags. The complete bounded Sponsor history has no later tag/delete/restore/recreate event that supplies the missing link. The evidence therefore binds a TableId to a table creation, name/ARN, time, and CloudFormation service invocation—not to the exact current StackId.Threat model: the CloudFormation service/role and a deployment time can be shared by multiple stack operations, retries, replacements, or stack incarnations. Names and DynamoDB ARNs are name-derived. Even exact equality between the historical and present TableId would prove table continuity only; it would not create the absent immutable StackId↔TableId edge. Temporal correlation with CI or stack events is not cryptographic or explicit ownership provenance. Accepting it would silently turn the one-time exception into a generic tagless inference policy.
Security classification:
candidate exact binding: noconflict: no trusted conflicting exact pair foundunavailable: no for this bounded Event History sourceinsufficient: yesRoute A is rejected. Do not change the #136 guard, retag the table, migrate GSIs, deploy, or infer ownership from the current mapping.
The safest next action is route B: the orchestrator/PM should file and fully groom the separate backed-up HUMAN/AWS ownership-remediation issue already required by #140. It must obtain AWS Support guidance, establish verified backup/export and isolated restore rehearsal, define CloudFormation import/replacement/retention handling, integrity and rollback/abort criteria, and require explicit HUMAN approval plus fresh Architecture, Security, Tester, PM, and On-Call gates before any production mutation.
Do not broaden read access for speculative Config/backup fishing unless an already-retained immutable source is known to explicitly contain both exact identifiers. Name-linked Config records or backup metadata that contains only the TableId would remain corroboration. If AWS Support instead provides a written authoritative exact-pair confirmation before remediation, return that new evidence for a fresh independent route-A review; it is not assumed here.
#140 and #136 remain blocked until the separately groomed route-B issue completes its required gates. The separate
dataops-v1-productionenvironment HUMAN gate also remains unchanged.alexeygrigorev commentedon Jul 31, 2026
PM reconciliation complete. The Architecture/Security verdict is now the operative decision: historical ownership evidence is insufficient, route A is rejected, and route B in #143 is selected. #140 now depends on #143 rather than #141. #141 remains open only for honest HUMAN session/provenance closure, does not block the substantive route, and must not be recollected merely to repair metadata.
alexeygrigorev commentedon Jul 31, 2026
PM lifecycle reconciliation — research output awaits required Tester/PM gates
The route-A research decision and Architecture/Security classification remain intact, but specialist verdicts do not replace the mandatory lifecycle. #140 no longer waits for out-of-scope #143 execution: it has no open evidence dependency, now awaits bounded Tester verification of the public sanitized record, and then PM final acceptance. #143 remains the independent downstream remediation blocker for #136. Removed the premature
humanlabel and did not close #140 or mark any new criterion complete. No AWS call, private-evidence inspection, recollection, or mutation occurred.alexeygrigorev commentedon Jul 31, 2026
TEST BLOCK — bounded public/sanitized research-output verification
I independently verified #140 without calling AWS, recollecting CloudTrail, opening private evidence, inspecting raw identifiers, changing repository files, or inferring missing provenance. Architecture/Security specialist verdicts were treated as evidence, not as a substitute for this Tester gate.
Blocking finding
The substantive research decision passes, but the current public dependency/owner record is internally contradictory, so acceptance criterion 10 is not yet precise enough for PM acceptance:
Depends on: None, current owner Tester → PM, and Reconcile Sponsor CRM table ownership with CloudFormation #143 is downstream execution that does not need to complete before Reconcile missing CloudFormation ownership provenance for Sponsor CRM table #140 closes.Blocks: Nonebut its explanatory text also says Reconcile missing CloudFormation ownership provenance for Sponsor CRM table #140 “now depends on Reconcile Sponsor CRM table ownership with CloudFormation #143.”These statements cannot all define one dependency graph. They do not authorize execution, but they make the public handoff ambiguous and fail the checked requirement that owner/action routing be precise.
Required reconciliation before retest:
Blocksexplanatory text so it says Close out the retained CloudTrail audit session record #141 blocks neither Reconcile missing CloudFormation ownership provenance for Sponsor CRM table #140 nor Reconcile Sponsor CRM table ownership with CloudFormation #143; Reconcile Sponsor CRM table ownership with CloudFormation #143 separately blocks Migrate Sponsor CRM GSIs in a protected stage-only workflow #136. Historical comments may remain as history, but the current bodies/latest reconciliation must unambiguously supersede them.Acceptance criteria, in issue order
LookupEventsplus the precollection read-onlysts:GetCallerIdentitydeviation and claims zero mutation; the unresolved authentic session/provenance gates remain honestly open in Close out the retained CloudTrail audit session record #141. I did not inspect private evidence or infer closure.insufficient, not conflict/unavailable/exact binding, and reject route A.Commands and results
All read-only commands exited 0 unless noted:
The high-risk identifier scan exited 1, meaning no matches. The issue search returned only #140 and #143. The worktree remained
main...origin/mainwith no changes. No code/UI changed, so build, infrastructure mutation, browser tests, and screenshots are not applicable to this bounded research-output gate.Retest only after the public routing text is reconciled. Route A remains rejected, #136 remains blocked, #141 must not be recollected, and no #143 action is authorized by this verdict.
alexeygrigorev commentedon Jul 31, 2026
PM correction — TEST BLOCK routing ambiguity resolved
Reconciled the current body to one graph: #140 has
Depends on: Noneand awaits bounded Tester verification, then PM final acceptance. After acceptance, #143 independently owns route-B remediation and blocks #136; #141 blocks neither issue. Replaced the stale dependency sentence and amended criterion 10 to distinguish the immediate #140 lifecycle owner from #143’s downstream HUMAN Support owner. Criterion 10 is left unchecked pending Tester retest. No AWS call, private-evidence access, recollection, repository change, or external action occurred.alexeygrigorev commentedon Jul 31, 2026
TEST PASS — corrected bounded public/sanitized research output
I independently re-tested #140 after the #140 PM correction and #141 correction. I made no AWS call, recollected no CloudTrail evidence, opened no private artifact, inferred no missing provenance, and changed no repository file.
The prior routing block is resolved:
Acceptance criteria
LookupEventsplus the precollection read-onlysts:GetCallerIdentitydeviation and zero mutation; unresolved authentic session/provenance gates remain open.insufficientand reject route A.github.com.Following
_docs/PROCESS.md, I changed only criterion 10 from[ ]to[x]after verification. #140 now has 10 checked criteria and no unchecked criteria. No status, label, dependency, or other body content was changed.Commands and results
All commands exited 0 unless noted:
The high-risk identifier scan exited 1, meaning no matches. URL inventory returned only
github.com. The exception search returned only #140 and #143. The final checkbox read-back reported 10 checked and zero unchecked. The worktree remained clean atmain...origin/main.No code/UI changed, so build, infrastructure mutation, browser tests, and screenshots are not applicable to this bounded research-output gate.
READY FOR PM FINAL ACCEPTANCE. This PASS does not authorize AWS Support contact, #143 execution, migration, deployment, ownership mutation, or #141 recollection.
alexeygrigorev commentedon Jul 31, 2026
PM FINAL ACCEPTANCE — ACCEPT
The bounded research outcome is accepted from the operator/safety perspective after Tester PASS.
insufficient; route A and any tagless exception remain rejected.github.com.PM accepts #140 as fully complete. Status/dependencies/Blocks are reconciled to done / none / none. Close #140 only; do not close #141 or #143, advance #136, or infer any mutation authority.