- name
- evidence-bundle-init
- license
- MIT
- compatibility
- Requires a skills-compatible agent, configured MCP servers named in allowed-tools, and a POSIX shell with the commands named by the workflow.
- metadata
- {"last-validated":"2026-05-21"}
- description
- Scaffold a new evidence bundle directory ready for reproducibility-grade evidence capture: SOURCE.md (operator + cluster + git SHA + UTC timestamp), summary.md (verdict skeleton), commands/ (for the four-file .cmd/.stdout/.stderr/.exit tuple capture per shell command). Workload-agnostic. Works for any experiment family. Operator names family + run-id (or accepts default). Triggers on "new evidence bundle", "init evidence", "scaffold bundle", "start a new artifact bundle", "new run-id", "evidence-bundle-init", "set up a bundle", or any combination of "new / init / scaffold / create / start" with "evidence / bundle / artifact / run-id / experiment".
- allowed-tools
- mcp__profile_and_optimize__evidence_init Bash(mkdir:*) Bash(date:*) Bash(git:*) Bash(hostname:*) Bash(whoami:*) Read Write
# evidence-bundle-init
## Purpose
Set up a new evidence bundle directory under `experiments/artifacts/<family>/<run-id>/` with the skeleton reproducibility-grade evidence requires:
- `SOURCE.md` - operator identity, cluster, git SHA, UTC timestamp, the original prompt / intent.
- `summary.md` - verdict skeleton operator fills in as the experiment progresses.
- `commands/` - directory for the four-file `<NN>-<step>.{cmd,stdout,stderr,exit}` tuples one per shell command run during the experiment.
- `.gitkeep` markers for the local directory shape.
This skill is the operator-facing convenience over `mkdir + cat > SOURCE.md`. Half a minute of friction is enough that people skip the discipline. This skill makes it 5 seconds.
## Experiment isolation & traceability (required for any cluster-touching experiment)
The bundle's run-id IS the **experiment-id** - the single join key across the evidence bundle, the cluster objects, and the perf-lake. When the experiment creates cluster resources:
- Every Deployment/Pod/PVC/PV/Secret/ConfigMap/Service MUST use an experiment-unique name derived from the id (e.g. `glm51-expt-deepep-ll`, PV `glm51-deepep-expt-pv`) and carry the label `experiment=<id-slug>`.
- NEVER reuse a standing/platform/migration name (e.g. a shared `*-inference*` deployment, a standing `*-cache*` PV, or anything labeled `migration=*`). Cluster-scoped PV names are global. A collision silently breaks another owner's PVC.
- Tear down by label: `kubectl delete deploy,pod,pvc,secret -l experiment=<id-slug>`. For `Retain` PVs pre-clear the attacher finalizer before delete.
- Record the created object names + the perf-lake `campaign=<id>` in `SOURCE.md` (template below has the block).
## Observations vs mechanisms + roofline companions (measurement bundles)
A measurement bundle that produces a roofline / SoL analysis MUST separate **observations** (what
the instruments reported) from **mechanisms** (the causal "why"), and MUST carry a source-code
provenance block. This is the discipline a perf reviewer asks for: "separate the mechanisms from
the observations".
Scaffold these in any measurement bundle:
- `findings/01-observations.md` - **measured tables ONLY** (DCGM SM/tensor/DRAM %, tok/s, TPOT, AA
numbers). No interpretation, no "because". Each number is reproducible from `commands/`.
- `findings/02-mechanisms.md` - one item per claim, formatted `OBSERVATION -> MECHANISM (causal) ->
CONFIDENCE (+ what would raise it)`. A mechanism claim ("decode plateaus at 41% HBM because the
sparse-MoE+MLA kernel mix has low DRAM efficiency") needs a profile (DCGM/zymtrace/nsys/ncu) -
the rooflines are the observation. The mechanism is the separately-evidenced interpretation.
- `findings/00-ANSWERS-*.md` (optional) - the live-sync handout that answers the reviewer's questions
directly, each pointing at 01/02.
- A ` ```provenance ` block (`experiment_provenance_v1`) in `SOURCE.md` pinning the exact
vLLM/SGLang commit + delivery + patch, so the rendered roofline carries a source link (see
[`server/tools/perf_tune_report/ROOFLINE-METHODOLOGY.md`](../../server/tools/perf_tune_report/ROOFLINE-METHODOLOGY.md)).
Record the REAL `delivery` (`image|overlay|patchedVllm|infr-patch`) the bundle ran -- it is the
code-under-test identity: a number from this bundle may be cited only as
evidence for THAT delivery, never cross-tier (an `overlay`/offline-prepped run is not evidence for
an `infr-patch`, even if the kernels match).
The prefill/decode roofline itself (page 7) is captured + always-published via the
`inference-perf-tune-report` / `inference-perf-bench` pipeline. This bundle just holds the obs/mechanisms
narrative + provenance that the report links to.
> This skill is backed by a native MCP verb: `mcp__profile_and_optimize__evidence_init`. The verb does the entire scaffold atomically (mkdir + SOURCE.md + summary.md + commands/README.md + .gitkeep) and returns the bundle path. The Bash-tool path documented below remains supported as a fallback.
## Why a bundle, not a flat directory
This repo's reproducibility-grade-evidence convention requires that significant experiments produce a bundle, not loose files:
- The bundle's path is the durable handle that future skills (`search_evidence`, `perf-baseline-record`, etc.) reach for.
- `SOURCE.md` is the audit trail that says "this evidence was captured by X on cluster Y on date Z from prompt W".
- `summary.md` is the human-readable verdict at the bottom of the funnel.
- `commands/` is the four-file tuple capture that makes every shell action replayable.
## When to use
- Starting any experiment that will produce >1 artifact file.
- Reviewer asked "where's the evidence for that claim?" and the answer is a bundle.
- Periodic capture (weekly perf-of-record snapshot, monthly drain audit, etc.).
- Pairs with every skill that writes artifacts ([`prometheus-anchored-query`](../prometheus-anchored-query/SKILL.md), [`perf-baseline-record`](../perf-baseline-record/SKILL.md)).
Do **not** use this skill for:
- One-off shell commands whose output you'll throw away - no bundle needed.
- Adding to an existing bundle - just `cd` into the bundle and add files.
- Benchmark families whose runbooks define their own bundle layout and naming conventions - follow those. This skill is the generic scaffolder.
## Example prompts
- "Init a new evidence bundle for the nccl sweep I'm about to run."
- "Scaffold a bundle under cluster-health family."
- "New evidence bundle for the gpu-burn soak."
- "Set up a bundle for the b200 8b regression investigation."
- `/evidence-bundle-init --family cluster-health --run-id rack-a-validation`
- `/evidence-bundle-init --family perf-baselines --measurement nccl_busbw`
## Prerequisites
1. **`PROFILE_AND_OPTIMIZE_REPO_ROOT`** for the bundle path. The skill writes to `${PROFILE_AND_OPTIMIZE_REPO_ROOT}/experiments/artifacts/<family>/<run-id>/`.
2. **Family** - `--family <name>` (e.g. `cluster-health`, `nccl-tests`, `gpu-burn`, `campaign/llama31_8b`).
3. **Run-id** - `--run-id <slug>` (default: `<UTC-timestamp>` if not supplied).
4. **Operator intent** - `--intent "<one-line description>"` (gets written into `SOURCE.md`).
## Interaction style
Fast and autonomous (3-5 seconds). Single optional pause: confirm the family + run-id + intent before write.
## Workflow
### Phase 0: resolve bundle path
```text
bundle = ${PROFILE_AND_OPTIMIZE_REPO_ROOT}/experiments/artifacts/<family>/<run-id>/
```
If the bundle already exists, **stop**. Bundles are immutable. New captures use a new run-id.
### Phase 1: gather provenance
In parallel:
- `Bash(date -u +%Y-%m-%dT%H:%M:%SZ)` - UTC timestamp.
- `Bash(hostname)` - workstation hostname.
- `Bash(whoami)` - operator user.
- `Bash(git -C ${PROFILE_AND_OPTIMIZE_REPO_ROOT} rev-parse HEAD)` - current SHA of the bundled server tree.
- `Bash(git -C ${PROFILE_AND_OPTIMIZE_REPO_ROOT} remote get-url origin)` - repo remote URL for the Provenance section.
### Phase 2: write the skeleton
**Preferred (MCP verb):**
```text
mcp__profile_and_optimize__evidence_init with:
args: ["--family", "<family>",
"--intent", "<operator one-line intent>",
"--run-id", "<slug>",
"--json"]
```
The verb does everything atomically and returns the bundle directory path. Skip to Phase 3.
**Fallback (Bash-tool):**
```text
mkdir -p ${bundle}/commands
Write ${bundle}/SOURCE.md with:
# SOURCE
**Family:** `<family>`
**Run-id:** `<run-id>`
**Created at (UTC):** `<ts>`
**Created by:** `<USER>` on `<hostname>`
**PROFILE_AND_OPTIMIZE SHA (bundled server):** `<git-sha>`
## Intent
<operator's --intent text>
## Provenance
- Workstation kernel: `<uname -a>`
- Repo: `<git -C ${PROFILE_AND_OPTIMIZE_REPO_ROOT} remote get-url origin>` (this plugin marketplace).
- Bundle path: `experiments/artifacts/<family>/<run-id>/`
## Experiment isolation & traceability
The run-id IS the experiment-id: the single join key across this bundle, the
cluster objects, and the perf-lake. (Matches the `mcp__profile_and_optimize__evidence_init`
scaffold. Keep these as structured `- key: value` lines so `publish_to_lake` /
`experiments_index` can read them.)
- experiment_id: <run-id>
- family: <e.g. nvfp4-kv | warp-decode | deepep | (blank)>
- object label (EVERY cluster object, on metadata AND pod template): `experiment=<run-id>`
- cluster resources created (fill in as you create them. Every
Deployment/Pod/Job/PVC/PV/Secret/ConfigMap/Service, experiment-unique-named,
NEVER a standing/migration name):
-
- perf-lake campaign: `campaign=<run-id>` (run `perftunereport campaign_init
--experiment-id <run-id> --family <family> --evidence-bundle <this-bundle>` so
campaign_id == experiment_id. The `s3://perf-lake/...` atlas_v1 + campaign_v1
paths are auto-appended here by `publish_to_lake`).
- pre-apply label gate: verify every manifest carries `experiment=<run-id>`
before `kubectl apply`.
## Cross-references
- `docs/METHODOLOGY.md` - the measurement-methodology canon.
Write ${bundle}/summary.md with:
# Summary
**Status:** in-progress
## Verdict
<to-be-filled-in by operator at end of experiment>
## Findings
-
## Recommendations
-
## Open questions
-
Write ${bundle}/commands/README.md with:
# commands/
Every shell command run during this experiment is captured as a four-file
tuple:
00-<step-slug>.cmd # the exact command
00-<step-slug>.stdout # captured stdout
00-<step-slug>.stderr # captured stderr
00-<step-slug>.exit # exit code
Filenames are zero-padded sequential (00, 01, 02, ...) so natural sort order
matches execution order. From the server root, use the checked-in helper:
capture_rc=0
ART_DIR="${bundle}" \
bash tools/shared/capture_cmd.sh ls-image -- ls /mnt/data/images/ \
|| capture_rc=$?
if [ "$capture_rc" -ne 0 ]; then
exit "$capture_rc"
fi
`tools/shared/capture_cmd.sh` shell-quotes exact argv, writes stdout and stderr
separately, writes the exit code before returning, and is tested by
`tools/shared/test_capture_cmd.sh`. The `||` branch keeps the tuple complete
when the caller uses `set -e` and the wrapped command fails.
Touch ${bundle}/commands/.gitkeep to preserve the local directory shape.
```
### Phase 3: report
Print the bundle path and the next-step pointer:
- "Add captures from the server root with `tools/shared/capture_cmd.sh`."
- "Finalize: edit `summary.md` with verdict + findings before sharing."
- "Register a baseline if applicable: `perf-baseline-record --source <bundle>`."
## Output bundle layout
```
${PROFILE_AND_OPTIMIZE_REPO_ROOT}/experiments/artifacts/<family>/<run-id>/
SOURCE.md
summary.md
commands/
README.md
.gitkeep
```
## Safety
- **Never overwrite an existing bundle.** Bundles are immutable. The skill refuses to init over a populated directory.
- **Audit trail.** `SOURCE.md` records the operator's `${USER}` + hostname so future readers know who captured the evidence, where, and from what prompt.
- **Local-only by default.** The public repository ignores the full
`server/experiments/artifacts/` tree except `.gitkeep` markers. An ordinary
`git add` does not stage `SOURCE.md`, command output, or measurements.
- **Intentional publication requires review.** Scrub secrets, private paths,
operator details, and sensitive workload data. Review the complete bundle,
then use `git add -f <bundle>` only when the operator explicitly chose to
publish it.
- **The provenance hook checks force-staged bundles.** When the gate is enabled,
it reads the staged `SOURCE.md` from the Git index. It does not make local
evidence public and it does not stage artifacts itself.
## Source-of-truth references
- [`docs/METHODOLOGY.md`](../../../../docs/METHODOLOGY.md) - the measurement-methodology canon every bundle feeds.
- [`server/AGENTS.md`](../../server/AGENTS.md) - bundled-server discovery contract.
- All sibling skills that write artifacts - they all assume the bundle this skill creates.
Voir sur GitHub