From 582d198b38978ca4e2e2a7c7c5c6f0185ca16cca Mon Sep 17 00:00:00 2001 From: Njoyim Peguy Date: Sun, 23 Aug 2026 18:04:03 +0200 Subject: [PATCH 1/3] Update crucible-code schema for 0.18.0 (#6234) Co-authored-by: NjoyimPeguy --- .../not-a-scroll-speed.json | 3 + src/schemas/json/crucible-code-schema.json | 160 +++++++++++------- src/test/crucible-code-schema/config.json | 3 +- 3 files changed, 103 insertions(+), 63 deletions(-) create mode 100644 src/negative_test/crucible-code-schema/not-a-scroll-speed.json diff --git a/src/negative_test/crucible-code-schema/not-a-scroll-speed.json b/src/negative_test/crucible-code-schema/not-a-scroll-speed.json new file mode 100644 index 00000000000..69aec0fc1a6 --- /dev/null +++ b/src/negative_test/crucible-code-schema/not-a-scroll-speed.json @@ -0,0 +1,3 @@ +{ + "env": { "CRUCIBLE_CODE_MOUSE_SCROLL_SPEED": "31" } +} diff --git a/src/schemas/json/crucible-code-schema.json b/src/schemas/json/crucible-code-schema.json index 6b698f3282f..f2d6b1e88f0 100644 --- a/src/schemas/json/crucible-code-schema.json +++ b/src/schemas/json/crucible-code-schema.json @@ -30,6 +30,11 @@ "minimum": 0, "type": "integer" }, + "recap": { + "description": "Maximum tokens a structured compaction recap may produce; ordinary recaps stop earlier", + "minimum": 0, + "type": "integer" + }, "reserve": { "description": "Tokens to keep free for the next answer and the tools it calls, instead of the room crucible works out from the model", "minimum": 0, @@ -41,6 +46,7 @@ "type": "integer" }, "when": { + "default": "full", "description": "Whether a full window is answered by compacting the session, or by letting the turn fail", "enum": ["full", "never"], "type": "string" @@ -49,21 +55,34 @@ "type": "object" }, "env": { - "additionalProperties": false, - "description": "Environment variables for the commands crucible runs. A file under the working directory may set only crucible's own CRUCIBLE_CODE_ names", - "patternProperties": { - "^[^$]": { - "type": "string" - } + "additionalProperties": { + "type": "string" }, + "description": "Environment variables for the commands crucible runs. A file under the working directory may set only crucible's own CRUCIBLE_CODE_ names", "properties": { "$schema": { "type": "string" }, "$comment": { "type": "string" + }, + "CRUCIBLE_CODE_MOUSE_SCROLL_SPEED": { + "default": "6", + "description": "How many rows of the transcript one notch of the wheel moves", + "pattern": "^\\+?0*(?:1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30)$", + "type": "string" } }, + "propertyNames": { + "anyOf": [ + { + "pattern": "^[^$]" + }, + { + "enum": ["$schema", "$comment"] + } + ] + }, "type": "object" }, "input": { @@ -77,6 +96,7 @@ "type": "string" }, "send": { + "default": "enter", "description": "Which press sends a prompt: enter sends and Shift+Enter, Alt+Enter or Ctrl+J opens a line; altEnter swaps the two, for a terminal that keeps Enter for itself", "enum": ["enter", "altEnter"], "type": "string" @@ -95,26 +115,25 @@ "type": "string" }, "color": { + "default": "auto", "description": "Whether to write colour: auto follows the terminal and NO_COLOR, always and never override it", "enum": ["auto", "always", "never"], "type": "string" }, "glyphs": { + "default": "unicode", "description": "Which characters crucible draws with: unicode for box drawing, ascii for a font that lacks it", "enum": ["unicode", "ascii"], "type": "string" }, - "mouse": { - "description": "off leaves the mouse to the terminal, so the wheel scrolls it; click lets you place the cursor in the prompt and open a result that was cut short, and the wheel stops scrolling", - "enum": ["off", "click"], - "type": "string" - }, "syntaxTheme": { + "default": "Monokai Extended", "description": "Which theme fenced code is drawn in — a name from /theme, such as Monokai Extended, GitHub, Dracula or Nord", "examples": ["Monokai Extended", "GitHub"], "type": "string" }, "theme": { + "default": "auto", "description": "Which colours crucible draws with: auto follows the terminal's own background, ansi spends only the sixteen it already has", "enum": [ "auto", @@ -127,6 +146,7 @@ "type": "string" }, "toolDetail": { + "default": "compact", "description": "How much of a tool call and its result one line shows", "enum": ["compact", "full"], "type": "string" @@ -184,6 +204,7 @@ "uniqueItems": true }, "mode": { + "default": "ask", "description": "What happens to a call no rule mentions: ask about every change and command, allow changes to files, or allow everything. Read only from the configuration file in your home directory", "enum": ["ask", "allowEdits", "fullAccess"], "type": "string" @@ -196,64 +217,68 @@ "type": "string" }, "providers": { - "additionalProperties": false, - "description": "Per-provider defaults, keyed by provider name", - "patternProperties": { - "^[^$]": { - "additionalProperties": false, - "properties": { - "$schema": { - "type": "string" - }, - "$comment": { - "type": "string" - }, - "apiKeyEnv": { - "description": "Name of the environment variable holding this provider's API key — the name, never the key", - "type": "string" - }, - "baseUrl": { - "description": "Address to send this provider's requests to instead of the vendor's, for a gateway or a proxy", - "examples": ["https://gateway.example/v1/messages"], - "type": "string" + "additionalProperties": { + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string" + }, + "$comment": { + "type": "string" + }, + "apiKeyEnv": { + "description": "Name of the environment variable holding this provider's API key — the name, never the key", + "type": "string" + }, + "baseUrl": { + "description": "Address to send this provider's requests to instead of the vendor's, for a gateway or a proxy", + "examples": ["https://gateway.example/v1/messages"], + "type": "string" + }, + "contextWindow": { + "additionalProperties": { + "minimum": 0, + "type": "integer" }, - "contextWindow": { - "additionalProperties": false, - "description": "How many tokens a model accepts at once, keyed by the model name, where crucible cannot ask the provider or has it wrong", - "patternProperties": { - "^[^$]": { - "minimum": 0, - "type": "integer" - } + "description": "How many tokens a model accepts at once, keyed by the model name, where crucible cannot ask the provider or has it wrong", + "properties": { + "$schema": { + "type": "string" }, - "properties": { - "$schema": { - "type": "string" + "$comment": { + "type": "string" + } + }, + "propertyNames": { + "anyOf": [ + { + "pattern": "^[^$]" }, - "$comment": { - "type": "string" + { + "enum": ["$schema", "$comment"] } - }, - "type": "object" - }, - "defaultContextWindow": { - "description": "How many tokens to assume any model of this provider accepts, where it is not named above", - "minimum": 0, - "type": "integer" - }, - "effort": { - "description": "How hard to think before answering, when --effort does not say. Left off, the vendor's own default for whichever model is being asked", - "enum": ["low", "medium", "high", "xhigh", "max"], - "type": "string" + ] }, - "model": { - "description": "The model to ask when --model does not name one", - "type": "string" - } + "type": "object" }, - "type": "object" - } + "defaultContextWindow": { + "description": "How many tokens to assume any model of this provider accepts, where it is not named above", + "minimum": 0, + "type": "integer" + }, + "effort": { + "description": "How hard to think before answering, when --effort does not say. Left off, the vendor's own default for whichever model is being asked", + "enum": ["low", "medium", "high", "xhigh", "max"], + "type": "string" + }, + "model": { + "description": "The model to ask when --model does not name one", + "type": "string" + } + }, + "type": "object" }, + "description": "Per-provider defaults, keyed by provider name", "properties": { "$schema": { "type": "string" @@ -262,6 +287,16 @@ "type": "string" } }, + "propertyNames": { + "anyOf": [ + { + "pattern": "^[^$]" + }, + { + "enum": ["$schema", "$comment"] + } + ] + }, "type": "object" }, "updates": { @@ -275,6 +310,7 @@ "type": "string" }, "check": { + "default": "auto", "description": "Whether crucible asks GitHub which release is newest, and says so when this one is behind", "enum": ["auto", "never"], "type": "string" diff --git a/src/test/crucible-code-schema/config.json b/src/test/crucible-code-schema/config.json index 5ba98e91e34..70f19d55ece 100644 --- a/src/test/crucible-code-schema/config.json +++ b/src/test/crucible-code-schema/config.json @@ -4,6 +4,7 @@ "compaction": { "askOnResume": 0, "keep": 20000, + "recap": 8000, "reserve": 16000, "spendCeiling": 0, "when": "full" @@ -18,8 +19,8 @@ "output": { "color": "auto", "glyphs": "unicode", - "mouse": "click", "syntaxTheme": "GitHub", + "theme": "dark", "toolDetail": "compact" }, "permissions": { From 91315f8f7641462735f3a0f707cb5cdd531e658d Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Sun, 23 Aug 2026 12:04:20 -0400 Subject: [PATCH 2/3] Add `Visual Studio 2026` to AppVeyor images (#6233) See https://www.appveyor.com/updates/2026/06/02/ --- src/schemas/json/appveyor.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/schemas/json/appveyor.json b/src/schemas/json/appveyor.json index a210a15164d..acd4bcb0674 100644 --- a/src/schemas/json/appveyor.json +++ b/src/schemas/json/appveyor.json @@ -146,6 +146,7 @@ "Visual Studio 2017", "Visual Studio 2019", "Visual Studio 2022", + "Visual Studio 2026", "Visual Studio 2017 Preview", "Visual Studio 2019 Preview", "Previous Visual Studio 2013", From 917289dff37649d8988fb19c37fe119b720630f0 Mon Sep 17 00:00:00 2001 From: Solaris-star <67425364+Solaris-star@users.noreply.github.com> Date: Mon, 24 Aug 2026 00:04:34 +0800 Subject: [PATCH 3/3] Enable strict validation for GitHub workflow templates (#6235) Signed-off-by: Solaris-star <820622658@qq.com> --- src/schema-validation.jsonc | 1 - src/schemas/json/github-workflow-template-properties.json | 8 +++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/schema-validation.jsonc b/src/schema-validation.jsonc index 5b2fc241ab8..d2366e2594e 100644 --- a/src/schema-validation.jsonc +++ b/src/schema-validation.jsonc @@ -140,7 +140,6 @@ "gaspar-3.0.json", "github-action.json", "github-funding.json", - "github-workflow-template-properties.json", "github-workflow.json", "helmfile.json", "hemtt-0.6.2.json", diff --git a/src/schemas/json/github-workflow-template-properties.json b/src/schemas/json/github-workflow-template-properties.json index 0ccb6c2ce7f..ddcef20960a 100644 --- a/src/schemas/json/github-workflow-template-properties.json +++ b/src/schemas/json/github-workflow-template-properties.json @@ -2,27 +2,33 @@ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://json.schemastore.org/github-workflow-template-properties.json", "$comment": "https://docs.github.com/en/actions/using-workflows/creating-starter-workflows-for-your-organization", + "title": "GitHub starter workflow config file schema", + "description": "Metadata for a GitHub Actions starter workflow.\nhttps://docs.github.com/en/actions/using-workflows/creating-starter-workflows-for-your-organization", "additionalProperties": false, "properties": { "name": { + "title": "Name", "description": "A workflow template name\nhttps://docs.github.com/en/actions/using-workflows/creating-starter-workflows-for-your-organization#creating-a-starter-workflow", "type": "string", "minLength": 1, "examples": ["Sample name"] }, "description": { + "title": "Description", "description": "A workflow template description\nhttps://docs.github.com/en/actions/using-workflows/creating-starter-workflows-for-your-organization#creating-a-starter-workflow", "type": "string", "minLength": 1, "examples": ["Sample description"] }, "iconName": { + "title": "Icon name", "description": "A workflow template icon\nMust be the name of an SVG file, without the file name extension, stored in the workflow-templates directory\nhttps://docs.github.com/en/actions/using-workflows/creating-starter-workflows-for-your-organization#creating-a-starter-workflow", "type": "string", "minLength": 1, "examples": ["Sample icon"] }, "categories": { + "title": "Categories", "description": "A workflow category\nhttps://docs.github.com/en/actions/using-workflows/creating-starter-workflows-for-your-organization#creating-a-starter-workflow", "type": "array", "uniqueItems": true, @@ -899,6 +905,7 @@ } }, "filePatterns": { + "title": "File patterns", "description": "A file name pattern to match against repository to enable this workflow when match is succeed\nhttps://docs.github.com/en/actions/using-workflows/creating-starter-workflows-for-your-organization#creating-a-starter-workflow", "type": "array", "minItems": 1, @@ -911,6 +918,5 @@ } }, "required": ["name", "description"], - "title": "GitHub starter workflow config file schema", "type": "object" }