fix(sync): process-skill triggers invoke by name only — resemblance offers, never substitutes
CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 10s
CI & Build / integration (push) Successful in 18s
CI & Build / TypeScript typecheck (push) Successful in 22s
CI & Build / Python tests (push) Successful in 47s
CI & Build / Build & push image (push) Successful in 26s
CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 10s
CI & Build / integration (push) Successful in 18s
CI & Build / TypeScript typecheck (push) Successful in 22s
CI & Build / Python tests (push) Successful in 47s
CI & Build / Build & push image (push) Successful in 26s
Scribe issue #2582: the sync wrote "Use when {title}-type work is requested" into every generated process skill, so a bespoke live prompt that merely resembled a stored Process got the Process's canned procedure — and inherited approvals embedded in its body (the Drift Audit's fan-out opt-in) that the conversation never granted. Observed live: an explicit systems-review request with its own constraints was answered with the Drift Audit clarify menu recommending ~15 parallel auditors. New trigger contract, both variants: follow verbatim only when invoked by name; on mere resemblance the live instructions govern — offer the process, ask before following, and never inherit embedded approvals the operator hasn't granted in this conversation. (The Drift Audit process record itself was also rewritten to a sequential in-context walk — data change, live already, recorded in the same issue.) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -223,17 +223,23 @@ async def build_process_manifest(user_id: int) -> dict:
|
||||
f'A shared Scribe process "{title}", authored by {owner} — NOT the'
|
||||
f" operator's own."
|
||||
+ (f" {preview}" if preview else "")
|
||||
+ f' Use when {title}-type work is requested, or when asked to run'
|
||||
f' the "{title}" process — but summarise it and get the operator\'s'
|
||||
f" go-ahead before following it, since it reflects {owner}'s"
|
||||
f" judgement rather than theirs."
|
||||
+ f' Use only when the operator asks to run the "{title}" process'
|
||||
f" by name — and even then summarise it and get their go-ahead"
|
||||
f" first, since it reflects {owner}'s judgement rather than"
|
||||
f" theirs. If a request merely resembles this process, the live"
|
||||
f" instructions govern: offer it by name, don't follow it."
|
||||
)
|
||||
else:
|
||||
description = (
|
||||
f'Run the operator\'s saved Scribe process "{title}".'
|
||||
+ (f" {preview}" if preview else "")
|
||||
+ f' Use when {title}-type work is requested, or when asked to run'
|
||||
f' the "{title}" process.'
|
||||
+ f' Use when the operator asks to run the "{title}" process by'
|
||||
f" name. If a request merely RESEMBLES this process, the live"
|
||||
f" instructions govern — offer the process by name and ask"
|
||||
f" before following it; never substitute it for explicit"
|
||||
f" instructions, and never inherit approvals embedded in it"
|
||||
f" (e.g. a fan-out opt-in) the operator hasn't granted in this"
|
||||
f" conversation."
|
||||
)
|
||||
entry = {
|
||||
"id": it["id"], "name": title, "slug": slug,
|
||||
|
||||
Reference in New Issue
Block a user