BitLesson is the repository's Bitter Lesson-style knowledge capture system for RLCR rounds.
The selector reads bitlesson_model from the merged config hierarchy:
config/default_config.json~/.config/humanize/config.json.humanize/config.json- CLI flags where applicable
Provider routing is automatic:
gpt-*,o[N]-*(e.g.o1-*,o3-*,o4-*) route to Codexclaude-*,haiku,sonnet,opusroute to Claude
If the configured provider binary is missing, the selector falls back to the default Codex model so the loop can still proceed.
On Codex-only installs, Humanize writes provider_mode: "codex-only" into the user config.
When that mode is present, the selector forces BitLesson selection onto the Codex/OpenAI path
before provider resolution, even if an older default such as haiku would otherwise route to Claude.
Each project keeps its BitLesson knowledge base at .humanize/bitlesson.md.
When start-rlcr-loop begins:
- The file is initialized from
templates/bitlesson.mdif it does not already exist - Each task or sub-task runs through
scripts/bitlesson-select.sh - The selected lesson IDs are applied during implementation, or
NONEis recorded when nothing matches - The stop gate validates a required
## BitLesson Deltasection in every round summary
Required summary shape:
## BitLesson Delta
- Action: none|add|update
- Lesson ID(s): <IDs or NONE>
- Notes: <what changed and why>Validation rules are strict:
Action: nonemust useLesson ID(s): NONEor leave the field emptyAction: addandAction: updatemust reference concreteBL-YYYYMMDD-short-nameIDs that exist in.humanize/bitlesson.md--require-bitlesson-entry-for-nonecan be used to block empty knowledge bases from repeatedly reportingnone