Trim rule and result char budgets after compaction via new
postCompactMaxRuleChars/postCompactMaxResultChars config, applied
through withPostCompactBudget. Extract codex-hook helpers into
dynamic-target-fingerprints, hook-output, path-utils,
rules-engine-factory, and transcript-rule-filter modules.
Rewrite # Task Tracking from a single soft paragraph to a strict
update_plan covenant: mandatory for any 2+ step work, exactly one
in_progress, no batched completions, plan closure required, promise
discipline (do not commit to follow-up work you will not finish in
this turn). Pins the {step, status} schema with the pending /
in_progress / completed enum, and adds the explicit failure-mode
verdict that improvising past step 2 without an update_plan call is
itself a defect.
Add # Subagents section documenting that Codex's spawn_agent returns
immediately, runs in parallel, and should be fired 2-5 at a time via
multi_tool_use.parallel for independent investigations. Names the four
bundled roles (explorer / librarian / plan / codex-ultrawork-reviewer),
pins the four-field CONTEXT / GOAL / DOWNSTREAM / REQUEST spawn prompt
template, and instructs the model to call wait_agent sparingly only
when the next critical-path step is strictly blocked.
Compress the three repeated 'omo-codex LSP MCP diagnostics tool
(auto-runs on every edit via the lsp component, but you may also
invoke it explicitly)' phrasings to plain lsp_diagnostics, with the
auto-inject context defined once in # Parallelize aggressively. Saves
about 290 chars and defends the new sections' growth per the
prompt-engineering entropy gate.
The Hephaestus baseline is now 16578 chars; the prior 14627-char
version was already being silently truncated by the per-rule cap.
That truncation is fixed in the companion commit that bypasses the
cap for plugin-bundled rules, so the full discipline now lands on
every Codex session.
The 12000-char per-rule cap exists to guard against absurd user-authored
AGENTS.md files. For PLUGIN_BUNDLED rules the plugin author already
controls the body size, and silent mid-section truncation breaks the
contract that bundled discipline lands in full.
The current bundled Hephaestus baseline is 16k chars: everything from
`# AGENTS.md` onward (Output, Success Criteria, Stop Rules, Task
Tracking) was being dropped from every Codex session without warning.
Skip truncateRule when the source is plugin-bundled; the maxResultChars
budget (40000 default) via truncateBudget still caps total injection.
Locks the behavior with two regression tests in bundled-rules.test.ts:
bundled body > maxRuleChars lands intact, project body > maxRuleChars
still truncates with the standard notice.