mirror of
https://github.com/garrytan/gstack.git
synced 2026-06-17 23:30:09 +02:00
feat(question-pref): runtime AUTO_DECIDE carve-out for *-split-* ids
Split chains (per-option AskUserQuestion calls emitted by the new "Handling 5+ options" rule) must never be silently auto-approved via /plan-tune preferences. The user's option set is sacred. Layer 1 (mechanism): unique <skill>-split-<option-slug> ids prevent cross-option preference leakage. Layer 2 (this commit): the runtime checker `gstack-question-preference --check` detects any id matching *-split-* and forces ASK_NORMALLY even when never-ask or ask-only-for-one-way preferences exist for that exact id. An explanatory note tells the user their preference was bypassed and why. 7 tests pin the carve-out: no-pref baseline, never-ask override, explanatory note text, ask-only-for-one-way override, always-ask (no note), non-split id containing "split" word (negative case for regex specificity), multi-skill split id formats. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -68,6 +68,21 @@ do_check() {
|
||||
return;
|
||||
}
|
||||
|
||||
// Split-chain carve-out: per-option calls in N-option splits emit
|
||||
// question_ids of the form <skill>-split-<option-slug>. These are
|
||||
// NEVER AUTO_DECIDE-eligible regardless of stored preferences — the
|
||||
// whole point of splitting is restoring user sovereignty over the
|
||||
// option set. See scripts/resolvers/preamble/generate-ask-user-format.ts
|
||||
// \"Handling 5+ options — split, never drop\" for the surrounding
|
||||
// mechanism that generates these ids.
|
||||
if (/-split-/.test(qid)) {
|
||||
console.log('ASK_NORMALLY');
|
||||
if (pref === 'never-ask' || pref === 'ask-only-for-one-way') {
|
||||
console.log('NOTE: split-chain per-option calls always ASK_NORMALLY; your ' + pref + ' preference does not apply to options inside a sequential split.');
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
switch (pref) {
|
||||
case 'never-ask':
|
||||
console.log('AUTO_DECIDE');
|
||||
|
||||
Reference in New Issue
Block a user