Skip to content
Agentmart
Submit a tool

surface-enumeration

Pre-implementation input-surface enumeration — before writing a parser/validator/sanitizer/classifier, enumerate every input variant so each becomes a…

Skill by devseunggwan

IndexedMIT★ 1
Write a review

Chalk Labs

Need help deploying surface-enumeration?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/devseunggwan-surface-enumeration

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Pre-implementation input-surface enumeration — before writing a parser/validator/sanitizer/classifier, enumerate every input variant so each becomes a required test case.

Use cases: testing, writing

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/surface-enumeration

What's inside

Skill name
surface-enumeration
Description
Pre-implementation input-surface enumeration — before writing a parser/validator/sanitizer/classifier, enumerate every input variant so each becomes a required test case.
License
MIT
Instructions
135 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# surface-enumeration

## Overview

Code that validates, classifies, routes, sanitizes, or interprets variable input
fails one missed variant at a time. A reviewer finds case A, you fix it, the next
round finds case B, and so on — each round is a full round-trip because the input
surface was never enumerated up front. This skill front-loads that enumeration:
list the variants **before** implementing, turn each into a test case, and re-run
the full list after every fix.

**Core principle:** enumerate the input surface before writing the handler — a
variant you did not list is a variant you did not test.

## When to Use

- Implementing anything that inspects variable input: SQL/shell/markup parsers,
  sanitizers, auth/validation checks, intent/command classifiers, tokenizers,
  routers, regex matchers.
- A reviewer (Codex / BugBot / human) just found a missed input case — before
  fixing only that case, enumerate the whole surface so the next round is empty.
- Designing a mock/fixture for input-handling code (each enumerated variant is a
  fixture case, including a must-fail case).
- Dispatching N independent PRs / worktrees in parallel, or authoring a
  lesson-reflection / convention-guideline update — enumerate the shared-file
  collision surface, or the source guideline's own §1~§N matrix, before starting.

Skip for code with a fixed, closed input (a function called only with an enum you
control) or a single-token mechanical transform with no interpretation.

## Process

### Step 1: Classify the input-handling code

Name what the code does to the input — this selects which variant families apply:

| Code class | Example | Highest-risk families |
| ---------- | ------- | --------------------- |
| Security / validation | SQL filter, sanitizer, auth check | keyword-in-literal, marker-in-comment, multi-statement, quote mismatch |
| NLP / signal detection | intent classifier, command-signal hook | affirmation, **negation**, **status/question**, continuation-without-headline, substring-vs-word-boundary |
| Regex over mixed text | Korean+English command strings | ASCII word-boundary in Unicode (`\b` is Unicode-aware) |
| Text / grammar parser | shell/SQL/markup tokenizer | comment/heredoc stripping, quoting variants, command-position-only keywords, direction-sensitive ranges, path-invoked binaries, dynamic expansions |
| Multi-PR / shared state | parallel PR dispatch, multi-worktree | shared-file collision (`hooks.json`, `CLAUDE.md`/`AGENTS.md` + symlink targets, `marketplace.json`, `plugin.json`, README/docs hook-index), first-merge-wins rebase |
| Convention-guideline reflection | lesson-reflection PR, skill update from source-PR findings | oracle = the guideline's own §1~§N matrix (not the surfaced finding list), lint-bypass silent-merge |
| Bulk / stateful | 100+ item loop, multi-run write | connection lifecycle, per-item isolation, idempotency (see limitations) |

### Step 2: Enumerate the surface

Walk the checklist and write down each variant that applies. Do not stop at the
"obvious" ones — the missed variant is by definition not obvious.

- **Escape / quoting**: single vs double quote — in SQL `'--'` is a string
  literal while `"--"` is a quoted identifier, so they take different parse
  paths even though the enclosed value is identical; also escaped quote,
  backslash, nested quotes.
- **Comment / marker position**: keyword inside a string literal; comment marker
  inside a literal; literal marker inside a comment.
