- Skill 2 (Intent Detail Author) — sequential slot collection (blocking). Any intent with ≥2 caller-collectable slots now requires its
validationPromptto ask for them one at a time — one slot per numbered step inCollectionOrder, plus an IRON RULE forbidding bundled requests and requiring the bot to wait for each answer. Skill 2 will not mark the intent[detailed]until both hold. Slots populated from an upstream RT=2 response don't count toward the threshold; a single logical slot (e.g.full address) is one turn. Wired into §4.2 verify list, the Pattern V2 template, and the style-guide checklist. - Skill 2 (Intent Detail Author) — RT=2 live API verification (hard block, no waiver). Before authoring an RT=2
announcement, Skill 2 now curls the real endpoint with a user-supplied sample request. The intent cannot reach[detailed]unless the call returns HTTP 2xx AND every dotted path declared in 4.5.4 / referenced in theannouncementis present in the live response JSON. Any failure (non-2xx, unreachable, unknown URL, missing path) blocks — there is no override. A redacted verification record (masked request, status, confirmed paths — never raw secrets/PII) is written to the new spec section 7.6. This replaces the prior "v1 trusts the declared shape" posture. - Skill 1 (Spec Designer): the §4.5.4 declared response shape is now documented as provisional pending Skill 2's live verification (was "v1 trusts the declared shape").
- Skill 3 (JSON Assembler): new pre-flight Gate C — refuses to assemble any RT=2 intent lacking a section 7.6 verification record (backstop against hand-edited specs). Pre-flight is now three gates.
- New spec skeleton section 7.6 (RT=2 API verification log).
docs/skills/voicenter-bot-{intent-detail-author,spec-designer,json-assembler}/README.mdmirrors updated.
- voicenter-bot-builder 1.9.1 → 1.10.0, marketplace metadata 1.9.1 → 1.10.0. voicenter-mcp and voicenter-api stay at 1.1.7 — neither plugin changed.
- Skill 1 (Spec Designer): the Phase 1 Identifier is no longer prompted. It is now silently auto-derived from the Bot Name — ASCII names are snake_cased, non-ASCII (e.g. Hebrew) names are transliterated to Latin then snake_cased (
יובל→yuval). Removes oneAskUserQuestionfrom the interview. The separate Phase 3 intent-name reject-and-suggest prompt is unaffected. - Skill 3 (JSON Assembler) — token-budget gate raised. Check 8 (Compass rule 1) now goes advisory at 1,500–4,999 tok and blocking at ≥ 5,000 tok, with forced decomposition at ≥ 6,000 tok (was: advisory 1,500–2,499, blocking ≥ 2,500, decompose ≥ 4,000). This is a deliberate operator override: the Compass-measured degradation point (~2,500 tok) is unchanged and still surfaced as an advisory — only the pipeline's block threshold is relaxed to give authors working room.
voice-prompt-doctrine.md§4 now separates the Compass measurement column from the Skill 3 enforcement column so the doc stays internally honest about the divergence.
- voicenter-bot-builder 1.9.0 → 1.9.1, marketplace metadata 1.9.0 → 1.9.1. voicenter-mcp and voicenter-api stay at 1.1.7 — neither plugin changed (versions are bumped per-plugin for what actually changed, not in blanket lockstep).
- All 18 skills: added a language-mirroring directive — each skill now replies in the user's language (Hebrew→Hebrew, English→English) and follows mid-conversation switches. Affects conversational prose, questions, and
AskUserQuestionlabels only; emitted artifacts (identifiers, JSON keys, BCP-47 codes, API field names) are unchanged. The generated bot's runtime language behavior and the code-switch guardrail are not affected. - 4 interactive skills (voicenter-mcp
setup, Skill 1 Spec Designer, Skill 2 Intent Detail Author, Skill 3 JSON Assembler): added a bilingual opening (Hebrew + English greeting on first contact). Skills 2, 3 andsetupalso gained a one-question-per-turn interview directive (singleAskUserQuestionper message, never batch). Skill 1's existing §2.4 iron rule was upgraded with the same one-question-per-turn teeth rather than duplicated.
- voicenter-mcp 1.1.6 → 1.1.7, voicenter-api 1.1.6 → 1.1.7, voicenter-bot-builder 1.8.0 → 1.9.0, marketplace metadata 1.8.0 → 1.9.0.
- Skill 1 (Spec Designer): new section-4
**Bot-intent role:**field (entry/global/chained, defaultchained). Approach-B role classification in close-out (propose from §2.4 opening targets + always-available intents, confirm in one batch, write explicit field). Section 6.2/6.4 now include auto global fan-out edges. Caller-silence (section 3) gains a structuralsilence failover intent(Skill 3 emits it assilence_behaviour.intent), defaulting to the transfer-to-human global;silence_ending_sentencethen defaults to a transfer-to-representative line. Check 7 noted as auto-satisfied by fan-out when a global exists. - Skill 3 (JSON Assembler): parses the role field (§3.1).
botIntents[]is now a selective registry — onlyentry(BotIntentTypeID 1) andglobal(2) intents; chained intents omitted (§4.3.3). 0-basedSortOrderover the subset. Global fan-out (§4.3.4): an edge from every non-global intent to each global, deduped. §5 6.2 regeneration is fan-out-aware. Four new blocking cross-reference checks 11–14 (global-is-type-2, fan-out completeness, no-chained-in-botIntents, start-point-exists); the pass is now fourteen checks. - Silence-failover structural
intent(design D8 revised). A production export (operator/משרד-התחבורה bot) showed the bot-levelsilence_behaviourcarries a structuralintentfailover field (mirroringapi_silence_behaviour.intent) — the initial "authored sentence, no structural field" decision was wrong. Skill 3 §4.2.5 now emitssilence_behaviour.intent(resolvedIntentId, first key, default transfer-to-human global,-999sentinel if unknown), Doc 1 §6.B.3 documents it, and the invariant guard asserts bothsilence_behaviour.intentand the RT=2api_silence_behaviour.intent/apiSilenceRelationspairing.
- Doc 1 (
voicenter-bot-json-schema-audit-v1.md): §8.2 + G-10 rewritten —BotIntentTypeIDis a discriminator (1=entry, 2=global);botIntents[]is a selective subset. - Doc 2 (
voicenter-bot-skills-architecture-v1.md): botIntents emission note corrected. validation-report.md§3.3 marked RESOLVED with the Brimag/Noa production evidence.docs/skills/voicenter-bot-{spec-designer,json-assembler}/README.mdmirrors updated.
- Golden outputs
bot-ananit-2026-06-01.jsonandbot-noa-2026-06-01.json(hand-applied v1.8.0; Noa Hebrew re-authored from a lossy source — see banners). validate-botintent-roles-v18.pyinvariant guard.
marketplace.jsonmetadata.version:1.7.0→1.8.0voicenter-bot-builderplugin:1.7.0→1.8.0voicenter-mcpandvoicenter-apiplugins: unchanged at1.1.6
- Skill 1 — Phase 1 interview: AI model config is no longer prompted. The interview previously asked the user to pick an AI model config via
AskUserQuestion. It now silently defaults to the canonical model — Gemini Live (Voice driven 3.1) (AIModelConfigID=139,AIModelTypeId=18) — and writes it to spec section 1 without asking. A different model is used only if the user volunteers one (by catalog name or rawAIModelConfigID+AIModelTypeId). The<UNKNOWN: AI Model Config>deferral path is unchanged. - Skill 1 — Phase 1 interview: explicit agent-gender question added, with gender-filtered voice suggestions. Phase 1 now asks whether the agent should sound Female or Male (header "Agent voice") before the voice-name prompt, and offers only voices matching the chosen gender for the active model family. The skill is instructed to never infer gender from the bot name (unisex names previously caused male-only suggestions like
Puck/Orus). Written to spec section 1 as**Agent Gender:**— selection-aid metadata only; not emitted to the JSON.model-catalog.md: added aGendercolumn to both the Gemini and OpenAI voice tables (Gemini Female → Kore/Aoede/Leda/Zephyr, Male → Puck/Charon/Fenrir/Orus; OpenAI labelled per voice,alloy= Neutral).spec-skeleton.md§1: added theAgent Genderfield afterVoice Name.
- Skill 2 — Check 11 (RT=2
api_silence_behaviourcompleteness) now enforces the fallback intent. Check 11 previously claimed "six fields" but enumerated only the fivesilence_*fields, never the failover. It now requires all six components (3 language fields authored by Skill 2 + 3 structural fields owned by Skill 1:silence_duration,silence_loops, and the fallback intent) and halts/routes to Skill 1 patch mode if the fallback intent is missing or unresolved in section 4. - Skill 3 — RT=2
api_silence_behaviour.intentfailover now explicitly specified and enforced. The inline failover pointer (Configuration.api_silence_behaviour.intent= resolved fallbackIntentId) was never spelled out — Skill 3 only said "the six fields embedded inline," so the failover could be dropped or emitted as a string. Fixes:- New §4.4.1 documents the exact six-key
api_silence_behaviourobject;intent(resolved fallbackIntentId, equal toapiSilenceRelations[].ApiSilenceIntentID) is marked mandatory — never omit, never emit as a string;-999sentinel if the fallback intent is<UNKNOWN>. - Cross-reference Check 5 is now blocking on the inline
intentbeing a present, non-null integer equal toApiSilenceIntentID. - Cross-reference Check 6 deep-equality description now names all six
api_silence_behaviourkeys (includingintent).
- New §4.4.1 documents the exact six-key
- All four SKILL.md changes above mirrored into the paired
docs/skills/voicenter-bot-*/README.md. - voice-agent-llm v1.0.3 runtime behavior documented in all three bot-builder skills. No schema, validation rule, or plugin-version change — Skill 2's Check 10 still requires authored
announcementfor RT=2.- Empty
announcement(or legacyapiResponseAnnouncement) at runtime is now substituted by the service with the sentinel[START THE CONVERSATION]as an LLM instruction — bot opens from persona; the literal string is not spoken aloud. Documented as a production safety net, not an authoring relaxation. - Voice-active text fields (
validationPrompt,announcement,fail_output,function_output, post-executionintentInstructions) are now sanitized server-side before TTS. The existing Compass rule 8 authoring rule (write plain conversational prose; no Markdown/URLs in these fields) still applies. - Spec Designer SKILL.md: three remaining references to
apiResponseAnnouncementupdated toannouncement(wasapiResponseAnnouncementpre-v1.5.0).
- Empty
- Internal voice-agent service traceability (informational only, no skill change): Mastra library bumped 1.04 → 1.36.0;
mastra-voicenterbumped 2.0.3 → 2.1.0.
marketplace.jsonmetadata.version:1.6.0→1.7.0voicenter-bot-builderplugin:1.6.0→1.7.0voicenter-mcpandvoicenter-apiplugins: unchanged at1.1.6
Note: this release was developed under the working version name "v1.5.0" (visible in inline references throughout the changelog entry below and in the SKILL.md / docs README v1.5.0 correction notes). The release was renumbered to 1.6.0 to avoid collision with the prior 1.5.0 Compass doctrine release (May 14). Skill 3 SKILL.md and docs may continue to use "v1.5.0" as the working label for these changes; the platform-facing release version is 1.6.0.
- BREAKING (wire format): Skill 3 emission restructured to match the production Voicenter export shape for Gemini 3.1 Voice driven bots. Bots emitted by pre-1.5.0 Skill 3 will import successfully but won't round-trip cleanly through the platform's export UI. Re-emit any in-progress bots after upgrading.
- Skill 1 — Phase 1 interview: added three new bot-identity questions:
Created by,Max call duration,Record agent calls. - Skill 1 — spec-skeleton.md §4: added optional
Max turns/Max turns sentenceper-intent fields. - Skill 2 — per-intent authoring: field renamed and shape changes for
apiResponseAnnouncement(→announcement),function_output(→ object{ "default": ... }),response_success(→ object{ "instructions": ... }). - Skill 3 — emission shape (largest change set):
- Top-level wrapper field order:
intentListmoves to position #4. AiModelConfig(top-level catalog reference) restructured: new fields (ApiKey,AIModel,IsActive,AccountId,ModifiedBy,CreatedDate,ModifiedDate, nestedAIModelConfigcarrying only the model string). Removed:Description,BaseUrl,Type,AIModelTypeId, fullcreatedpayload (lives in the version-level only).ActiveVersionInfo.AIModelConfig(version-level runtime config): addedmax_duration,recordAgentCalls. Removed:tools: [],instructions: "".createdpayload reduced to lean shape:realtimeInputConfig.automaticActivityDetection.disabled: "true"+ voice config only (version-level); model string only (top-level catalog reference). Dropped:temperature,topP,topK,responseModalities,proactivity,thinkingConfig,systemInstruction,tools.intents[]entry: 17-field skeleton (intent-rootIsActiveandAccountIdrestored from production observation, removed incorrectly in the v1.4.1 schema correction).IsSilenceIntentnow integer 0/1.IntentSourcesshape includesSourceNameandIntentSourceID(was[{ SourceID: 1 }]). OptionalIntentConfig.max_turns/max_turns_sentenceper-intent.IntentParameters[]entry: audit fields added (Schema: null,CreatedBy,ModifiedBy: " ",CreatedDate,ModifiedDate). Type fields now integers (IsRequired: 0/1).OptionList: nullfor non-ENUM (was[]).DefaultValue: ""for unset strings (wasnull).ParameterTypefully nested with frozen type-catalog metadata.botIntents[]:BotId/IntentIdlowercase-d casing.DTMFList: []always.BotVersionIdadded.SortOrder0-based.ConditionGroupListpopulated by default.intentRelations[]:Order0-based.IntentRelatedIDis a unique row PK (placeholder range-2000+), no longer aNextIntentIDmirror.ConditionGroupListpopulated by default.intentCategories[]: noBotID. AddedIsActive,AccountId,Description.PriorityId: 1(was2).apiSilenceRelations[].Configuration: full mirror of parentIntentResponces.Configuration(was just the sixsilence_*fields).- RT=2
Configuration:announcement(wasapiResponseAnnouncement).function_output→ object{ "default": ... }.response_success→ object{ "instructions": ... }.IntentLoadingAnnouncement(capital I) dropped. - RT=3
Configuration:response_success→ object.
- Top-level wrapper field order:
- Skill 3 — §6.2 cross-reference checks: Check 6 now validates full Configuration deep equality between RT=2 intents and their
apiSilenceRelations[]Configuration (was justsilence_*six-field). Check 10 (Compass rule 12 model-config doctrine) inverted: instead of positively asserting present fields, now catches regressions to dropped fields undergenerationConfig. - Skill 3 — Appendix A: Quirk row 2 (the
intentLoadingAnnouncement/IntentLoadingAnnouncementcasing-bug pair) marked REMOVED in v1.5.0. Quirks 16–19 added (nestedAIModelConfig,recordAgentCallsas string,realtimeInputConfig.automaticActivityDetection.disabledas string,IntentParameters[].ModifiedBysingle-space literal). - Skill 3 — new ID placeholder ranges:
IntentRelatedID(-2000+),IntentConditionGroupID(-3000+),IntentSourceID(-4000+).
references/test-artifacts/test-prod-bot-transport-planner.json: production export of the user-supplied "סוכן תכנון מסלול - משרד התחבורה" v0.0.38 Gemini 3.1 Voice driven bot, serving as the third reference fixture and the ground-truth round-trip target for v1.5.0+ emission.
references/docs/voicenter-bot-json-schema-audit-v1.md: ~12 subsections rewritten (§4, §5, §6.A, §6.B, §6.B.2, §8.2, §8.3, §8.4, §8.6, §9.0, §9.1, §10, §11.2, §11.3, §11.5, §16). The doc remains the canonical wire-format contract; this update aligns it to the production Gemini 3.1 Voice driven export.docs/skills/voicenter-bot-*/README.md: all three plugin docs READMEs mirror the corresponding SKILL.md changes.
references/test-artifacts/test-emitted-json-yuval.jsonandtest-emitted-json-refua.jsonregenerated to v1.5.0 shape. Placeholder IDs preserved.
marketplace.jsonmetadata.version:1.5.0→1.6.0(renumbered to avoid collision with the May 14 1.5.0 Compass doctrine release)voicenter-bot-builderplugin:1.3.0→1.6.0(production wire-format alignment)voicenter-mcpandvoicenter-apiplugins: unchanged at1.1.6
- Compass doctrine integration in
voicenter-bot-builder. New shared referenceplugins/voicenter-bot-builder/references/voice-prompt-doctrine.mddistilled from the Gemini Live 3.1 voice agent engineering guideline. The reference catalogs 13 enforceable rules and is loaded by all three skills.- Skill 1 (Agent Spec Designer) gains 5 new self-validation checks (11–15) covering rules 3 (English operational), 4 (intent description in English), 5 (recency-slot language-lock guardrail), 6 (contradictory pacing/length), 7 (generic-policy boilerplate), plus a rule-11 mirror on rewritten fields. New Appendix D documents the mapping.
- Skill 2 (Intent Detail Author) gains 4 new per-intent iron rules covering rules 8 (TTS-safe formatting; blocking on markdown/URLs), 9 (date math in prompt), 10 (few-shot example cap), 11 (Hebrew-utterance isolation; blocking). The
conversation-routines-style-guide.mdgets a TTS-safety addendum. - Skill 3 (JSON Assembler) gains 3 new cross-reference checks (8, 9, 10) plus a DOCTRINE SENTINELS banner section (rule 13). Check 8 (token budget) is advisory at 1,500–2,499 tok and blocking at ≥ 2,500. Check 10 (model-config doctrine) is blocking on any mismatch. All three are gated on
AiModelConfig.created.model = "models/gemini-3.1-flash-live-preview". - Token-counting uses a char-based estimate (Latin 1/4 tok, Hebrew/Arabic/CJK 1/1.5 tok) — ±15% accuracy, sufficient for the doctrine thresholds.
- Rules 1, 2, 12 apply only when
AIModelConfigID=139(Gemini Live 3.1). Rules 3, 4, 5, 6, 8, 10, 11 apply to any active voice channel. Rules 7, 9, 13 apply universally. - Non-goal: this release does not retroactively fix existing bot artifacts (e.g.,
bot-noa-2026-05-12.json). To apply the doctrine to an existing bot, re-run Skill 1 → 2 → 3 on its spec. - Non-goal: platform-side concerns the Compass flags as out-of-prompt (PII redaction, prompt-injection classifier, rate limiting, recording consent) are not enforced by the bot-builder. The doctrine reference §3 notes which concerns belong to which plane.
marketplace.jsonmetadata:1.4.2→1.5.0voicenter-bot-builderplugin:1.2.2→1.3.0(Compass doctrine integration across all three skills)voicenter-mcpplugin:1.1.6(unchanged)voicenter-apiplugin:1.1.6(unchanged)
Cache-refresh bump across all three plugins to force /reload-plugins to resync SKILL.md content on existing installs. No behavior or surface-area change since 1.4.1.
marketplace.jsonmetadata:1.4.1→1.4.2voicenter-mcpplugin:1.1.5→1.1.6(no content change; bumped for cache refresh)voicenter-apiplugin:1.1.5→1.1.6(no content change; bumped for cache refresh)voicenter-bot-builderplugin:1.2.1→1.2.2(no content change; bumped for cache refresh)
Fixed (voicenter-bot-builder 1.2.0 → 1.2.1) — Skill 3 IntentResponces.IsActive structural correction
Skill 3 (voicenter-bot-json-assembler) now emits the per-intent active flag inside IntentResponces (as the middle key between ResponseTypeId and Configuration) and no longer emits IsActive or IsDeleted at the intent root. The corrected shape matches the platform-validated bot JSON (docs/json-bag/good.json intent -10). The ImportBotFromJSON procedure reads IntentResponces.IsActive for the per-intent active flag; the prior intent-root location was silently ignored, so the bot's runtime active state was unchanged by the fix — this is a wire-format correctness fix, not a behavior change.
- SKILL.md §4.3.1 — removed the two intent-root rows (
IsActive: 1,IsDeleted: 0); added an inline note pointing readers to §4.4 for the corrected location. - SKILL.md §4.4 — added
IsActive: 1row to all four RT-specific tables (RT=1, RT=2, RT=3, RT=4) immediately below theResponseTypeIdrow. Added an invariant-shape header note documenting that everyIntentResponceshas the same three-key outer shape regardless of RT. - SKILL.md Appendix A — added quirk #15 (
IntentResponces.IsActive: 1emission rule + anti-quirk note explicitly forbidding intent-rootIsActive/IsDeleted). Preamble updated from "14 quirks" to "15 quirks". Skill 3's §4.5 quirk-preservation verification pass now covers the new quirk. - Companion docs (
docs/skills/voicenter-bot-json-assembler/README.md) — per-RT keys preamble and the quirk-preservation walk paragraph mirror the SKILL.md changes. (Drive-by fix:IntentScripts: {}corrected toIntentScripts: []to match the v1.2.1 SKILL.md Appendix A quirk #8 amendment.) - Schema audit (
references/docs/voicenter-bot-json-schema-audit-v1.md) — §9.0 renamed "16-Field Skeleton" → "14-Field Skeleton" (intent-rootIsActive/IsDeletedrows removed); §9.2IntentResponcestree updated from two fields to three withIsActivebetweenResponseTypeIdandConfiguration. Inline "Schema correction (2026-05-11)" addenda explain the rationale.
references/test-artifacts/test-emitted-json-{yuval,refua}.json predate this fix and may show the pre-v1.4.1 shape. Regeneration is deferred — these files are reference samples, not consumed by any runtime. The next genuine Skill 3 invocation against either spec will produce the corrected shape.
marketplace.jsonmetadata:1.4.0→1.4.1voicenter-mcpplugin:1.1.4→1.1.5(no content change; bumped for cache refresh)voicenter-apiplugin:1.1.4→1.1.5(no content change; bumped for cache refresh)voicenter-bot-builderplugin:1.2.0→1.2.1(Skill 3 wire-format correction)
Skill 1 now generates a Mermaid flowchart TD of the bot's intent graph as the final structural artifact, embedded in the spec under new section 6.6, and offers a refinement loop before final emission. Same diagram regenerates after every patch, so the user can see the structural impact visually before finalizing.
- Mermaid diagram (spec section 6.6) — Skill 1 §3.6.1. One node per intent in section 4 (label:
<identifier><br/>RT=<n> · slots: <count>, plus⚑if hard-intent). Node shapes encode response type: stadium for RT=1 transfer, rounded rectangle for RT=2 API, default rectangle for RT=3 conversational, subroutine shape for RT=4 outbound dial. One labeled edge per transition (success/fallback/escalation). If section 4.7 (advanced overrides) declaresdtmf_list:for a transition, digits append to the edge label. Skill 3 ignores section 6.6 — it's for human comprehension only, not the import contract. - Refinement loop at greenfield close-out — Skill 1 §3.6 step 5. After section 6 + 6.6 are generated and soft-cap warnings surface, Skill 1 renders the diagram and prompts via
AskUserQuestion(header: "Diagram review", 4 options: "Looks good — finalize (Recommended)" / "Adjust an intent" / "Adjust a transition" / "Adjust persona / opening behavior"). Any "Adjust" pick routes back to the relevant phase, applies the change, regenerates section 6 (including 6.6), re-runs the self-validation checklist, and re-prompts. Capped at 5 iterations to prevent endless cycles — beyond 5, Skill 1 logs the iteration count to section 7.3 and proceeds. - Patch-mode regeneration — Skill 1 §4.6 + §4.7. Section 6.6 regenerates after every applied patch, alongside the cascade summary, and the same refinement loop is offered before final emission.
- Skill 1 output contract updated to list section 6.6 as a greenfield/patch artifact (and to clarify it's not consumed by Skill 3 or the import proc).
- Docs lockstep:
docs/skills/voicenter-bot-spec-designer/README.mdmirrors the diagram + refinement-loop additions, with a new "Intent flow diagram + refinement loop" section under Output contract.
marketplace.jsonmetadata:1.3.0→1.4.0voicenter-mcpplugin:1.1.3→1.1.4(no content change; bumped for cache refresh)voicenter-apiplugin:1.1.3→1.1.4(no content change; bumped for cache refresh)voicenter-bot-builderplugin:1.1.0→1.2.0(Skill 1 diagram + refinement loop)
Skill 1 (voicenter-bot-spec-designer) now uses live MCP lookup for Voicenter platform resources and AskUserQuestion (interactive menu inputs) for every closed-set choice in the interview, instead of free-text capture. Skill 1 also gains an opt-in path for the two runtime-supported features (ConditionGroupList, DTMFList) that were previously inaccessible from the build pipeline.
- Live resource lookup via
voicenter-mcp.list_resources(recommended default). Customer Account ID (Phase 1) and RT=1 Layer ID (Phase 4) are now fetched live withentityFilter: ["Accounts"]/["Layers"]and presented as id+name tables, then prompted viaAskUserQuestion. New SKILL.md §2.4.A documents a 3-tier fallback that is never silently skipped: (1) plugin not installed → offer install + auth viaAskUserQuestion; (2) plugin installed but unauthenticated → offer authenticate viaAskUserQuestion; (3) user declines or retry fails → fall back to text-only mode and<UNKNOWN: …>markers, logged once to spec section 7.3 with the reason; the user is not re-prompted in the same session. AskUserQuestionfor every closed-set choice (SKILL.md §2.4.B). New iron rule: if the user can answer with one of a fixed set of strings, route through interactive inputs. Covers runtime/mode detection, channel scope, voice/model catalog picks, caller-silence yes/no, identifier ASCII confirmation, every Phase 2 "Accept draft / Edit" prompt, Deep Research pause/skip, Response Type (RT=1/2/3/4), per-slotParameterTypeId+IsRequired, RT=2 Method (POST/GET) + fallback intent reference (from existing intent set), RT=4 dial source +record+ rarity-warning confirmation, account / layer selection from live MCP lists, patch-mode cascade confirm, every self-validation iron-rule re-prompt, and the new MCP install/auth/skip prompts. Free-text capture is reserved for genuinely open-ended fields (names, descriptions, free-form text content, integer/numeric values).- Optional advanced features (default: skip — not required) — new SKILL.md §3.5.5 adds an opt-in capture path for
ConditionGroupList(conditional branching onBotIntent/IntentRelated) andDTMFList(DTMF keypad routing). After Phase 4 captures the structural intent set, Skill 1 prompts once viaAskUserQuestionwith "Skip — accept defaults (Recommended)" as the default. Skip path writes nothing; Skill 3 falls back to existing safe defaults (ConditionGroupList: [],DTMFListomitted), and theImportBotFromJSONproc skips both arrays cleanly via NULL-guards inCreateConditionGroupsand theIntentRelatedDTMFinsert. Opt-in path captures into a new freeform spec section 4.7 Advanced overrides; Skill 3 (§4.3.3 / §4.3.4) liftscondition_groups:anddtmf_list:blocks verbatim into the correspondingbotIntents[]/intentRelations[]entries. Skill 1 does not validate §4.7 contents — pass-through to Skill 3. - RT=3 schema cross-reference clarification — Skill 1 §3.4.3 RT prompt now includes a parenthetical noting the DB seed name for
ResponseTypeId=3is "Message" / "Update Bot Configuration" but the operational use is conversational data-collection. Cosmetic only; no behavior change.
- Skill 1 anti-list updated: live MCP lookup is now in scope (was previously listed as out-of-scope with the model catalog);
ConditionGroupList/DTMFListare documented as opt-in only via §4.7. - Skill 3 §4.3.3 + §4.3.4 (
botIntents[]andintentRelations[]):ConditionGroupListandDTMFListrows now read from spec §4.7 if present, fall back to the existing default-skip behavior if absent. - Docs lockstep:
docs/skills/voicenter-bot-spec-designer/README.mdanddocs/skills/voicenter-bot-json-assembler/README.mdupdated with the new tool conventions, the §3.5.5 opt-in summary, and the §4.7 pass-through behavior.
marketplace.jsonmetadata:1.2.1→1.3.0voicenter-mcpplugin:1.1.2→1.1.3(no content change; bumped for cache refresh)voicenter-apiplugin:1.1.2→1.1.3(no content change; bumped for cache refresh)voicenter-bot-builderplugin:1.0.1→1.1.0(Skill 1 interactive UX + optional §3.5.5; Skill 3 §4.7 pass-through)
Fixed (voicenter-bot-builder 1.0.0 → 1.0.1) — Skill 3 alignment with ImportBotFromJSON stored procedure
The wire-format JSON Skill 3 emits is now consumable by the platform's ImportBotFromJSON MySQL procedure without manual editing. Five hard-blocking and one fragile gap closed.
- G1 —
AiModelConfig.AccountId: 0added to top-levelAiModelConfig. Routes the procedure to its "reuse existing default config" branch instead of falling through to an INSERT that fails onAIModelandAIModelConfigNOT NULL columns. (Skill 3 §4.2.3.) - G2 —
intentCategories[].PriorityId: 2(Medium) emitted explicitly. Was previously absent; column isTINYINT NOT NULLand the proc passes the extracted value, so omission caused a NULL INSERT failure. (Skill 3 §4.3.5.) - G3 —
botIntents[].IntentId/BotIntentIdlowercased(was capitalID). MySQL JSON paths are case-sensitive; the proc reads$.IntentIdand the prior emission resolved NULL, breaking the BotIntent INSERT. CapitalIDis preserved onintentRelations[](matches the proc's read there) — deliberate asymmetry. (Skill 3 §4.3.3.) - G4 —
botIntents[].SortOrderadded (1-based ordinal). Required NOT NULL column previously omitted. (Skill 3 §4.3.3.) - G5 —
intentRelations[]deduplication by(OriginIntentID, NextIntentID). The DB unique key forbids duplicates; previously, a spec listing the same target twice (e.g., success path AND fallback both →transfer_to_human) emitted two rows and broke the second INSERT. Skill 3 now keeps the lowest-Ordersurvivor and notes the collapse in the banner. (Skill 3 §4.3.4.) - G6 —
IntentScripts: [](was{}). The proc iterates withJSON_LENGTH+ integer indexing; the object form would index[0]on a populated{}and break. Doc 1 §16 quirk #8 amended. (Skill 3 §4.3.1, Appendix A row 8.) - G7 —
IntentSourcesper intent, derived from spec section 1Channels Activemapped through the DBSourcesstatic table (1=VOICE, 2=CHAT, 3=WEB). (Skill 3 §4.3.1.)
model-catalog.mdpopulated with seven real defaultAIModelConfigrows (AccountId=0) drawn fromdatabase/Tables/StaticData/AIModelConfig.Data.sql: Gemini Live (139/18), Gemini 2.5 (52/10), Gemini Voice Driven (136/16), Gemini 3.1 LLM Driven (142/21), GPT-4 Realtime (1/1), GPT-5 Realtime (91/13), GPT Realtime Mini (132/15). Replaces the prior<TODO>placeholders.- Voice catalog expanded from the 2-row Puck/Orus list to the full provider inventories — 10 OpenAI voices (Alloy/Ash/Ballad/Coral/Echo/Sage/Shimmer/Verse/Cedar/Marin) and 8 Gemini voices (Puck/Charon/Kore/Fenrir/Aoede/Leda/Orus/Zephyr).
- Skill 3 Appendix D — Static reference data added as the single source of truth for every static integer ID Skill 3 emits (BotStatusId, BotVersionStatusId, BotIntentTypeID, IntentCategoryId/PriorityId, ResponseTypeId, SourceID, ParameterTypeId, IntentRelatedTypeID, IntentScriptType, default AIModelConfig rows). Mirrors
database/Tables/StaticData/*.Data.sql; must be re-verified when those files change.
marketplace.jsonmetadata:1.2.0→1.2.1voicenter-mcpplugin:1.1.1→1.1.2(no content change; bumped for cache refresh)voicenter-apiplugin:1.1.1→1.1.2(no content change; bumped for cache refresh)voicenter-bot-builderplugin:1.0.0→1.0.1(Skill 3 + model-catalog content changes)
voicenter-bot-builder— new third plugin (v1.0.0) that ships a 3-skill bot-authoring pipeline:voicenter-bot-spec-designer(Skill 1) — interview-driven structural design; producesagent-spec.mdvoicenter-bot-intent-detail-author(Skill 2) — per-intent language content (Conversation Routines style)voicenter-bot-json-assembler(Skill 3) — mechanical projection to Bot JSON wire format with §15.4 cross-reference pass and fail-loud sentinels
docs/plugins/voicenter-bot-builder.mdand per-skill long-form references underdocs/skills/voicenter-bot-*/- "Bot authoring (build-time)" entry in
docs/architecture.mdtaxonomy + dedicated build-time pipeline section
- Patch 1 — Identifier field. Added
**Identifier:**to spec section 1 so Skill 3 produces useful filenames for non-ASCII bot names. Pre-fix: Hebrew bot names producedbot-bot-<date>.json. Post-fix:bot-yuval-<date>.json/bot-refua-<date>.json. - Patch 2 — RT-specific bold sub-labels. spec-skeleton.md formalized section 4 RT-specific sub-labels (
**URL:**,**Method:**,**Headers:**,**Body:**,**API silence behavior:**,**Layer:**); Skill 3 §3.1 strict-template parser enumeration extended; Skill 3 §3.3 deviation table added. - RT=4 production-shape rewrite. spec-skeleton.md, Skill 1 §3.5.1, Skill 3 §3.1, and Skill 3 §4.4 RT=4 emission table updated to match real production Configuration shape — dual modes (parameter / static), three phone slots,
selectdial_option,response_success.instructions, optional announcement / loading announcement / post-execution instructions.
- Bump to force plugin cache refresh — 1.1.0 update was not re-syncing SKILL.md files
- Skills now register correctly on
/reload-plugins(was reporting 0 skills loaded)- Added explicit
name:field to all 15 SKILL.md frontmatter entries - Removed redundant
"skills": "./skills/"from plugin.json (default discovery handles it)
- Added explicit
voicenter-mcpMCP server config now includes required"type": "http"field- Optimized all 14 SKILL.md files for clearer Claude Code invocation
- Conformed
plugin.jsonfiles to the official Claude Code plugin manifest schema - Removed unsupported
iconfield from plugin and marketplace configs - Removed nested V2 marketplace duplicate
LICENSEfile (MIT)CHANGELOG.md.gitignorefor local Claude settings
- Initial marketplace release with 2 plugins
- voicenter-mcp — Live API access via OAuth MCP server at mcp01.voicenter.co
- voicenter-api — 14 API integration skills:
- Push APIs: VoiceBot, Pop-Up Screen, CDR Notification, External Layer
- Outgoing APIs: Click2Call, Call Log, Blacklist, Mute Recording, Extension List, Real-Time, Productive Dialer, Login/Logout, Lead Tracker, Active Calls