Files
oh-my-pi/packages/utils
Miroslav Drbalandcan1357 e04d2620df Compress and tighten system prompt; relocate SECTION_SEPARATOR helper
Further compresses packages/coding-agent/src/prompts/system/system-prompt.md
from 21,530 B to 16,545 B (−23% on top of the prior compression;
−9,060 B / ~−2,265 tok per turn vs origin/main) while restoring
RFC 2119 weight on every inviolable rule and reorganizing the
pre-yield discipline.

system-prompt.md

RFC 2119 keyword restoration

All rules under `# Contract`, Procedure §§2/6, and the tail `<critical>`
block use `**MUST**` / `**MUST NOT**` keywords that the file's preamble
pins to RFC 2119. The previous draft had downgraded 29 of these to
`Do **NOT**`, which reads as below-MUST-NOT against the same preamble.
Restored sites:
- `# Contract` — all 7 inviolable bullets
- `<critical>` tail block — all 4 safety rules
- `## 6. Verification` — mock ban and no-proof yield rule
- Procedure §2 — "search for existing examples" rule regains the
  PROHIBITED parallel-convention clause it lost
- `<dir-context>` — AGENTS.md read requirement regains MUST

Structural dedup

- `<source-of-truth>` and `<instruction-priority>` were two priority
  lists with overlapping scope. Merged into a single
  `<instruction-priority>` covering all 5 conflict-resolution levels.
- `<self-check>` and `<scope-check>` were two pre-yield checklists;
  `## 6. Verification` also had a third numbered "Before yielding,
  verify..." list with overlapping checks. Collapsed all three into
  one `<pre-yield-check>` section (incl. "output format matches the
  ask" from the old verification list). `## 6. Verification` now
  focuses on verification discipline (test rigor, mocks, run-scope).

Signal restoration

Added four anchors to `<design-checklist>` that were dropped from the
earlier `<code-integrity>` block and had no home in the new structure:
- Adversarial-caller / tired-maintainer self-questioning
- Cost-of-easy-path framing
- Inhabit-the-call-site self-review
- Persistence on hard problems (do not punt half-solved work)

Handlebars fix

The `### Tool priority` header was emitted unconditionally but its
body was wrapped in `{{#ifAny python|bash}}`, producing a bare heading
with no content when neither tool was available. Header now sits
inside the conditional.

SECTION_SEPARATOR helper relocation

The `SECTION_SEPARATOR` Handlebars helper is a generic section-header
formatter that was registered in coding-agent's
`config/prompt-templates.ts`. This coupled every template consumer to
a side-effect import of that module; a prior fix added
`import "./config/prompt-templates"` to `system-prompt.ts` so the
`/system-prompt` sub-path export would register the helper, but
sibling consumers (`task/executor.ts`, `task/template.ts`) worked only
by accident because the parent agent happened to load
`system-prompt.ts` first.

- Moved `sectionSeparator` function and helper registration to
  `packages/utils/src/prompt.ts` next to the other generic helpers
  (`xml`, `codeblock`, `ifAny`, `includes`, `not`, `jsonStringify`).
- `packages/coding-agent/src/config/prompt-templates.ts` now
  re-exports `sectionSeparator` from `@oh-my-pi/pi-utils/prompt` for
  the test that imports it via the coding-agent path.
- Removed the side-effect import from
  `packages/coding-agent/src/system-prompt.ts`.

Template typo fix

Also fixes a latent `SECTION_SEPERATOR` spelling (→ `SECTION_SEPARATOR`)
in the two subagent templates (`subagent-system-prompt.md`,
`subagent-user-prompt.md`). Before the move the typo was masked
because every call site and the helper shared the wrong spelling.
Post-move, the helper is canonical `SECTION_SEPARATOR` in pi-utils
and all templates match.

Verification

- `bun check` clean (TS + Rust, all 9 packages)
- `bun test packages/coding-agent/test/system-prompt-templates.test.ts`
  6/6 pass (was 4/6 failing pre-existing before the infrastructure fix)
- `bun test packages/coding-agent/test/tools/task-template.test.ts`
  4/4 pass (exercises the `sectionSeparator` re-export)
- `bun run format-prompts` clean
2026-04-23 22:59:37 +02:00
..
2026-04-17 18:50:13 +02:00