- **Multi-statement / separator**: semicolon-joined statements, newline-joined.
- **Negation forms**: `don't proceed`, `진행하지 마`, `not X` — a signal detector
  that only matches the affirmative form misfires on the negation.
- **Status / question forms**: `진행 상황을 알려줘`, `should I push?` — a question
  about X is not a command to do X.
- **Continuation without the headline token**: `계속해` ("keep going") vs
  `계속 진행` ("continue proceeding") — the token you keyed on may be absent.
- **Substring vs word boundary**: `Product plan` vs `production`, `prod` vs
  `prod-only`. In Korean+English mixed text Python `re.\w` is Unicode-aware, so
  `\bpush\b` does NOT separate `push` from `할까요`; use `(?<![a-z])foo(?![a-z])`.
- **Non-executable text**: comments, heredoc/string bodies that must be stripped
  before parsing; command-position-only reserved words (`echo done` does not
  close a loop); direction-sensitive ranges (`{30..1}`); path-invoked binaries
  (`/bin/sleep` vs bare `sleep`); dynamic expansions (`$(...)`, `$VAR`) needing
  explicit fail-open.
- **Encoding / container / integrity**: alternate encodings, wrapped/nested
  container formats, missing field, truncated/corrupt payload.

Cover **both** dimensions: semantic coverage (count/threshold math) does NOT
substitute for syntactic coverage (the variants above), and vice versa. Scope
each construct independently — never merge tokens across sibling constructs into
one verdict.

Two enumeration surfaces are process-level rather than string-input — they apply
when the surface being enumerated is a set of PRs or a source guideline, not a
value being parsed:

- **Multi-PR / multi-worktree shared state**: when dispatching independent PRs
  in parallel, enumerate every file each PR touches that a sibling also touches —
  `hooks.json`, `AGENTS.md`/`CLAUDE.md` (and their symlink targets),
  `marketplace.json`, `plugin.json`, hook-index tables in `README`/`docs/`. First
  PR to merge wins; each sibling then needs a rebase.
- **Convention-guideline reflection artifacts**: when authoring a "lessons from
  PR X about guideline G" artifact (lesson-reflection PR, skill update reflecting
  upstream/source-PR findings), the enumeration oracle is **G itself — its §1~§N
  matrix** — not the externally-surfaced finding list (BugBot, Codex,
  sibling-conflict, mode dispatch). Sweep §1~§N against every commit in the
  source PR, or lint-bypass violations (deprecated import, hardcoded literals,
  `any` typing, missing i18n) silent-merge. Trigger phrases: "apply lesson",
  "skill update", "convention guide update".

### Step 3: Promote each variant to a test case

Every enumerated variant becomes a required test case, including at least one
**must-fail** case (input that should be rejected → assert the error/raise, not a
silent default branch). For mocks/fixtures, cite field names from vendor docs or
a working baseline — never mirror them from the code under test (that produces a
tautological pass).

### Step 4: Verify each test input actually reproduces its variant

An input that does not reproduce the intended variant gives a false pass. Confirm
before relying on it:

```bash
# word-boundary claim in mixed text — verify the regex actually behaves as assumed
python3 -c "import re; print(bool(re.search(r'\bpush\b', 'push할까요?')))"
# SQL marker — '--' (string literal) parses differently than "--" (identifier)
```

### Step 5: Re-run the full list after every fix

From devseunggwan/praxis, MIT.

More from devseunggwan/praxis

Signals

Stars
1
Forks
0
Open issues
0
Last commit (this folder)
Sep 6, 2026 (1 month ago)
Last release
Oct 24, 2026 (7 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from devseunggwan

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get surface-enumeration running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying surface-enumeration?

CallGet help
Cite this page

surface-enumeration skill. Agent Mart. https://agentmart.dev/skills/devseunggwan-surface-enumeration (last updated 2026-10-24)