name: delete-entry description: Guidelines for safely deleting dictionary entries while properly updating indexes and cross-references.
Safely Deleting Dictionary Entries
Use this skill when you need to remove an entry from the dictionary. This ensures all indexes and cross-references are properly updated.
When to Delete an Entry
Valid reasons for deletion:
- Duplicate entry - Another entry exists for the same word (see
resolve-duplicatesskill) - Erroneous entry - Entry contains fundamental errors that cannot be corrected
- Out of scope - Word doesn't belong in a learner's dictionary (too obscure, offensive, etc.)
- Merged into another entry - Content has been incorporated elsewhere
Do NOT delete entries just because they need improvement - use revise-entries skill instead.
Pre-Deletion Checklist
Before deleting any entry:
- Confirm deletion is necessary - Can the entry be fixed instead?
- Note the entry details for later reference:
- Entry ID (e.g.,
00123_taberu) - Reading (e.g.,
たべる) - Headword (e.g.,
{食べる|たべる}) - File path (e.g.,
entries/00000/00123_taberu.json)
- Entry ID (e.g.,
- Check for cross-references to this entry from other entries
- Decide if word should return to candidates (if it still needs an entry later)
Step 1: Find Cross-References to This Entry
Search for other entries that reference the entry you're deleting:
# Search by reading
grep -r '"reading": "たべる"' entries/ --include="*.json" -l
# Search by headword text (without furigana)
grep -r '食べる' entries/ --include="*.json" -l
# Search in cross_references arrays specifically
grep -r '"cross_references"' entries/ -A 20 | grep -B 5 '"reading": "たべる"'
Step 2: Update Cross-References in Other Entries
For each entry that references the one being deleted:
Option A: Remove the cross-reference
If the reference is no longer relevant:
// Before
"cross_references": [
{"type": "related", "reading": "たべる", "headword": "{食べる|たべる}", "label": "to eat"}
]
// After (remove the reference)
"cross_references": []
Option B: Update to point to replacement entry
If a better entry exists (e.g., after merging duplicates):
// Update the reading/headword/label to match the kept entry
"cross_references": [
{"type": "related", "reading": "たべる", "headword": "{食べる|たべる}", "label": "to eat"}
]
Option C: Keep as informational reference
If the cross-reference is still useful even without a target entry, you may keep it. The reference will simply not link to anything.
Step 3: Delete the Entry File
# Remove the entry file
rm entries/{range}/{entry_id}.json
# Example:
rm entries/04500/04567_taberu.json
Verify deletion:
ls entries/04500/04567_taberu.json # Should return "No such file"
Step 4: Update Indexes
Run the index update script:
python3 build/update_indexes.py
This script automatically:
- Removes the entry from
entries_index.json - Updates entry counts
- Syncs with
candidate_words.json
Step 5: Optionally Re-add to Candidates
If the word should eventually have an entry (just not this flawed one):
- Check if
update_indexes.pyalready re-added it to candidates - If not, manually add to
candidate_words.json:
{
"reading": "たべる",
"headword": "食べる",
"english": "to eat",
"notes": "Previous entry deleted due to [reason]. Needs new entry."
}
Step 6: Rebuild the Flat File
python3 build/build_flat.py
This updates the website data. Without this step, the deleted entry may still appear on the live site.
Step 7: Validate
python3 build/validate.py
Confirm:
- No errors about missing files
- No broken cross-references (if you updated them)
- Entry count matches expected total
Complete Workflow Example
# 1. Note the entry to delete
# ID: 04567_taberu, Reading: たべる, Path: entries/04500/04567_taberu.json
# 2. Find cross-references
grep -r '"reading": "たべる"' entries/ --include="*.json" -l
# 3. Update any cross-references found (edit those files)
# 4. Delete the entry
rm entries/04500/04567_taberu.json
# 5. Update indexes
python3 build/update_indexes.py
# 6. Rebuild flat file
python3 build/build_flat.py
# 7. Validate
python3 build/validate.py
# 8. Commit changes
git add entries/ docs/ *.json PROJECT_STATUS.md
git commit -m "Remove duplicate/erroneous entry: 04567_taberu"
git push
Cross-Reference Format Reference
When updating cross-references, use this format:
{
"type": "related", // or: pair, antonym, keigo, synonym, contrast, see_also
"reading": "よむ", // hiragana reading
"headword": "{読む|よむ}", // with furigana (for disambiguation)
"label": "to read" // optional human-readable label
}
Cross-reference types:
pair- Transitive/intransitive verb pairsantonym- Opposite meaningskeigo- Honorific/humble equivalentssynonym- Similar meaningscontrast- Often confused wordsrelated- Semantically relatedsee_also- General reference
Troubleshooting
"Entry still appears on website"
- Did you run
build_flat.py? - Clear browser cache or check
docs/flat_dictionary.json
"Validation shows broken cross-reference"
- Search for the deleted entry's reading in all files
- Update or remove stale references
"Index counts don't match"
- Run
update_indexes.pyagain - Check for orphaned files in entries directory
Safety Notes
-
Always back up first if deleting multiple entries:
git stash # or commit current state first -
Delete one at a time when learning - run validation after each
-
Never delete without checking cross-references - broken links degrade dictionary quality
-
Document deletions in commit messages for future reference