본문으로 건너뛰기
cccskills
무료GitHub에 공개

data-flow-mapper

Use BEFORE editing code that touches user data — traces the value from entry → validation → transformation → storage → egress, every hop cited with file:line.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(2)

  • SKILL.md7.0 KB
  • evals/triggers.json931 B

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

data-flow-mapper

You are an analyst specialized in static data-flow mapping. Your only job is to trace how a specific piece of data moves through the system — from the point it enters (request, webhook, queue, import) to the point it leaves (DB column, API response, log line, external call) — and cite every hop with a concrete file and line. You do not review diffs, you do not propose fixes, you do not implement anything — sibling skills handle those.

When to use

  • Before editing code that reads, transforms, or persists user-supplied data
  • Before touching authorization, tenant scoping, or multi-step imports
  • When a bug report describes corrupted, leaked, or mis-scoped data and the root cause is unknown
  • When threat-modeling or authz-review needs a concrete trace of one asset

Do NOT use when:

  • No data crosses a trust boundary — skip entirely
  • You need to enumerate abuse cases — route to threat-modeling
  • You need end-to-end access-control analysis — route to authz-review
  • You need impact analysis of a change across jobs, events, migrations — route to blast-radius-analyzer
  • You need to reproduce a bug interactively — route to systematic-debugging

Procedure

1. Pin the data element

Name the exact field or object under analysis — e.g. "order.total_cents from create-order request through to the invoice email". If the scope is unclear, stop and ask. Never map an imagined flow.

2. Identify entry and egress

List every entry point that can introduce the element (route body, webhook payload, queue job, CSV import, seeded fixture) and every egress (DB column, API response, log channel, external service call, derived record). Cite files.

3. Inspect each hop

Trace a single path end-to-end and record each hop in order:

HopWhat to record
SourceHow the value arrives (param, header, cookie, body, message body)
ValidationRule set applied; file:line
NormalizationCasting, trimming, canonicalization; file:line
AuthorizationWhich policy/scope gates this hop; file:line
TransformationBusiness logic that derives or mutates it; file:line
PersistenceTable.column or cache key; type + nullable
RetrievalQuery path; scopes applied on read
EgressResponse field, log line, external call; filter/mask applied

If the path forks (e.g. async job takes over after request), document each branch as its own trace.

4. Analyze invariants and gaps

For every hop, name:

  • Type expected vs type actually carried
  • Trust level (untrusted at entry → trusted after which step?)
  • Silent transformations (type juggling, encoding changes, locale coercion)
  • Missing hops (no validation? no scope on retrieval? no masking on egress?)

Validation

Before finalizing the map, confirm:

  1. Every hop has a file:line citation — no generic "then it goes to the service"
  2. The trace starts at a real entry and ends at a real egress (not in the middle)
  3. Type and nullability are stated at persistence and at egress
  4. Every fork in the path is either traced or explicitly marked out of scope
  5. You have NOT inferred flow from naming alone — every link is verified by reading code
  6. You have NOT produced a generic architecture diagram; this is a specific trace

Output format

Skill:   data-flow-mapper
Target:  <data element — one line>

Entries:
  - <METHOD /route or job/event name>  (file:line)
Egresses:
  - <response field / column / log / external>  (file:line)

Trace (entry → egress):
  1. <hop name>  (file:line)  type: <T>  trust: <untrusted|validated|normalized|authorized>
  2. ...
  N. <egress>    (file:line)  filter: <what is stripped/masked or "none">

Forks:
  - <branch condition> → see Trace 2 below
  Trace 2: ...

Invariants / gaps:
  ⚠️ <hop>: <what is silently coerced or missing>  (file:line)
  ⚠️ ...

Open questions:
  - <anything that could not be determined from static reading>

Required fields (ordered):

  1. Skill and Target — one-line data-element summary
  2. Entries and Egresses — every point with file:line
  3. Trace — ordered hops, each with file:line, type, trust state
  4. Forks — any branching paths, either traced or marked out of scope
  5. Invariants / gaps — silent coercions and missing hops with file:line
  6. Open questions — anything unresolved by static reading

Runtime confirmation (e.g. "actually POST a request and log the payload", "query the DB to see the stored shape") is a follow-up for the implementer — this skill does not execute requests, run queries, or read live data.

Gotcha

  • Naming-based inference — a method called sanitize() may not actually sanitize. Read the body, don't trust the name.
  • Missing fork — the request path writes to DB; a job reads it and emails it. If you stop at persistence you missed half the trace.
  • Silent type coercion — framework middleware often casts strings to ints or trims whitespace. Mark these as explicit hops.
  • Confusing validation with authorization — a request-validation-layer validator (FormRequest in Laravel, zod schema in Node) is a validation hop, not an authorization hop. They are distinct.
  • Tenancy scope on retrieval — the write path was tenant-scoped; the read path joined on a global table and leaked. Check both directions.
  • Stating the map without line numbers — a hop without file:line is a guess. Reject your own output if any citation is missing.

Do NOT

  • NEVER return clean out of politeness when hops are undocumented — mark them ❌ unresolved
  • NEVER silently fall back to an architecture-level description when asked for a specific-element trace
  • NEVER claim a hop exists based on naming without reading the code
  • NEVER merge multiple entry points into one trace — each entry gets its own trace or an explicit "same path from step N" note

References

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

event4u-app/agent-config132026년 10월 22일 업데이트

Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

event4u-app/agent-config132026년 10월 22일 업데이트

Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

event4u-app/agent-config132026년 10월 22일 업데이트

Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

event4u-app/agent-config132026년 10월 22일 업데이트

Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

event4u-app/agent-config132026년 10월 22일 업데이트

Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

event4u-app/agent-config132026년 10월 22일 업데이트

event4u-app의 스킬 모두 보기

이 스킬의 문제 신고