Skip to content
Back to skills

Finding Custody

ASecurity

Govern what happens to a confirmed finding once it is reported and you are not going to publish it — the difference between disclosing an instance, a mechanism, and a hunting method; the patch-diffing window that leaks the class whether or not you write a word; custody of the PoC and of any data you touched confirming it; and a written decision with a revisit trigger instead of an undocumented default. Use whenever a finding is confirmed and the question turns to who is told what, whenever a ...

  • 8 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 3, 2026
ai-agentsgo

Works with

  • terminal
  • cli

Security analysis

A100/100

Scanned September 3, 2026

npx -y skills add annatchijova/SKILLS --skill finding-custody --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Finding Custody?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Finding Custody
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/annatchijova-finding-custody/badge)](https://www.skillsdirectory.com/skills/annatchijova-finding-custody)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: finding-custody
description: Govern what happens to a confirmed finding once it is reported and you are not going to publish it — the difference between disclosing an instance, a mechanism, and a hunting method; the patch-diffing window that leaks the class whether or not you write a word; custody of the PoC and of any data you touched confirming it; and a written decision with a revisit trigger instead of an undocumented default. Use whenever a finding is confirmed and the question turns to who is told what, whenever a writeup, talk, blog post, CVE text, or conference submission is considered, whenever the same class exists in products nobody has reported yet, and whenever a working PoC needs somewhere to live. Trigger on "should we publish", "write it up", "embargo", "CVE text", "the vendor patched it", "can I blog about this", "who else has this bug", "where do I keep the PoC", or a finding going quiet with no record. It never argues for or against publishing; it makes the decision explicit, bounded, and revisitable.
---

# Finding Custody

A confirmed finding is not finished when the vendor patches it. It is an asset
you are still holding: a working technique, an understanding of a class, and
usually a PoC that runs. Most methodologies end at "reported". Everything after
that point — what you say, what you keep, what you delete, and what would make
you revisit — is governed by nothing, which is why it is governed by habit.

Two claims this skill is built on:

> **Silence has operational requirements.** Deciding not to publish is not the
> zero-cost option; it is a custody obligation with a start date and no
> automatic end.

> **The patch is a disclosure you did not write.** A fix describes the bug,
> authored by the people who understand it best, shipped publicly. Whatever the
> patch reveals is revealed on the vendor's schedule, not yours.

This skill takes no position on whether to publish. It exists so that the
decision is made once, deliberately, with a written reason and a condition that
reopens it — rather than defaulting to silence and then never looking again.

Composes with the library:

- **remediation-driven-reporting** — the sibling: how the report gets the class
  fixed; this skill governs everything you did *not* put in it
- **beyond-the-sink** — the reason class-level disclosure matters: a confirmed
  bug is a template, and lateral replication is the highest-ROI move in
  existence, for you and for everyone else
- **decision-record-discipline** — the format for a decision with a revisit
  trigger
- **claim-provenance-discipline** — the finding's epistemic level must survive
  into the private record too
- **secret-lifecycle-discipline** — a PoC is a credential-grade asset: same
  storage, retention, and rotation-of-access thinking
- **irreversible-action-gate** — publication is irreversible; so is deleting
  your only copy of the evidence

---

## Part 1 — Three things you can disclose, and they are not equivalent

Separate them before deciding anything, because "did you disclose it?" is a
question about which of these three you moved:

| Layer | What it is | Who needs it | What it costs to release |
|---|---|---|---|
| **Instance** | This endpoint, this version, this parameter | The vendor that owns it | Low after the patch; the instance is dead |
| **Mechanism** | The class — the invariant that gets violated and how | Every vendor whose product has the class | High: it is a template, and it survives the patch |
| **Method** | How you hunt for it — the question family, the search that surfaced it | Nobody, unless you choose to teach it | Highest: it generates instances nobody has found yet |

The common intuition inverts this. People carefully redact the instance and
freely describe "the interesting technique" — which hands over the two layers
with leverage and withholds the one that is already patched.

Practical consequences:

- **"It's already patched" is not the criterion.** It settles the instance
  layer only. The mechanism is exactly as live as it was.
- **The vendor needs the mechanism, not just the instance** — otherwise they
  fix your input and keep the class (see `remediation-driven-reporting`
  Part 3). Full mechanism to the party that can fix it is not the same act as
  full mechanism to everyone.
- **A class that spans multiple vendors is a coordination problem before it is
  a publication question.** The ordering matters — see Part 2.
- **Method-level teaching has a real defensive case** (it is how the next
  generation of auditors learns), but it is a separate decision from this
  finding, made deliberately and stripped of live instances.

## Part 2 — The window opens with the patch, not with your writeup

Patch diffing is a discipline of its own, and it exists because the fix is the
highest-quality description of the bug ever written. A silent patch is not a
secret patch; it is a public artifact with the answer in it.

So model the timeline honestly:

```
report → vendor fix → patch ships → [ window ] → class derivable by anyone
```

The window's length is a property of the class, not of your discretion. A
one-line input filter on a rare code path is quiet for a long time; a
restructuring of how two components exchange a parsed value is legible almost
immediately.

What follows from this:

- **Do not plan on the silence. Plan on the window.** If your protection
  strategy is "nobody will notice", it has already failed for anyone who
  watches that repo's commits.
- **When the class spans several products, the first patch starts everyone's
  clock.** Every unreported sibling is exposed from that moment, by a signal
  you triggered. That is the strongest argument for reporting the siblings
  *before* the first patch ships, and for asking the first vendor about their
  release timing.
- **Use the window deliberately.** It is the period in which siblings can be
  reported and fixed with the least ambient risk. Spending it is a choice; so
  is letting it pass.
- **The vendor's advisory text is also a disclosure decision** — one someone
  else makes about your finding. If the class matters, that is worth a sentence
  in your report: what level of detail you would prefer the advisory carry,
  and why. They may decline. Ask anyway.

## Part 3 — Custody: a PoC is a live asset

You are holding something that works. Treat it with the same discipline as a
credential (`secret-lifecycle-discipline`), because that is what it is.

Inventory, honestly — most people underestimate this list:

- the PoC itself, and every intermediate script that also works
- notes, screenshots, recordings, terminal scrollback
- **any data you touched while confirming** — even a single object read from a
  system to prove cross-tenant access
- the report draft, and every copy in mail, chat, ticketing, or a shared drive
- **every third-party service that saw it**: an AI assistant's transcript, a
  cloud session, a pastebin, a CI log, a screenshot in a support ticket,
  a translation tool. If a model helped you build the PoC, the PoC is in that
  history and its retention is not yours to set.

Then apply four rules:

1. **Separate storage.** Not in your day-to-day repo, not in the folder you
   screen-share from. Encrypted at rest, with the target's name not in the
   filename.
2. **Delete the data, keep the method.** Anything you obtained from a live
   system during confirmation is the *vendor's* data, not your evidence. Keep
   the fact that you read it and the hash if you need proof; destroy the
   content. Holding another party's data is the part of this work that is
   hardest to justify afterwards.
3. **Set a retention date at the moment you file the report**, not "later".
   Default it to fix-verified plus a fixed period.
4. **Name who else has it.** Every co-researcher, every tool, every backup.
   A PoC in three places has three compromise scenarios.

Then run the scenario in one sentence: *if my machine, repo, or cloud account
were compromised tomorrow, what would the attacker inherit?* If the answer is
working exploits for services still in production, the custody plan is the
finding's most under-tested control.

## Part 4 — Write the decision down, with a trigger that reopens it

An undocumented "I don't publish" is not a decision; it is a default that never
gets re-examined. Use `decision-record-discipline`'s shape:

```
## Finding <id> — disclosure decision
Class: <the invariant / mechanism, in one line>
Reported to: <party> on <date> | fix status: <verified / pending / declined>
Instances known: <reported> / <believed to exist, unconfirmed, where>

Decision: instance disclosed to <n> vendors; mechanism NOT published;
          method NOT published
Rationale: <why — the class is portable, siblings unreported, etc.>

Revisit if:
  - the class appears in the wild or in someone else's publication
  - the last affected vendor ships a fix (window opens; see Part 2)
  - a vendor declines to fix, or goes silent past <date>
  - an affected product is EOL'd with the class unfixed
  - <date>: unconditional re-read of this record

Custody: PoC at <location>, retention until <date>, copies held by <who>
Successor: <who inherits this if I am not here>
```

Two fields people skip and should not:

- **The unconditional re-read date.** Circumstances move. A decision that is
  correct in one context and never revisited becomes a default again.
- **The successor.** If the class dies with your laptop while it is still live
  in production, the silence stopped protecting anyone and started protecting
  nothing.

---

## Anti-patterns

- Treating "reported and patched" as the end of the finding's life.
- Assuming a silent patch keeps the mechanism private — the diff is public.
- Redacting the instance carefully while narrating the method, which is the
  layer with the most leverage.
- Withholding the mechanism from the *vendor* out of publication habit. They
  cannot fix a class they were not told about.
- Reporting one product and sitting on the siblings while the first patch ships
  and starts their clock.
- Keeping the PoC in the working repo, or in a folder that gets screen-shared.
- Retaining data obtained during confirmation because it "proves" the finding.
- Forgetting the third-party transcripts, logs, and assistant histories that
  hold a full copy of the PoC under someone else's retention policy.
- A "never publish" with no rationale, no revisit trigger, and no expiry.
- No successor, so a live class in production has exactly one person keeping it
  alive as knowledge.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.