graph_entity_naming
Rules for what a knowledge-graph node may be named after, and an audit script that finds junk labels.
Skill by built-environment
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/hack4rva-graph-entity-naming
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.
About
Use cases: data, security, writing
Reviews
Write a reviewNo 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
- Runs as
- Node.js package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/graph-entity-naming
What's inside
- Skill name
graph_entity_naming- Description
- Rules for what a knowledge-graph node may be named after, and an audit script that finds junk labels. Use when writing or reviewing extraction parsers, when a graph shows nonsense node titles, when deciding what becomes an entity versus evidence, or before publishing regenerated graph data.
- License
- Apache-2.0
- Metadata
- author: built-environment
- Instructions
- 113 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Agent Skills spec issues
- name: only lowercase letters, digits and single hyphens allowed
Files (2)
- SKILL.md
- audit-labels.mjs · scripts/
SKILL.md (first lines)
> **Note:** This research was generated using AI assistance (Claude + Parallel.ai) with human expert review. See [methodology](../../docs/methodology.md) for details. # Graph Entity Naming A node label is the whole interface. Nobody reads provenance for a dot they cannot identify, so a bad label does not merely look untidy — it removes the node from use. Every rule below comes from a label that shipped and had to be fixed at the source. Run the audit before publishing regenerated data: ```bash node skills/graph_entity_naming/scripts/audit-labels.mjs # this repo node skills/graph_entity_naming/scripts/audit-labels.mjs <path/to/data> # any graph dir ``` It exits non-zero when it finds anything, and prints the offending labels with their pillar and type. ## The rules ### A directory name is not a display name Title-casing a slug produced `Rva-Plotlines`, `Explorerva`, `Multi-Pillar-Ai` and `Whats-On-Rva`. Get the real name from wherever humans wrote it down — for demo projects that is `rvahacks/src/data/ideas.ts` and `idea-content.ts`, exported into the pillar repos by `npm run kg:names`. Render the slug only as a fallback, and make the renderer acronym-aware (`RVA`, `HUD`, `SMS`, `OMBD`, `AI`) so the fallback is at least readable. ### Never name a node after the tooling that produced the research City Hall's research lives in `_parallel-research/`, named for the AI tool that generated it. Treating that directory as a project invented a civic proposal called `" Parallel-Research"` — with a leading space, because title-casing kept the underscore — that nobody had proposed. An underscore prefix marks a directory that is **not a project**: `_shared-*` spans several demos, `_parallel-research` is raw tool output, `_research-answers` is a different shape entirely. ### Keep the findings, move the anchor Do not solve a fabricated hub by deleting the directory. `_parallel-research` is the only post-event research City Hall has, and it contributes twelve real City services that have no other edge. Dropping it orphans all twelve. Anchor non-project findings to an `Evidence` node named for **the report**, and run the edge the other way: a proposal `ADDRESSES` its findings, but a report only `HAS_EVIDENCE` for them. The weaker claim is the true one. ### A hostname is not an identity When a citation arrives without a title, falling back to the hostname made fourteen distinct Open Data URLs render as fourteen identical dots labelled `data.richmondgov.com`. Include the path. Reserve the bare host for URLs that genuinely have none. ### Trim after truncating, not before Slicing a long page title at a fixed width lands mid-word about as often as not and leaves the label ending in a space. Truncate, then `trimEnd()`, then add the ellipsis. ### A name field is the subject of a problem, never the problem A limitations section that led with `Data Source Name` produced a Problem called `"SeeClickFix Sample Data Aug 2014 to Aug 2015"`. The dataset is what the problem is *about*; the `limitation` field is the problem. When choosing a label from a record, prefer the field whose key names the thing you are modelling (`barrier`, `limitation`, `challenge`, `gap`, `issue`), then any field that is not a `*_name`, and only then the first value. ### Sentence-shaped findings are evidence, not entities `"This workaround is highly inefficient, leading to wasted time…"` is a claim, not a Problem. The extractor demotes sentence-shaped Problem and Need nodes into `data/evidence.json` as `ev:` records with provenance. That is the right home — check there before concluding a finding was lost. The inverse is equally wrong: `"In-Person Visits"` and `"RRHA"` are a workaround and an organisation, and neither is a problem. If a section yields only subjects and methods, it is not a problem section. ## Reviewing an extractor change Ask of every node the parser creates: 1. Would a Richmond resident recognise this name as the thing it points at? 2. Does the name come from a source, or from a filename the pipeline chose? 3. Is the label unique enough to tell two nodes apart? 4. Is this an entity at all, or a sentence that belongs in the evidence layer? 5. If this node disappeared, what would be orphaned? ## Parsing the sources these names come from Do **not** read structured TypeScript or JSON-ish data with a windowed regex or a line scanner. Both failed silently here and paired `vecina` with the title of the next object, shipping `Vecina → "B2GNow CSV Export"` — wrong data that looks entirely plausible. Find the anchor, then bound the record by brace matching, and strip nested objects before reading fields so a child's `title` cannot be mistaken for the parent's. When a parse yields a suspicious count (89 names for 73 ideas), treat the arithmetic as the bug report it is. Better still: key the output off what actually exists on disk — the directories present in the repo — so a name is only claimed for a project that is really there, and an unnamed directory is visibly absent rather than quietly guessed.
From hack4rva/pillar-thriving-built-environment, Apache-2.0.
More from hack4rva/pillar-thriving-built-environment
- 0.516score
knowledge_graph_pipeline
built-environment
Change the knowledge-graph extractor and publish the result across all seven pillar repos and the rvahacks site.
SkillBFreshness: BClaude Code +9 - 0.409score
parallel-deep-research
parallel
ONLY use when user explicitly says 'deep research', 'exhaustive', 'comprehensive report', or 'thorough investigation'.
SkillDFreshness: DClaude Code +9 - 0.406score
parallel-data-enrichment
parallel
Bulk data enrichment.
SkillDFreshness: DClaude Code +9 - 0.406score
parallel-web-extract
parallel
URL content extraction.
SkillDFreshness: DClaude Code +9 - 0.406score
parallel-web-search
parallel
DEFAULT for all research and web queries.
SkillDFreshness: DClaude Code +9
Signals
- Stars
- 0
- Forks
- 1
- Open issues
- 0
- Last commit (this folder)
- Aug 3, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from built-environment
Cite this page
graph_entity_naming skill. Agent Mart. https://agentmart.dev/skills/hack4rva-graph-entity-naming (last updated 2026-10-24)