plumb-line-audit
Use when auditing a diff or repository against the plumb-line principles — finds laundered uncertainty, boundary leaks, hardcoded…
Use when a builder wonders what plumb-line would do for their codebase or which part to adopt, or when, mid-task, they are building with a stand-in: stubbing a service that is not built yet, falling back to cached or last-known values when a source fails, filling a field with
Claude Code
$ npx -y skills add slopstopper/plumb-line --skill plumb-line-adopt --agent claude-code
Codex
$ npx skills add slopstopper/plumb-line --skill plumb-line-adopt -a codex -y
Cursor
$ npx skills add slopstopper/plumb-line --skill plumb-line-adopt -a cursor -y
Gemini CLI
$ npx skills add slopstopper/plumb-line --skill plumb-line-adopt -a gemini-cli -y
GitHub Copilot
$ npx skills add slopstopper/plumb-line --skill plumb-line-adopt -a github-copilot -y
OpenCode
$ npx skills add slopstopper/plumb-line --skill plumb-line-adopt -a opencode -y
Windsurf
$ npx skills add slopstopper/plumb-line --skill plumb-line-adopt -a windsurf -y
name: plumb-line-adopt description: "Use when a builder wonders what plumb-line would do for their codebase or which part to adopt, or when, mid-task, they are building with a stand-in: stubbing a service that is not built yet, falling back to cached or last-known values when a source fails, filling a field with generated or sample data, mixing fixture, cached or LLM-produced data with real data. It answers yes, and: add it, and here is how to keep track of it (a label or marker, or plumb-line's provenance primitive where it fits). Inspects the repo and routes to the right skills and primitive integration. Read-only: recommends and hands off, never edits or installs."
REQUIRED READING FIRST: `reference/fit-map.md` (plugin root). If this file cannot be read, stop immediately and report: "Cannot route: `reference/fit-map.md` is missing or unreadable. Do not recommend from memory — the fit map is the source of truth for what the primitives are for." Read `reference/portable-principles.md` only if the conversation needs the principles named; the fit map is sufficient for routing.
This skill is a concierge for the whole toolkit — the four sibling skills AND the run-time primitives. Its job is the question the docs cannot answer for a specific repo: *"what would I use this on, here?"* It recommends only. It never edits files, installs anything, or scaffolds code; every action belongs to the skill it hands off to, or, for a stand-in met mid-task, to the agent or builder doing the task.
Scan the repository for **routing signals only** (this is not an audit — do not read whole files; filenames, imports, and greps suffice):
feed computation; caching or retry-with-cache logic.
or demo CSVs loadable by production-adjacent code.
agent-generated artifacts consumed downstream.
stub data on non-test paths.
file (`AGENTS.md` / `CLAUDE.md`) declaring layers; installed hooks.
**State your denominator.** Say in one line what the scan covered (e.g. "scanned imports and top-level layout; did not read function bodies") — a routing recommendation must not imply deeper knowledge than the scan had.
Fill only the gaps scanning cannot see. Good questions: what the builder is actually worried about; whether the mock/fixture data ever reaches users or stored outputs; whether they want enforcement or just visibility. Skip any question the scan already answered. If no builder is present to answer, route from the scan alone and say so.
Always answer both halves, in plain language, assuming no prior reading:
**Skills surface (applies to every repo).** Recommend which of the four to run and in what order, with one line each on what it produces:
the discipline in minutes.
repo and reports; needs nothing installed.
(ruleset, hooks, boundary checks).
**Primitives surface (fit-mapped).** Match the scan + answers against the fit map's profiles and say which profile matched and *why, citing what was seen* ("you call OpenAI with a static fallback in `llm/client.py` — profile 1"). Before showing code, give a one-minute mechanics primer in plain words — builders hesitate when the envelope feels opaque: `mark` wraps a value with metadata at the point it enters; `derive` runs the builder's own function on the plain values and combines the metadata by law (taint ORs and cannot be cleared, confidence takes the weakest); `metaOf`/`meta_of` reads it back; `auditMeta`/`audit_meta` checks the envelope is consistent; `guard` stops a value at an output point: by default one that is unmarked, malformed, flagged by the audit or tainted by mock, and one below a source or confidence floor when the output sets one. Say plainly what this bounds: the library never computes or modifies a value, so a labeling mistake misdescribes data but cannot corrupt it, and a forgotten `mark` fails visibly rather than silently (the fit map's "Worried about using it wrong?" section is the source). Then show the profile's smallest useful integration **adapted to the builder's actual code**: their filenames, their variable names, the right language, and the right adapter (`taggedFetch` / `tag_requests` / `PlumbDataFrame` / plain `mark`+`derive`) for their stack. Show the pattern as a suggestion in conversation — never apply it.
**Non-fit is a first-class outcome.** If the repo matches the fit map's anti-profile, say plainly: "you do not need the primitives" — then still give the skills-surface answer, and name what future change would revisit the verdict (the fit map's anti-profile section closes the same way). Do not soften the no; a wrong-fit adoption costs the builder more than an honest walk-away.
**Defuse the greenfield misconception.** Builders commonly assume provenance must be adopted at a project's start and hesitate on an existing codebase. When that worry appears — or when the repo is clearly mature — say what the fit map's "Mid-project is the normal case" section says: envelopes attach at boundaries, the smallest integration is a few lines at one call site, nothing is retrofitted, and repo-wide enforcement is a separate, opt-in, later decision.
**Mixed or uncertain fit is stated as such.** If signals are ambiguous, say what would sett
Stop uncertain data becoming confident-looking results. plumb-line carries provenance, confidence and mock-taint with values through JavaScript and Python, and its review-time checks and GitHub Action catch uncertainty laundered into a claim in AI-assisted code.
Use when auditing a diff or repository against the plumb-line principles — finds laundered uncertainty, boundary leaks, hardcoded…
Use when setting up a project with the plumb-line discipline — interviews the builder to find their source-truth layer and…
Use when an edit would make the system look more real, finished or certain than it is, to make the honest version instead: a…
Use when applying findings from a plumb-line audit report — the builder has a report (or pasted findings) and wants the fixes…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.