- 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.
- Repo-local Roborev defaults live in
.roborev.toml; review scope and operating notes live inROBOREV-CONTEXT.md,ROBOREV-LOCAL.md, andROBOREV-PLAYBOOK.md. - For new machines or fresh clones, use
ROBOREV-BOOTSTRAP.mdandscripts/bootstrap-roborev-local.shinstead ofroborev init; this repo already tracks its Roborev config and hook scripts. - After every local commit in this repo, wait for the automatic Roborev review to finish with
roborev wait, inspect it withroborev show HEAD, and address actionable findings before considering the work complete. - Use
scripts/roborev-matrix-review.sh HEAD^..HEADfor an explicit two-agent commit-level gate, andscripts/roborev-matrix-review.shfor a branch-level gate before push or PR updates. - Read
.roborev/last-review.mdafter the matrix script finishes and fix any concrete correctness, regression, build, packaging, or docs issues it identifies in the touched scope.