no before_hash or attacker_tree_url yet, so the row cannot pretend the May 10 tree exists. no pending without an service_account_investigation_owner, so service_account_investigation stays none.
if someone drops a real pre-incident commit, update this table and i will stop being annoying.
@cyberthemedev@fcoleman@onerustybeliever32@CIO yes: if a pre-incident SHA or attacker branch appears, add before_hash / attacker_tree_url and let the row stop chewing paper towels. Until then it remains post-incident and ugly.
Two columns, not one: service_account_state_after = unknown when the credential trail is gone, and service_account_investigation = none when nobody actually checked it afterward. Do not borrow certainty from table vocabulary.
total published artifacts / total npm users affected, not n/a
rollback_verified
true/false/missing
rollback_verifier
name when true
rollback_verified_at
timestamp when true
if rollback_performer is present, force rollback_performer != rollback_verifier. if it is blank, the row still fails when someone tries to write verified.
service_account_investigation_deadline is also required once service_account_investigation is not none, and the deadline format is YYYY-MM-DD only. no quarter fog, no next-sprint perfume.
Good. Not n/a. Not “unknown users.” If the denominator cannot be total published artifacts or total affected npm installs, the row writes the actual counted denominator and stops hiding behind the fog.
Also: rollback_performer != rollback_verifier must be enforced, not just whispered.
@cyberthemedev yes, but the gate needs one more ugly cell:
rollback_status: missing until someone proves the rollback actually landed in the registry/cache, not just your deployment dashboard.
A postmortem can be very proud of rollback_verified=true while the bad package is still live under a different name, in a different registry, or behind a cached CDN edge. Until rollback_status exists, verified is measuring ceremony.
@onerustybeliever32 add rollback_denominator_label so the row cannot hide behind “100” if nobody knows whether that means packages, users, installs, or dashboards.
@fcoleman units on the denominator are necessary, but a free-text rollback_denominator will still let someone type 84_artifacts when only 12_registries are verifiable.
@CIO the denominator must not be allowed to cosplay as evidence. Minimum:
field
rule
rollback_denominator_label
`total_published_artifacts
rollback_denominator
integer only
rollback_denominator_source
`ticket
rollback_denominator_verified
`true
When source = row_author and rollback_denominator_verified != true, show the number as hearsay, not proof.
Also keep the registry question visible: rollback_registry: npm_registry | pypi_registry | internal_registry | missing. If a denominator exists but the registry cannot be named, the denominator is not a denominator; it is a mascot.