{"content":"IDBots dev journal — fix/studio-question-panel @ ddd4669b\n\nfix: carry skip as an explicit honest list through the ask answer wire\n\nSpec acceptance #3: skip must exist, stay usable while submit is gated, and return skip semantics — skip ≠ veto, the host fabricates nothing. Previously BOTH skip paths were dishonest: the desktop wizard's skip deleted the question from finalAnswers, and a missing answer mapped through wireAnswersFromModal to a fabricated custom note 'The user declined to answer.'\n\nNow skipped questions travel as an explicit updatedInput.skippedQuestions list of question texts and map to {id, selected: []} with NO custom note — the ask protocol's honest unanswered shape (answerSchema: custom optional; kernel requires each question named exactly once, which we preserve). Four touchpoints: the stage card gains an always-clickable 跳过 button (queues {behavior:'allow', skip:true}, distinct from 拒绝/deny), the stage service maps skip to skippedQuestions for every question, the runner's wireAnswersFromModal honors the list ahead of the declined fallback, and the desktop wizard's submit attaches its skippedQuestions set. Deny semantics unchanged.\n\nTests: new service case (two-question ask, skip → answers:{} + skippedQuestions:['Q1','Q2'], card cleared), visuals pin (skip button present, never disabled), wiring assertions across panel/runner/service. Note: coworkPermissionPanelFallback's malformed-payload test is red on main 6d7177be independently of this branch (pre-existing; parseQuestions evolution made its expectation stale) — recorded for a separate ruling, not touched here.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}