mirror of
https://github.com/dtzp555-max/ocp.git
synced 2026-07-21 21:15:09 +00:00
e6f1a6aac1
* fix(server): wire CLAUDE_SYSTEM_PROMPT into the composed system prompt (was dead since APPEND_SYSTEM_PROMPT retirement) The var was read (SYSTEM_PROMPT, server.mjs), documented in the file header as "appended to all requests", and echoed on /health.systemPrompt — but nothing on the request path consumed it: extractSystemPrompt() composed only the wrapper + client system messages. The wiring was lost when APPEND_SYSTEM_PROMPT was retired, leaving the header comment and the buildCliArgs comment describing behavior that did not exist (caught by the PR #170 independent reviewer). Wire, not delete, because: - the /health `systemPrompt` field is part of the grandfathered B.2 contract (ADR 0006, frozen at v3.16.4) — removal would need an ADR; wiring keeps the shape and makes the field honest; - fleet check: no deployment sets the var (Mac prod plist, Oracle systemd unit, PI231 /etc/ocp/ocp.env all clean), so wiring changes behavior for NOBODY today; - with the var unset, appendOperatorPrompt returns its input string unchanged — the default path is byte-for-byte identical. Mechanics: new pure lib/prompt.mjs `appendOperatorPrompt(base, operatorAppend)` (trimmed; whitespace-only treated as unset so a stray space in a service unit cannot inject "\n\n " into every request), applied as the LAST segment in both extractSystemPrompt branches — an operator-wide directive reads as the final instruction, after client system messages. TUI-mode is untouched (panes keep the interactive CLI's own system prompt); documented in the README row. ALIGNMENT.md Rule 2: no cli.js citation applies. No endpoint, header, or wire field is added or altered; the change affects only the CONTENT OCP passes to the already-established `--system-prompt` flag (file header § verified v2.1.104), i.e. OCP-owned prompt composition. /health shape unchanged. Tests: +3, doubly mutation-proven (unconditional-base revert → 2 failures; trim removal → 2 failures). Suite 341 passed / 0 failed. Co-Authored-By: Claude <claude-opus-4-8> <noreply@anthropic.com> * docs(readme): cache-staleness caveat on CLAUDE_SYSTEM_PROMPT row (reviewer advisory) --------- Co-authored-by: dtzp555 <dtzp555@gmail.com> Co-authored-by: Claude <claude-opus-4-8> <noreply@anthropic.com>
18 lines
1.0 KiB
JavaScript
18 lines
1.0 KiB
JavaScript
// lib/prompt.mjs — pure operator-append step for the system prompt.
|
|
//
|
|
// Extracted so the rule is unit-testable (the suite never imports server.mjs — it
|
|
// boots a listener). server.mjs composes wrapper + client system messages exactly as
|
|
// before, then passes the result through this. With CLAUDE_SYSTEM_PROMPT unset the
|
|
// return is the INPUT STRING UNCHANGED — the default path stays byte-for-byte
|
|
// identical, which is the repo's bar for touching a request-shaping function.
|
|
//
|
|
// The operator prompt goes LAST deliberately: a server-wide directive ("answer in
|
|
// Chinese") should read as the final instruction, not something a client system
|
|
// message overrides by coming later. Whitespace-only values are treated as unset —
|
|
// a stray space in a service unit's Environment= line must not inject "\n\n " into
|
|
// every request.
|
|
export function appendOperatorPrompt(base, operatorAppend) {
|
|
const op = typeof operatorAppend === "string" ? operatorAppend.trim() : "";
|
|
return op ? `${base}\n\n${op}` : base;
|
|
}
|