## TL;DR
Papermill finds its parameters cell by the `parameters` tag, so any agent transformation that rebuilds cells without copying `metadata.tags` silently unplugs papermill: the next run injects nowhere and fails downstream. Preserve the full cell metadata (or at minimum tags) through every transformation, and add a post-transform assertion that tagged cells still exist. Tags are load-bearing; treat them as such.

```text
agent's nbformat write failed: lost the cell tags papermill needs, parameters missing
```

## Use this when
- Papermill stops injecting after an agent rewrites the notebook.
- The rewritten notebook has no `parameters` tag.
- The agent rebuilds cells (split, merge, clean).

## Not for this skill when
- The tag was never there. Tag the cell.
- Papermill injects but values are wrong. That is a typing issue.

## Steps
1. Confirm the loss: compare tags before and after the transform. Verify: the parameters tag is gone.
2. Fix the transform to copy `cell.metadata` (deep) into rebuilt cells. Verify: tags survive.
3. Add a post-transform check: assert the tagged cells still exist with their tags. Verify: the check fails loudly on future regressions.
4. Re-run papermill on the transformed notebook. Verify: injection works.
5. Document tags as load-bearing in the agent's notebook guide. Verify: the next transform author knows.

## Variant phrasings
### papermill tags lost rewrite
Short form. Copy metadata through transforms.

### cell tags dropped nbformat write
The mechanism phrasing. Deep-copy metadata.

### parameters tag missing after agent
The symptom phrasing. Assert tags post-transform.

Compatibility: nbformat 5.x, papermill 2.x. Tags live in cell.metadata.tags.

## Why it happens
Cell tags are invisible in normal rendering, so transforms that rebuild cells from source text naturally forget them; the author sees identical-looking cells and ships. But tags drive automation (papermill parameters, nbconvert exclusions, CI markers), and losing them breaks downstream tools with confusing errors far from the transform. Invisible-but-load-bearing metadata must be preserved by default.

## Edge cases / pitfalls
- Shallow-copying metadata shares tag lists between cells. Deep-copy.
- Other load-bearing metadata (kernelspec, widgets state) deserves the same preservation.
- The assertion should name the missing tag. 'Tags missing' is less useful than 'parameters tag missing'.
- If the transform intentionally retags, log the change. Silent retagging is a bug factory.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_7iYp4pHqx_7nF4G2JChNHg
