managing-experiment-lifecycle — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited managing-experiment-lifecycle (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill covers experiment state transitions — what each action does, when to use it, and how it affects variant assignment and analysis.
draft ──launch──▶ running ──end──▶ stopped ──archive──▶ archived
│ ▲ │
pause resume ship_variant
│ │ (also ends if running)
▼ │
paused (flag inactive, still "running" status)
Any non-draft state ──reset──▶ draftFor each action, the two key questions:
experiment-launch)Transitions draft → running. Activates the feature flag and sets start_date.
start_dateNo request body needed.
experiment-pause)Deactivates the feature flag. Users fall back to the default experience (typically control).
/decide — no new exposure events recordedNo request body. Use experiment-resume to reactivate.
experiment-resume)Reactivates the feature flag after a pause. Users are re-bucketed deterministically into the same variants.
No request body.
experiment-end)Sets end_date and transitions to stopped. The feature flag is NOT modified.
end_dateOptional body: conclusion ("won", "lost", "inconclusive", "stopped_early", "invalid") and conclusion_comment.
Use this when you want to freeze results without changing what users see.
experiment-ship-variant)Rewrites the feature flag so the selected variant is served to 100% of users.
Always confirm with the user before shipping — this permanently rewrites the feature flag.
Required: variant_key (e.g. "test"). Optional: conclusion, conclusion_comment.
Returns 409 if an approval policy requires review before the flag change.
experiment-archive)Hides a stopped experiment from the default list view.
No request body. Can be restored by setting archived=false via experiment-update.
experiment-reset)Returns an experiment to draft state. Clears start_date, end_date, conclusion, and archived.
start_date is adjusted after re-launchNo request body.
experiment-duplicate)Creates a copy as a new draft with fresh dates and no results.
Important: always provide a unique feature_flag_key different from the original. If the same key is used, both experiments share a flag — changes to one affect both.
Optional: custom name (defaults to "Original Name (Copy)").
experiment-copy-to-project)Copies an experiment into a different project in the same organization as a new draft. Use this instead of experiment-duplicate when the copy should land in another project; use duplicate when it stays in the same project.
have write access to it. Cannot copy across organizations or regions.
scheduling config, exposure criteria. Not copied: saved-metric references (project-scoped), holdout, exposure cohort, dates, results, conclusion.
target_team_id is required; feature_flag_key is optional. The resolved key is then looked upin the target project, and the lookup result — not whether you passed the key — decides what happens:
doesn't exist in the target project, so a new flag with it is created there. (The default can still collide — see the next point — so to be safe, pass an explicit key.)
instead of creating one. Both experiments then point at the same flag, so lifecycle ops (ship, pause) on either affect both. The existing flag must have ≥2 variants including one keyed control, otherwise the call returns 400.
To guarantee independence, pass a feature_flag_key that doesn't already exist in the target.
Confirm the source experiment and target project by name before calling — this writes into a project the user isn't looking at. The returned experiment (and its id) belongs to the target project.
| Situation | Action | Tool |
|---|---|---|
| Draft ready, flag implemented, metrics set | Launch | experiment-launch |
| Clear winner, significant results | Ship the winning variant | experiment-ship-variant |
| No significant difference after sufficient time | End as inconclusive | experiment-end |
| Something wrong, need to stop exposure temporarily | Pause | experiment-pause |
| Resume after pause | Resume | experiment-resume |
| Experiment ended, ready to clean up | Archive | experiment-archive |
| Need to start over with same config | Reset to draft | experiment-reset |
| Want a similar experiment with a fresh start | Duplicate | experiment-duplicate |
| Want the same experiment in a different project | Copy to another project | experiment-copy-to-project |
All lifecycle actions require an experiment ID. If you don't have one, load the finding-experiments skill to resolve the user's reference (name, description, "latest", etc.) to a concrete ID before proceeding.
| Error message | Meaning |
|---|---|
| "Experiment has already been launched." | Can't launch a non-draft experiment |
| "Experiment has not been launched yet." | Can't end/pause/ship a draft |
| "Experiment has already ended." | Can't end/pause a stopped experiment |
| "Experiment is already paused." | Use resume instead |
| "Experiment is not paused." | It's already active |
| "Experiment is already in draft state." | Nothing to reset |
| "Experiment is already archived." | Already done |
When you get a 400, explain the situation to the user rather than retrying.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.