- Add a new entry to
src/PerfectHash/PerfectHashFileWork.hin theVERB_FILE_WORK_TABLEmacro with the right suffix/extension/EOF size; keep invariants (streams follow their owning files, VC project entries stay contiguous, context file entries stay contiguous). - Implement the prepare/save callbacks in
src/PerfectHash/Chm01FileWork*.c; if a stage is intentionally unused, add a#define PrepareXxxChm01 NULLor#define SaveXxxChm01 NULLinsrc/PerfectHash/Chm01FileWork.h. - If you need a new file extension, add a
UNICODE_STRINGinsrc/PerfectHash/PerfectHashConstants.cand reference it in the file work table entry. - Register new source files in
src/PerfectHash/CMakeLists.txt; for Visual Studio builds, mirror additions insrc/PerfectHash/PerfectHash.vcxprojandsrc/PerfectHash/PerfectHash.vcxproj.filters. - If the filename needs custom path behavior (special base name, directory, or stream rules), update
src/PerfectHash/Chm01FileWork.cwhere paths are constructed. - Update tests or CMakeLists generators if the new file needs compilation or validation coverage.
- See
skills/add-new-file/SKILL.mdfor the full step-by-step checklist.
- Use
PERFECT_HASH_GOOD_HASH_FUNCTION_TABLE_ENTRYandIsGoodPerfectHashHashFunctionId()ininclude/PerfectHash.hto identify the curated hash set for downstream outputs. - Current good set: MultiplyShiftR, MultiplyShiftRX, Mulshrolate1RX, Mulshrolate2RX, Mulshrolate3RX, Mulshrolate4RX.
- File enums are tracked via a 64-bit bitmap. When we run out of bits, add a new enum group with a
_2,_3, etc. suffix and keep the existing enum ordering rules intact.
- Use
skills/perfecthash-conda-packaging/SKILL.mdfor PerfectHash conda build/smoke-test/upload flows, Anaconda.org org-channel publishing, and conda-forge bootstrap/feedstock workflow updates.
- Use
skills/perfecthash-release-engineering/SKILL.mdfor tag-first release cutting, release workflow validation, release-notes/doc synchronization, and release automation audits. - Release versioning rule: reserve patch (
X.Y.Z) bumps for release-oriented non-functional fixes only. Use a minor or major bump for functional changes, new features, or user-visible behavior changes.