diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2a4a2e476..680d17a71 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -142,7 +142,13 @@ jobs: env: QUALITY_BASE_SHA: ${{ github.event.pull_request.base.sha || github.event.merge_group.base_sha || github.event.before }} QUALITY_HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }} - run: node scripts/resolve-quality-range.mjs >> "$GITHUB_OUTPUT" + # A branch-creating push delivers the zero SHA as its before-pointer; the fallback ref + # bounds the range at the merge-base with dev so EVERY commit introduced by the branch + # creation is scanned (fetch-depth 0 clones only the triggering ref, hence the fetch). + QUALITY_FALLBACK_BASE_REF: origin/dev + run: | + git fetch --no-tags --quiet origin dev + node scripts/resolve-quality-range.mjs >> "$GITHUB_OUTPUT" - name: Reject semantic clone groups introduced by this change env: QUALITY_BASE_SHA: ${{ steps.quality-range.outputs.base }} @@ -188,7 +194,13 @@ jobs: env: QUALITY_BASE_SHA: ${{ github.event.pull_request.base.sha || github.event.merge_group.base_sha || github.event.before }} QUALITY_HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }} - run: node scripts/resolve-quality-range.mjs >> "$GITHUB_OUTPUT" + # A branch-creating push delivers the zero SHA as its before-pointer; the fallback ref + # bounds the range at the merge-base with dev so EVERY commit introduced by the branch + # creation is scanned (fetch-depth 0 clones only the triggering ref, hence the fetch). + QUALITY_FALLBACK_BASE_REF: origin/dev + run: | + git fetch --no-tags --quiet origin dev + node scripts/resolve-quality-range.mjs >> "$GITHUB_OUTPUT" - name: Reject secrets introduced anywhere in the pull-request history env: QUALITY_BASE_SHA: ${{ steps.quality-range.outputs.base }} diff --git a/.github/zizmor.yml b/.github/zizmor.yml index 33d2f19d3..5b7ac84ae 100644 --- a/.github/zizmor.yml +++ b/.github/zizmor.yml @@ -33,12 +33,12 @@ rules: # before removal: `zizmor` reports zero cache-poisoning findings for the pre-#2704 ci.yml with # no ignore list at all. # USearch runtime: coverage-packages, coverage-ui, coverage-scripts - - ci.yml:416 - - ci.yml:506 - - ci.yml:572 + - ci.yml:428 + - ci.yml:518 + - ci.yml:584 # coverage-sonar: npm download cache (the one job that saves it), Sonar Scanner CLI archive - - ci.yml:651 - - ci.yml:737 + - ci.yml:663 + - ci.yml:749 dangerous-triggers: ignore: # ADR-0161: the infrastructure-signature observer must see runs that have already completed, and diff --git a/package-lock.json b/package-lock.json index 7e7ae9ae9..d9f7e7386 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@oscharko-dev/keiko", - "version": "0.3.8", + "version": "0.3.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@oscharko-dev/keiko", - "version": "0.3.8", + "version": "0.3.9", "bundleDependencies": [ "@oscharko-dev/keiko-connectors", "@oscharko-dev/keiko-contracts", @@ -37,29 +37,29 @@ "packages/*" ], "dependencies": { - "@oscharko-dev/keiko-cli": "0.3.8", - "@oscharko-dev/keiko-connectors": "0.3.8", - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-evaluations": "0.3.8", - "@oscharko-dev/keiko-evidence": "0.3.8", - "@oscharko-dev/keiko-git": "0.3.8", - "@oscharko-dev/keiko-harness": "0.3.8", - "@oscharko-dev/keiko-local-knowledge": "0.3.8", - "@oscharko-dev/keiko-memory-capture": "0.3.8", - "@oscharko-dev/keiko-memory-consolidation": "0.3.8", - "@oscharko-dev/keiko-memory-governance": "0.3.8", - "@oscharko-dev/keiko-memory-retrieval": "0.3.8", - "@oscharko-dev/keiko-memory-vault": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-quality-intelligence": "0.3.8", - "@oscharko-dev/keiko-sandbox": "0.3.8", - "@oscharko-dev/keiko-sdk": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-server": "0.3.8", - "@oscharko-dev/keiko-tools": "0.3.8", - "@oscharko-dev/keiko-verification": "0.3.8", - "@oscharko-dev/keiko-workflows": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8", + "@oscharko-dev/keiko-cli": "0.3.9", + "@oscharko-dev/keiko-connectors": "0.3.9", + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-evaluations": "0.3.9", + "@oscharko-dev/keiko-evidence": "0.3.9", + "@oscharko-dev/keiko-git": "0.3.9", + "@oscharko-dev/keiko-harness": "0.3.9", + "@oscharko-dev/keiko-local-knowledge": "0.3.9", + "@oscharko-dev/keiko-memory-capture": "0.3.9", + "@oscharko-dev/keiko-memory-consolidation": "0.3.9", + "@oscharko-dev/keiko-memory-governance": "0.3.9", + "@oscharko-dev/keiko-memory-retrieval": "0.3.9", + "@oscharko-dev/keiko-memory-vault": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-quality-intelligence": "0.3.9", + "@oscharko-dev/keiko-sandbox": "0.3.9", + "@oscharko-dev/keiko-sdk": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-server": "0.3.9", + "@oscharko-dev/keiko-tools": "0.3.9", + "@oscharko-dev/keiko-verification": "0.3.9", + "@oscharko-dev/keiko-workflows": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9", "pdfjs-dist": "^6.2.108", "typescript": "~6.0.3", "ws": "^8.21.0", @@ -72,7 +72,7 @@ "@babel/core": "^8.0.1", "@babel/preset-env": "^8.0.2", "@eslint/js": "^9.39.5", - "@oscharko-dev/keiko-editor": "0.3.8", + "@oscharko-dev/keiko-editor": "0.3.9", "@playwright/test": "^1.61.1", "@stryker-mutator/core": "9.6.1", "@stryker-mutator/vitest-runner": "9.6.1", @@ -14235,21 +14235,21 @@ }, "packages/keiko-cli": { "name": "@oscharko-dev/keiko-cli", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-evaluations": "0.3.8", - "@oscharko-dev/keiko-evidence": "0.3.8", - "@oscharko-dev/keiko-harness": "0.3.8", - "@oscharko-dev/keiko-memory-vault": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-sdk": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-server": "0.3.8", - "@oscharko-dev/keiko-verification": "0.3.8", - "@oscharko-dev/keiko-workflows": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-evaluations": "0.3.9", + "@oscharko-dev/keiko-evidence": "0.3.9", + "@oscharko-dev/keiko-harness": "0.3.9", + "@oscharko-dev/keiko-memory-vault": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-sdk": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-server": "0.3.9", + "@oscharko-dev/keiko-verification": "0.3.9", + "@oscharko-dev/keiko-workflows": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14257,11 +14257,11 @@ }, "packages/keiko-connectors": { "name": "@oscharko-dev/keiko-connectors", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14269,7 +14269,7 @@ }, "packages/keiko-contracts": { "name": "@oscharko-dev/keiko-contracts", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "engines": { "node": ">=24.18.0 <25" @@ -14277,11 +14277,11 @@ }, "packages/keiko-editor": { "name": "@oscharko-dev/keiko-editor", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { "@monaco-editor/react": "4.7.0", - "@oscharko-dev/keiko-contracts": "0.3.8", + "@oscharko-dev/keiko-contracts": "0.3.9", "monaco-editor": "0.56.0" }, "devDependencies": { @@ -14312,17 +14312,17 @@ }, "packages/keiko-evaluations": { "name": "@oscharko-dev/keiko-evaluations", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-evidence": "0.3.8", - "@oscharko-dev/keiko-harness": "0.3.8", - "@oscharko-dev/keiko-local-knowledge": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-tools": "0.3.8", - "@oscharko-dev/keiko-workflows": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-evidence": "0.3.9", + "@oscharko-dev/keiko-harness": "0.3.9", + "@oscharko-dev/keiko-local-knowledge": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-tools": "0.3.9", + "@oscharko-dev/keiko-workflows": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14330,12 +14330,12 @@ }, "packages/keiko-evidence": { "name": "@oscharko-dev/keiko-evidence", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14343,7 +14343,7 @@ }, "packages/keiko-git": { "name": "@oscharko-dev/keiko-git", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { "typescript": "~6.0.3" @@ -14354,14 +14354,14 @@ }, "packages/keiko-harness": { "name": "@oscharko-dev/keiko-harness", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-tools": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-tools": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14369,13 +14369,13 @@ }, "packages/keiko-local-knowledge": { "name": "@oscharko-dev/keiko-local-knowledge", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8", + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9", "pdfjs-dist": "^6.2.108", "yauzl": "^3.3.2" }, @@ -14388,11 +14388,11 @@ }, "packages/keiko-memory-capture": { "name": "@oscharko-dev/keiko-memory-capture", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14400,11 +14400,11 @@ }, "packages/keiko-memory-consolidation": { "name": "@oscharko-dev/keiko-memory-consolidation", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14412,11 +14412,11 @@ }, "packages/keiko-memory-governance": { "name": "@oscharko-dev/keiko-memory-governance", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14424,11 +14424,11 @@ }, "packages/keiko-memory-retrieval": { "name": "@oscharko-dev/keiko-memory-retrieval", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14436,11 +14436,11 @@ }, "packages/keiko-memory-vault": { "name": "@oscharko-dev/keiko-memory-vault", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14448,11 +14448,11 @@ }, "packages/keiko-model-gateway": { "name": "@oscharko-dev/keiko-model-gateway", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14460,11 +14460,11 @@ }, "packages/keiko-quality-intelligence": { "name": "@oscharko-dev/keiko-quality-intelligence", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14472,10 +14472,10 @@ }, "packages/keiko-sandbox": { "name": "@oscharko-dev/keiko-sandbox", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14483,17 +14483,17 @@ }, "packages/keiko-sdk": { "name": "@oscharko-dev/keiko-sdk", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-evaluations": "0.3.8", - "@oscharko-dev/keiko-evidence": "0.3.8", - "@oscharko-dev/keiko-harness": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-verification": "0.3.8", - "@oscharko-dev/keiko-workflows": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-evaluations": "0.3.9", + "@oscharko-dev/keiko-evidence": "0.3.9", + "@oscharko-dev/keiko-harness": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-verification": "0.3.9", + "@oscharko-dev/keiko-workflows": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14501,10 +14501,10 @@ }, "packages/keiko-security": { "name": "@oscharko-dev/keiko-security", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14512,29 +14512,29 @@ }, "packages/keiko-server": { "name": "@oscharko-dev/keiko-server", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-connectors": "0.3.8", - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-evidence": "0.3.8", - "@oscharko-dev/keiko-git": "0.3.8", - "@oscharko-dev/keiko-harness": "0.3.8", - "@oscharko-dev/keiko-local-knowledge": "0.3.8", - "@oscharko-dev/keiko-memory-capture": "0.3.8", - "@oscharko-dev/keiko-memory-consolidation": "0.3.8", - "@oscharko-dev/keiko-memory-governance": "0.3.8", - "@oscharko-dev/keiko-memory-retrieval": "0.3.8", - "@oscharko-dev/keiko-memory-vault": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-quality-intelligence": "0.3.8", - "@oscharko-dev/keiko-sandbox": "0.3.8", - "@oscharko-dev/keiko-sdk": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-tools": "0.3.8", - "@oscharko-dev/keiko-verification": "0.3.8", - "@oscharko-dev/keiko-workflows": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8", + "@oscharko-dev/keiko-connectors": "0.3.9", + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-evidence": "0.3.9", + "@oscharko-dev/keiko-git": "0.3.9", + "@oscharko-dev/keiko-harness": "0.3.9", + "@oscharko-dev/keiko-local-knowledge": "0.3.9", + "@oscharko-dev/keiko-memory-capture": "0.3.9", + "@oscharko-dev/keiko-memory-consolidation": "0.3.9", + "@oscharko-dev/keiko-memory-governance": "0.3.9", + "@oscharko-dev/keiko-memory-retrieval": "0.3.9", + "@oscharko-dev/keiko-memory-vault": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-quality-intelligence": "0.3.9", + "@oscharko-dev/keiko-sandbox": "0.3.9", + "@oscharko-dev/keiko-sdk": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-tools": "0.3.9", + "@oscharko-dev/keiko-verification": "0.3.9", + "@oscharko-dev/keiko-workflows": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9", "smol-toml": "^1.7.1", "typescript": "~6.0.3", "ws": "^8.21.0", @@ -14546,13 +14546,13 @@ }, "packages/keiko-tools": { "name": "@oscharko-dev/keiko-tools", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-sandbox": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8", + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-sandbox": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9", "ws": "^8.21.0" }, "engines": { @@ -14561,13 +14561,13 @@ }, "packages/keiko-ui": { "name": "@oscharko-dev/keiko-ui", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { "@monaco-editor/react": "4.7.0", "@noble/hashes": "2.3.0", - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-editor": "0.3.8", + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-editor": "0.3.9", "diff": "9.0.0", "monaco-editor": "0.56.0", "next": "16.2.12", @@ -14875,13 +14875,13 @@ }, "packages/keiko-verification": { "name": "@oscharko-dev/keiko-verification", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-tools": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-tools": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14889,18 +14889,18 @@ }, "packages/keiko-workflows": { "name": "@oscharko-dev/keiko-workflows", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-evidence": "0.3.8", - "@oscharko-dev/keiko-harness": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-quality-intelligence": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-tools": "0.3.8", - "@oscharko-dev/keiko-verification": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-evidence": "0.3.9", + "@oscharko-dev/keiko-harness": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-quality-intelligence": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-tools": "0.3.9", + "@oscharko-dev/keiko-verification": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9" }, "engines": { "node": ">=24.18.0 <25" @@ -14908,11 +14908,11 @@ }, "packages/keiko-workspace": { "name": "@oscharko-dev/keiko-workspace", - "version": "0.3.8", + "version": "0.3.9", "license": "Apache-2.0", "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", "typescript": "~6.0.3" }, "engines": { diff --git a/package.json b/package.json index 22de29f97..c55723587 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@oscharko-dev/keiko", - "version": "0.3.8", + "version": "0.3.9", "description": "Enterprise model-agnostic developer-assist coding agent for regulated engineering workflows.", "type": "module", "license": "Apache-2.0", @@ -231,7 +231,7 @@ "@babel/core": "^8.0.1", "@babel/preset-env": "^8.0.2", "@eslint/js": "^9.39.5", - "@oscharko-dev/keiko-editor": "0.3.8", + "@oscharko-dev/keiko-editor": "0.3.9", "@playwright/test": "^1.61.1", "@stryker-mutator/core": "9.6.1", "@stryker-mutator/vitest-runner": "9.6.1", @@ -254,29 +254,29 @@ "yaml": "2.9.0" }, "dependencies": { - "@oscharko-dev/keiko-cli": "0.3.8", - "@oscharko-dev/keiko-connectors": "0.3.8", - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-evaluations": "0.3.8", - "@oscharko-dev/keiko-evidence": "0.3.8", - "@oscharko-dev/keiko-git": "0.3.8", - "@oscharko-dev/keiko-harness": "0.3.8", - "@oscharko-dev/keiko-local-knowledge": "0.3.8", - "@oscharko-dev/keiko-memory-capture": "0.3.8", - "@oscharko-dev/keiko-memory-consolidation": "0.3.8", - "@oscharko-dev/keiko-memory-governance": "0.3.8", - "@oscharko-dev/keiko-memory-retrieval": "0.3.8", - "@oscharko-dev/keiko-memory-vault": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-quality-intelligence": "0.3.8", - "@oscharko-dev/keiko-sandbox": "0.3.8", - "@oscharko-dev/keiko-sdk": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-server": "0.3.8", - "@oscharko-dev/keiko-tools": "0.3.8", - "@oscharko-dev/keiko-verification": "0.3.8", - "@oscharko-dev/keiko-workflows": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8", + "@oscharko-dev/keiko-cli": "0.3.9", + "@oscharko-dev/keiko-connectors": "0.3.9", + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-evaluations": "0.3.9", + "@oscharko-dev/keiko-evidence": "0.3.9", + "@oscharko-dev/keiko-git": "0.3.9", + "@oscharko-dev/keiko-harness": "0.3.9", + "@oscharko-dev/keiko-local-knowledge": "0.3.9", + "@oscharko-dev/keiko-memory-capture": "0.3.9", + "@oscharko-dev/keiko-memory-consolidation": "0.3.9", + "@oscharko-dev/keiko-memory-governance": "0.3.9", + "@oscharko-dev/keiko-memory-retrieval": "0.3.9", + "@oscharko-dev/keiko-memory-vault": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-quality-intelligence": "0.3.9", + "@oscharko-dev/keiko-sandbox": "0.3.9", + "@oscharko-dev/keiko-sdk": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-server": "0.3.9", + "@oscharko-dev/keiko-tools": "0.3.9", + "@oscharko-dev/keiko-verification": "0.3.9", + "@oscharko-dev/keiko-workflows": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9", "pdfjs-dist": "^6.2.108", "typescript": "~6.0.3", "ws": "^8.21.0", diff --git a/packages/keiko-cli/package.json b/packages/keiko-cli/package.json index 0d68653b6..f1b898e8f 100644 --- a/packages/keiko-cli/package.json +++ b/packages/keiko-cli/package.json @@ -1,6 +1,6 @@ { "name": "@oscharko-dev/keiko-cli", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", "description": "Internal CLI package: command modules for the `keiko` binary shipped via the root product package (ADR-0019). Not published independently.", @@ -25,18 +25,18 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8", - "@oscharko-dev/keiko-evaluations": "0.3.8", - "@oscharko-dev/keiko-evidence": "0.3.8", - "@oscharko-dev/keiko-verification": "0.3.8", - "@oscharko-dev/keiko-harness": "0.3.8", - "@oscharko-dev/keiko-sdk": "0.3.8", - "@oscharko-dev/keiko-workflows": "0.3.8", - "@oscharko-dev/keiko-server": "0.3.8", - "@oscharko-dev/keiko-memory-vault": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9", + "@oscharko-dev/keiko-evaluations": "0.3.9", + "@oscharko-dev/keiko-evidence": "0.3.9", + "@oscharko-dev/keiko-verification": "0.3.9", + "@oscharko-dev/keiko-harness": "0.3.9", + "@oscharko-dev/keiko-sdk": "0.3.9", + "@oscharko-dev/keiko-workflows": "0.3.9", + "@oscharko-dev/keiko-server": "0.3.9", + "@oscharko-dev/keiko-memory-vault": "0.3.9" }, "private": true } diff --git a/packages/keiko-connectors/package.json b/packages/keiko-connectors/package.json index 6a4c7b3ee..e8c5de204 100644 --- a/packages/keiko-connectors/package.json +++ b/packages/keiko-connectors/package.json @@ -1,9 +1,9 @@ { "name": "@oscharko-dev/keiko-connectors", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", - "description": "Internal connectors package: governed Atlassian (Confluence/Jira) connector domain logic — encrypted credential custody over the shared secret vault, opaque authRef resolution, the injectable AtlassianHttpPort transport seam, and the bounded connection-verification probe (ADR-0128, ADR-0019). No direct network or filesystem capability; keiko-server is the sole composition root. Not published independently.", + "description": "Internal connectors package: governed Atlassian (Confluence/Jira) connector domain logic \u2014 encrypted credential custody over the shared secret vault, opaque authRef resolution, the injectable AtlassianHttpPort transport seam, and the bounded connection-verification probe (ADR-0128, ADR-0019). No direct network or filesystem capability; keiko-server is the sole composition root. Not published independently.", "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { @@ -25,8 +25,8 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "private": true } diff --git a/packages/keiko-contracts/package.json b/packages/keiko-contracts/package.json index 52c11762c..87029017e 100644 --- a/packages/keiko-contracts/package.json +++ b/packages/keiko-contracts/package.json @@ -1,6 +1,6 @@ { "name": "@oscharko-dev/keiko-contracts", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", "description": "Internal workspace package: shared Keiko contracts. Not published independently.", diff --git a/packages/keiko-contracts/src/index.ts b/packages/keiko-contracts/src/index.ts index 4a7d2577e..b9c29a3bc 100644 --- a/packages/keiko-contracts/src/index.ts +++ b/packages/keiko-contracts/src/index.ts @@ -17,13 +17,13 @@ // graph state, and pure validation helpers. No implementation — types only. Implementation // lands in subsequent epic children. -export const KEIKO_CONTRACTS_VERSION = "0.3.8" as const; +export const KEIKO_CONTRACTS_VERSION = "0.3.9" as const; // Single-source product version. Surfaced as `keiko --version`, in the BFF healthcheck // response, and as the SDK's exported `SDK_VERSION` constant. Kept here on the leaf // package so every consumer reaches it through one stable import path. Bump in lockstep // with the root package.json "version" field as part of every release. -export const KEIKO_PRODUCT_VERSION = "0.3.8" as const; +export const KEIKO_PRODUCT_VERSION = "0.3.9" as const; // ─── Shared numeric primitive (GEN-DUP-SEMANTIC-003) ──────────────────────────── export { clampUnit } from "./numeric.js"; diff --git a/packages/keiko-editor/package.json b/packages/keiko-editor/package.json index a105a4027..936df837f 100644 --- a/packages/keiko-editor/package.json +++ b/packages/keiko-editor/package.json @@ -1,6 +1,6 @@ { "name": "@oscharko-dev/keiko-editor", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", "description": "Internal workspace package: browser-tier Keiko Editor surface (Epic #1189, Issue #1191). Owns the Monaco editor/diff lifecycle, editor UI contracts, and the typed host-integration port surface; it computes no completion, diagnostics, retrieval, or model routing itself and never imports keiko-ui internals (ADR-0042; ADR-0019 browser tier, direction rule 8). v1 ships only a minimal typed public API. Monaco runtime wiring, UI card integration, and server completion endpoints are out of scope and land in #1193+. Not published independently.", @@ -26,7 +26,7 @@ }, "dependencies": { "@monaco-editor/react": "4.7.0", - "@oscharko-dev/keiko-contracts": "0.3.8", + "@oscharko-dev/keiko-contracts": "0.3.9", "monaco-editor": "0.56.0" }, "devDependencies": { diff --git a/packages/keiko-evaluations/package.json b/packages/keiko-evaluations/package.json index 590af3541..8fdd47119 100644 --- a/packages/keiko-evaluations/package.json +++ b/packages/keiko-evaluations/package.json @@ -1,9 +1,9 @@ { "name": "@oscharko-dev/keiko-evaluations", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", - "description": "Internal evaluations package: deterministic evaluation harness — scripted ModelPort fixtures, six scored dimensions, surface-parity check, scorecard renderer, and the offline-vs-live model provider selector (ADR-0012, ADR-0019). Not published independently.", + "description": "Internal evaluations package: deterministic evaluation harness \u2014 scripted ModelPort fixtures, six scored dimensions, surface-parity check, scorecard renderer, and the offline-vs-live model provider selector (ADR-0012, ADR-0019). Not published independently.", "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { @@ -26,14 +26,14 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-evidence": "0.3.8", - "@oscharko-dev/keiko-harness": "0.3.8", - "@oscharko-dev/keiko-local-knowledge": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-tools": "0.3.8", - "@oscharko-dev/keiko-workflows": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-evidence": "0.3.9", + "@oscharko-dev/keiko-harness": "0.3.9", + "@oscharko-dev/keiko-local-knowledge": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-tools": "0.3.9", + "@oscharko-dev/keiko-workflows": "0.3.9" }, "private": true } diff --git a/packages/keiko-evidence/package.json b/packages/keiko-evidence/package.json index b1c3540c1..b66a16985 100644 --- a/packages/keiko-evidence/package.json +++ b/packages/keiko-evidence/package.json @@ -1,6 +1,6 @@ { "name": "@oscharko-dev/keiko-evidence", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", "description": "Internal evidence package: Keiko evidence manifests, redacted-by-construction builder, retention/rotation, EvidenceStore port + node adapter, side-file writer, and workflow-evidence mapping (ADR-0010 + ADR-0017 + ADR-0019). Not published independently.", @@ -25,9 +25,9 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9" }, "private": true } diff --git a/packages/keiko-evidence/src/version.ts b/packages/keiko-evidence/src/version.ts index b17ebb258..747fd914c 100644 --- a/packages/keiko-evidence/src/version.ts +++ b/packages/keiko-evidence/src/version.ts @@ -1 +1 @@ -export const KEIKO_EVIDENCE_VERSION = "0.3.8" as const; +export const KEIKO_EVIDENCE_VERSION = "0.3.9" as const; diff --git a/packages/keiko-git/package.json b/packages/keiko-git/package.json index ee1e2104a..13b59971a 100644 --- a/packages/keiko-git/package.json +++ b/packages/keiko-git/package.json @@ -1,9 +1,9 @@ { "name": "@oscharko-dev/keiko-git", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", - "description": "Internal workspace package: shared Git core primitives — hardened process runner and environments, repository resolution and path containment, porcelain/ref/remote/history parsers, and failure classification. Single source of truth consumed by keiko-server, keiko-tools, and keiko-workspace. Not published independently.", + "description": "Internal workspace package: shared Git core primitives \u2014 hardened process runner and environments, repository resolution and path containment, porcelain/ref/remote/history parsers, and failure classification. Single source of truth consumed by keiko-server, keiko-tools, and keiko-workspace. Not published independently.", "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { diff --git a/packages/keiko-harness/package.json b/packages/keiko-harness/package.json index 1360c7c59..3ccf81a70 100644 --- a/packages/keiko-harness/package.json +++ b/packages/keiko-harness/package.json @@ -1,6 +1,6 @@ { "name": "@oscharko-dev/keiko-harness", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", "description": "Internal harness package: Keiko agent runtime loop, session/cancellation/limits, state machine, event emission, port abstractions, and dry-run-first patch proposal seam (ADR-0004 + ADR-0019). Not published independently.", @@ -25,11 +25,11 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8", - "@oscharko-dev/keiko-tools": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9", + "@oscharko-dev/keiko-tools": "0.3.9" }, "private": true } diff --git a/packages/keiko-harness/src/version.ts b/packages/keiko-harness/src/version.ts index 548c8a2d8..dc83d65c9 100644 --- a/packages/keiko-harness/src/version.ts +++ b/packages/keiko-harness/src/version.ts @@ -3,4 +3,4 @@ // from HARNESS_VERSION (the runtime/event-schema version that lives in @oscharko-dev/keiko-contracts // — re-exported from the package barrel so consumers see a single import source). -export const KEIKO_HARNESS_VERSION = "0.3.8" as const; +export const KEIKO_HARNESS_VERSION = "0.3.9" as const; diff --git a/packages/keiko-local-knowledge/package.json b/packages/keiko-local-knowledge/package.json index 4a8fb565b..7d6e6e41e 100644 --- a/packages/keiko-local-knowledge/package.json +++ b/packages/keiko-local-knowledge/package.json @@ -1,6 +1,6 @@ { "name": "@oscharko-dev/keiko-local-knowledge", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", "description": "Internal local-knowledge package: on-disk capsule store (node:sqlite + WAL) and capsule/source/CapsuleSet lifecycle CRUD for the Local Knowledge Connector (Epic #189, Issue #193). Not published independently.", @@ -29,10 +29,10 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8", + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9", "pdfjs-dist": "^6.2.108", "yauzl": "^3.3.2" }, diff --git a/packages/keiko-local-knowledge/src/version.ts b/packages/keiko-local-knowledge/src/version.ts index 8c3cdcc96..c36aa8c56 100644 --- a/packages/keiko-local-knowledge/src/version.ts +++ b/packages/keiko-local-knowledge/src/version.ts @@ -1,4 +1,4 @@ // Package version literal for @oscharko-dev/keiko-local-knowledge. Bumped lockstep with the // package.json "version" field so a value-import gives consumers a single source of truth // without parsing JSON at runtime. -export const KEIKO_LOCAL_KNOWLEDGE_VERSION = "0.3.8" as const; +export const KEIKO_LOCAL_KNOWLEDGE_VERSION = "0.3.9" as const; diff --git a/packages/keiko-memory-capture/package.json b/packages/keiko-memory-capture/package.json index e18f30683..b7b4ca712 100644 --- a/packages/keiko-memory-capture/package.json +++ b/packages/keiko-memory-capture/package.json @@ -1,9 +1,9 @@ { "name": "@oscharko-dev/keiko-memory-capture", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", - "description": "MemoriaViva — Internal memory-capture package: governed capture policy gate that turns raw user text and reviewed workflow outcomes into MemoryProposal / MemoryUpdate / MemoryForget / MemorySupersession envelopes. PRIMARY secret-prevention boundary (defence-in-depth on top of looksLikeSecretShape in keiko-contracts). Pure functions only; no IO, no clock, no randomness (caller supplies nowMs and newId via CaptureContext). ADR-0019 direction rule 3g (capture may depend only on keiko-contracts and keiko-security). Not published independently.", + "description": "MemoriaViva \u2014 Internal memory-capture package: governed capture policy gate that turns raw user text and reviewed workflow outcomes into MemoryProposal / MemoryUpdate / MemoryForget / MemorySupersession envelopes. PRIMARY secret-prevention boundary (defence-in-depth on top of looksLikeSecretShape in keiko-contracts). Pure functions only; no IO, no clock, no randomness (caller supplies nowMs and newId via CaptureContext). ADR-0019 direction rule 3g (capture may depend only on keiko-contracts and keiko-security). Not published independently.", "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { @@ -25,8 +25,8 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "private": true } diff --git a/packages/keiko-memory-capture/src/version.ts b/packages/keiko-memory-capture/src/version.ts index b8507dc9e..daf009161 100644 --- a/packages/keiko-memory-capture/src/version.ts +++ b/packages/keiko-memory-capture/src/version.ts @@ -1 +1 @@ -export const KEIKO_MEMORY_CAPTURE_VERSION = "0.3.8" as const; +export const KEIKO_MEMORY_CAPTURE_VERSION = "0.3.9" as const; diff --git a/packages/keiko-memory-consolidation/package.json b/packages/keiko-memory-consolidation/package.json index dfb8c559f..c9b7c369c 100644 --- a/packages/keiko-memory-consolidation/package.json +++ b/packages/keiko-memory-consolidation/package.json @@ -1,9 +1,9 @@ { "name": "@oscharko-dev/keiko-memory-consolidation", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", - "description": "MemoriaViva — Internal memory-consolidation package: pure-function engine that takes a bounded set of accepted MemoryRecords and returns proposed relationship edges, stale flags, and review items (multi-way duplicates and potential conflicts). The engine NEVER mutates accepted memories: every merge/supersession is routed through a ReviewItem so the caller (#211 MemoriaViva UI or a workflow) materializes the actual MemorySupersession envelope after explicit review. No IO, no clock, no randomness (caller supplies nowMs and id factories via ConsolidationOptions). ADR-0019 direction rule 3h (consolidation may depend only on keiko-contracts and keiko-security). Not published independently.", + "description": "MemoriaViva \u2014 Internal memory-consolidation package: pure-function engine that takes a bounded set of accepted MemoryRecords and returns proposed relationship edges, stale flags, and review items (multi-way duplicates and potential conflicts). The engine NEVER mutates accepted memories: every merge/supersession is routed through a ReviewItem so the caller (#211 MemoriaViva UI or a workflow) materializes the actual MemorySupersession envelope after explicit review. No IO, no clock, no randomness (caller supplies nowMs and id factories via ConsolidationOptions). ADR-0019 direction rule 3h (consolidation may depend only on keiko-contracts and keiko-security). Not published independently.", "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { @@ -25,8 +25,8 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "private": true } diff --git a/packages/keiko-memory-consolidation/src/version.ts b/packages/keiko-memory-consolidation/src/version.ts index 8ddb907d4..4b52632ef 100644 --- a/packages/keiko-memory-consolidation/src/version.ts +++ b/packages/keiko-memory-consolidation/src/version.ts @@ -1 +1 @@ -export const KEIKO_MEMORY_CONSOLIDATION_VERSION = "0.3.8" as const; +export const KEIKO_MEMORY_CONSOLIDATION_VERSION = "0.3.9" as const; diff --git a/packages/keiko-memory-governance/package.json b/packages/keiko-memory-governance/package.json index 62eb4d5c3..45eaa2f4e 100644 --- a/packages/keiko-memory-governance/package.json +++ b/packages/keiko-memory-governance/package.json @@ -1,9 +1,9 @@ { "name": "@oscharko-dev/keiko-memory-governance", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", - "description": "MemoriaViva — Internal memory-governance package (Epic #204 child #209): pure-function envelope builders for user-driven corrections, conflict resolution, selective forgetting, expiration, pinning and archiving over Governed Enterprise Memory Vault records. Every public function returns a contracts-validated operation envelope (MemoryProposal / MemorySupersession / MemoryUpdate / MemoryForget / MemoryPin / MemoryUnpin / MemoryArchive) or a StatusTransition; the caller (vault #206, audit #214, MemoriaViva UI #211, retrieval #210) materialises the persistence side. Pinned memories cannot be silently selected for forget. No IO, no clock, no randomness (caller supplies nowMs). ADR-0019 direction rule 3i (governance may depend only on keiko-contracts and keiko-security). Not published independently.", + "description": "MemoriaViva \u2014 Internal memory-governance package (Epic #204 child #209): pure-function envelope builders for user-driven corrections, conflict resolution, selective forgetting, expiration, pinning and archiving over Governed Enterprise Memory Vault records. Every public function returns a contracts-validated operation envelope (MemoryProposal / MemorySupersession / MemoryUpdate / MemoryForget / MemoryPin / MemoryUnpin / MemoryArchive) or a StatusTransition; the caller (vault #206, audit #214, MemoriaViva UI #211, retrieval #210) materialises the persistence side. Pinned memories cannot be silently selected for forget. No IO, no clock, no randomness (caller supplies nowMs). ADR-0019 direction rule 3i (governance may depend only on keiko-contracts and keiko-security). Not published independently.", "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { @@ -25,8 +25,8 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "private": true } diff --git a/packages/keiko-memory-governance/src/version.ts b/packages/keiko-memory-governance/src/version.ts index 013236a51..2f670bce4 100644 --- a/packages/keiko-memory-governance/src/version.ts +++ b/packages/keiko-memory-governance/src/version.ts @@ -1 +1 @@ -export const KEIKO_MEMORY_GOVERNANCE_VERSION = "0.3.8" as const; +export const KEIKO_MEMORY_GOVERNANCE_VERSION = "0.3.9" as const; diff --git a/packages/keiko-memory-retrieval/package.json b/packages/keiko-memory-retrieval/package.json index 5a99b4777..497928147 100644 --- a/packages/keiko-memory-retrieval/package.json +++ b/packages/keiko-memory-retrieval/package.json @@ -1,9 +1,9 @@ { "name": "@oscharko-dev/keiko-memory-retrieval", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", - "description": "MemoriaViva — Internal memory-retrieval package (Epic #204 child #210): pure-function scoped retrieval + hybrid ranking + token-budgeted context assembly over Governed Enterprise Memory Vault records. Caller supplies a MemoryQueryPort (no keiko-memory-vault import) so the vault remains injectable and this layer stays pure (no IO, no clock, no randomness; caller supplies nowMs). Ranking combines deterministic lexical relevance, recency decay, provenance confidence, pinned boost, correction boost, and graph proximity into a weighted sum. The context block carries inclusion/omission reasons per memory so downstream callers (Conversation Center #212, workflow agents #213) and audit (#214) can render fully explainable surfaces. Suppression check is duplicated inline (synced with @oscharko-dev/keiko-memory-governance/suppression.ts) to keep the dep graph on contracts+security only. ADR-0019 direction rule 3j enforces this scope. Not published independently.", + "description": "MemoriaViva \u2014 Internal memory-retrieval package (Epic #204 child #210): pure-function scoped retrieval + hybrid ranking + token-budgeted context assembly over Governed Enterprise Memory Vault records. Caller supplies a MemoryQueryPort (no keiko-memory-vault import) so the vault remains injectable and this layer stays pure (no IO, no clock, no randomness; caller supplies nowMs). Ranking combines deterministic lexical relevance, recency decay, provenance confidence, pinned boost, correction boost, and graph proximity into a weighted sum. The context block carries inclusion/omission reasons per memory so downstream callers (Conversation Center #212, workflow agents #213) and audit (#214) can render fully explainable surfaces. Suppression check is duplicated inline (synced with @oscharko-dev/keiko-memory-governance/suppression.ts) to keep the dep graph on contracts+security only. ADR-0019 direction rule 3j enforces this scope. Not published independently.", "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { @@ -25,8 +25,8 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "private": true } diff --git a/packages/keiko-memory-retrieval/src/version.ts b/packages/keiko-memory-retrieval/src/version.ts index 1f38e8b07..9fe9766cb 100644 --- a/packages/keiko-memory-retrieval/src/version.ts +++ b/packages/keiko-memory-retrieval/src/version.ts @@ -1,4 +1,4 @@ // Single source of truth for the package version. Pinned as a literal so consumers can // import it for telemetry or evidence persistence without parsing package.json at runtime. // Bump in lockstep with package.json on every release. -export const KEIKO_MEMORY_RETRIEVAL_VERSION = "0.3.8" as const; +export const KEIKO_MEMORY_RETRIEVAL_VERSION = "0.3.9" as const; diff --git a/packages/keiko-memory-vault/package.json b/packages/keiko-memory-vault/package.json index 3f79a04f8..d6d4b3eed 100644 --- a/packages/keiko-memory-vault/package.json +++ b/packages/keiko-memory-vault/package.json @@ -1,9 +1,9 @@ { "name": "@oscharko-dev/keiko-memory-vault", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", - "description": "MemoriaViva — Internal memory-vault package: governed enterprise memory storage (node:sqlite). Scope-isolated CRUD, edges, embeddings, tombstones, validator-gated boundary, redaction-aware writes (ADR-0019 + Epic #204). Not published independently.", + "description": "MemoriaViva \u2014 Internal memory-vault package: governed enterprise memory storage (node:sqlite). Scope-isolated CRUD, edges, embeddings, tombstones, validator-gated boundary, redaction-aware writes (ADR-0019 + Epic #204). Not published independently.", "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { @@ -25,8 +25,8 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "private": true } diff --git a/packages/keiko-memory-vault/src/version.ts b/packages/keiko-memory-vault/src/version.ts index 38aaaf79b..1934f818c 100644 --- a/packages/keiko-memory-vault/src/version.ts +++ b/packages/keiko-memory-vault/src/version.ts @@ -1 +1 @@ -export const KEIKO_MEMORY_VAULT_VERSION = "0.3.8" as const; +export const KEIKO_MEMORY_VAULT_VERSION = "0.3.9" as const; diff --git a/packages/keiko-model-gateway/package.json b/packages/keiko-model-gateway/package.json index eb2ad7305..086f2411f 100644 --- a/packages/keiko-model-gateway/package.json +++ b/packages/keiko-model-gateway/package.json @@ -1,9 +1,9 @@ { "name": "@oscharko-dev/keiko-model-gateway", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", - "description": "Internal workspace package: Keiko model gateway — provider abstraction, OpenAI-compatible adapter, capability registry, routing, resilience, TLS handling. Not published independently.", + "description": "Internal workspace package: Keiko model gateway \u2014 provider abstraction, OpenAI-compatible adapter, capability registry, routing, resilience, TLS handling. Not published independently.", "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { @@ -33,8 +33,8 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "private": true } diff --git a/packages/keiko-model-gateway/src/version.ts b/packages/keiko-model-gateway/src/version.ts index 35c149081..7c9d745f8 100644 --- a/packages/keiko-model-gateway/src/version.ts +++ b/packages/keiko-model-gateway/src/version.ts @@ -1,3 +1,3 @@ // Package version constant. Pinned at the workspace package's package.json version. Promoted to // a `const` string-literal type so downstream tests/assertions stay byte-exact. -export const KEIKO_MODEL_GATEWAY_VERSION = "0.3.8" as const; +export const KEIKO_MODEL_GATEWAY_VERSION = "0.3.9" as const; diff --git a/packages/keiko-quality-intelligence/package.json b/packages/keiko-quality-intelligence/package.json index ae1f9bee1..e7a8be03f 100644 --- a/packages/keiko-quality-intelligence/package.json +++ b/packages/keiko-quality-intelligence/package.json @@ -1,6 +1,6 @@ { "name": "@oscharko-dev/keiko-quality-intelligence", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", "description": "Internal workspace package: pure-domain Keiko Quality Intelligence test-design logic. Not published independently.", @@ -25,8 +25,8 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9" }, "private": true } diff --git a/packages/keiko-sandbox/package.json b/packages/keiko-sandbox/package.json index 84ce27cfa..befda8a36 100644 --- a/packages/keiko-sandbox/package.json +++ b/packages/keiko-sandbox/package.json @@ -1,6 +1,6 @@ { "name": "@oscharko-dev/keiko-sandbox", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", "description": "Internal sandbox package: the reusable OS/container egress-isolation strategy (ADR-0043). Pure backend-wrapper builders + selection + attestation, with a thin availability probe. Spawning stays in keiko-tools; this package only decides how a `network: \"none\"` command is wrapped so an outbound connection from the child fails. Not published independently.", @@ -25,7 +25,7 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9" }, "private": true } diff --git a/packages/keiko-sdk/package.json b/packages/keiko-sdk/package.json index 03494693b..be090bbd5 100644 --- a/packages/keiko-sdk/package.json +++ b/packages/keiko-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@oscharko-dev/keiko-sdk", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", "description": "Internal SDK package: public agent, workflow, verification, workspace, evidence, and evaluation surface that the root product facade re-exports (Issue #426, ADR-0019). Not published independently.", @@ -25,14 +25,14 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-evaluations": "0.3.8", - "@oscharko-dev/keiko-evidence": "0.3.8", - "@oscharko-dev/keiko-harness": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-verification": "0.3.8", - "@oscharko-dev/keiko-workflows": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-evaluations": "0.3.9", + "@oscharko-dev/keiko-evidence": "0.3.9", + "@oscharko-dev/keiko-harness": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-verification": "0.3.9", + "@oscharko-dev/keiko-workflows": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9" }, "private": true } diff --git a/packages/keiko-security/package.json b/packages/keiko-security/package.json index 314ad8f11..97e164909 100644 --- a/packages/keiko-security/package.json +++ b/packages/keiko-security/package.json @@ -1,6 +1,6 @@ { "name": "@oscharko-dev/keiko-security", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", "description": "Internal workspace package: shared Keiko security primitives (redaction, safe error shaping, secret collection, content hashing, trust-boundary helpers). Not published independently.", @@ -89,7 +89,7 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9" }, "private": true } diff --git a/packages/keiko-security/src/version.ts b/packages/keiko-security/src/version.ts index 30f5643ef..c3892c428 100644 --- a/packages/keiko-security/src/version.ts +++ b/packages/keiko-security/src/version.ts @@ -2,4 +2,4 @@ // Lets consumers assert which security primitive contract they linked against (ADR-0019 leaf-package // pattern, mirroring @oscharko-dev/keiko-contracts). -export const KEIKO_SECURITY_VERSION = "0.3.8" as const; +export const KEIKO_SECURITY_VERSION = "0.3.9" as const; diff --git a/packages/keiko-server/package.json b/packages/keiko-server/package.json index fc578e871..1950e6ebe 100644 --- a/packages/keiko-server/package.json +++ b/packages/keiko-server/package.json @@ -1,6 +1,6 @@ { "name": "@oscharko-dev/keiko-server", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", "description": "Internal server package: local loopback BFF runtime (HTTP/SSE/WebSocket router, CSP, host check, CSRF gate, terminal, browser, files, run engine, SQLite-backed UI store) that mediates the browser presentation tier and the Node-side domain packages (ADR-0019). Not published independently.", @@ -29,26 +29,26 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-connectors": "0.3.8", - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-evidence": "0.3.8", - "@oscharko-dev/keiko-git": "0.3.8", - "@oscharko-dev/keiko-harness": "0.3.8", - "@oscharko-dev/keiko-local-knowledge": "0.3.8", - "@oscharko-dev/keiko-memory-capture": "0.3.8", - "@oscharko-dev/keiko-memory-consolidation": "0.3.8", - "@oscharko-dev/keiko-memory-governance": "0.3.8", - "@oscharko-dev/keiko-memory-retrieval": "0.3.8", - "@oscharko-dev/keiko-memory-vault": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-quality-intelligence": "0.3.8", - "@oscharko-dev/keiko-sandbox": "0.3.8", - "@oscharko-dev/keiko-sdk": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-tools": "0.3.8", - "@oscharko-dev/keiko-verification": "0.3.8", - "@oscharko-dev/keiko-workflows": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8", + "@oscharko-dev/keiko-connectors": "0.3.9", + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-evidence": "0.3.9", + "@oscharko-dev/keiko-git": "0.3.9", + "@oscharko-dev/keiko-harness": "0.3.9", + "@oscharko-dev/keiko-local-knowledge": "0.3.9", + "@oscharko-dev/keiko-memory-capture": "0.3.9", + "@oscharko-dev/keiko-memory-consolidation": "0.3.9", + "@oscharko-dev/keiko-memory-governance": "0.3.9", + "@oscharko-dev/keiko-memory-retrieval": "0.3.9", + "@oscharko-dev/keiko-memory-vault": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-quality-intelligence": "0.3.9", + "@oscharko-dev/keiko-sandbox": "0.3.9", + "@oscharko-dev/keiko-sdk": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-tools": "0.3.9", + "@oscharko-dev/keiko-verification": "0.3.9", + "@oscharko-dev/keiko-workflows": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9", "smol-toml": "^1.7.1", "typescript": "~6.0.3", "ws": "^8.21.0", diff --git a/packages/keiko-tools/package.json b/packages/keiko-tools/package.json index c0923a9b9..e7e8f49e9 100644 --- a/packages/keiko-tools/package.json +++ b/packages/keiko-tools/package.json @@ -1,9 +1,9 @@ { "name": "@oscharko-dev/keiko-tools", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", - "description": "Internal tools package: Keiko safe tool-execution layer — terminal-policy command allowlist, env-isolated no-shell spawn, atomic patch workflow, browser CDP adapter, and the WorkspaceWriter boundary (ADR-0006 / ADR-0017). Not published independently.", + "description": "Internal tools package: Keiko safe tool-execution layer \u2014 terminal-policy command allowlist, env-isolated no-shell spawn, atomic patch workflow, browser CDP adapter, and the WorkspaceWriter boundary (ADR-0006 / ADR-0017). Not published independently.", "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { @@ -37,10 +37,10 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-sandbox": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8", + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-sandbox": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9", "ws": "^8.21.0" }, "private": true diff --git a/packages/keiko-tools/src/version.ts b/packages/keiko-tools/src/version.ts index 5772cae42..bb16d33d2 100644 --- a/packages/keiko-tools/src/version.ts +++ b/packages/keiko-tools/src/version.ts @@ -1,3 +1,3 @@ // Package version constant. Bumped in lockstep with the package.json version so consumers can // detect divergence in tests without parsing package metadata at runtime. -export const KEIKO_TOOLS_VERSION = "0.3.8" as const; +export const KEIKO_TOOLS_VERSION = "0.3.9" as const; diff --git a/packages/keiko-ui/package.json b/packages/keiko-ui/package.json index bf5a36bc2..dcf204489 100644 --- a/packages/keiko-ui/package.json +++ b/packages/keiko-ui/package.json @@ -1,6 +1,6 @@ { "name": "@oscharko-dev/keiko-ui", - "version": "0.3.8", + "version": "0.3.9", "description": "Keiko Wave 1 local UI (static export). Build-time-only; served by the Node BFF in keiko-server.", "license": "Apache-2.0", "type": "module", @@ -22,8 +22,8 @@ "dependencies": { "@monaco-editor/react": "4.7.0", "@noble/hashes": "2.3.0", - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-editor": "0.3.8", + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-editor": "0.3.9", "diff": "9.0.0", "monaco-editor": "0.56.0", "next": "16.2.12", diff --git a/packages/keiko-verification/package.json b/packages/keiko-verification/package.json index f22379e3e..4882a3b43 100644 --- a/packages/keiko-verification/package.json +++ b/packages/keiko-verification/package.json @@ -1,9 +1,9 @@ { "name": "@oscharko-dev/keiko-verification", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", - "description": "Internal verification package: deterministic verification orchestrator — plan construction, resource-limit policy, best-effort memory monitoring, command classification, and audit/Markdown summaries (ADR-0007, ADR-0019). Not published independently.", + "description": "Internal verification package: deterministic verification orchestrator \u2014 plan construction, resource-limit policy, best-effort memory monitoring, command classification, and audit/Markdown summaries (ADR-0007, ADR-0019). Not published independently.", "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { @@ -25,10 +25,10 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-tools": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-tools": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9" }, "private": true } diff --git a/packages/keiko-workflows/package.json b/packages/keiko-workflows/package.json index fc88c626a..4da0e958e 100644 --- a/packages/keiko-workflows/package.json +++ b/packages/keiko-workflows/package.json @@ -1,6 +1,6 @@ { "name": "@oscharko-dev/keiko-workflows", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", "description": "Internal workflows package: reviewable developer-assist workflows (unit-test generation, bug investigation), prompts/parsers/guards/report rendering, apply-mode verification gating, and UI descriptors (ADR-0008 + ADR-0009 + ADR-0019). Not published independently.", @@ -29,15 +29,15 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", - "@oscharko-dev/keiko-model-gateway": "0.3.8", - "@oscharko-dev/keiko-workspace": "0.3.8", - "@oscharko-dev/keiko-tools": "0.3.8", - "@oscharko-dev/keiko-evidence": "0.3.8", - "@oscharko-dev/keiko-verification": "0.3.8", - "@oscharko-dev/keiko-harness": "0.3.8", - "@oscharko-dev/keiko-quality-intelligence": "0.3.8" + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", + "@oscharko-dev/keiko-model-gateway": "0.3.9", + "@oscharko-dev/keiko-workspace": "0.3.9", + "@oscharko-dev/keiko-tools": "0.3.9", + "@oscharko-dev/keiko-evidence": "0.3.9", + "@oscharko-dev/keiko-verification": "0.3.9", + "@oscharko-dev/keiko-harness": "0.3.9", + "@oscharko-dev/keiko-quality-intelligence": "0.3.9" }, "private": true } diff --git a/packages/keiko-workspace/package.json b/packages/keiko-workspace/package.json index f538c2842..681464933 100644 --- a/packages/keiko-workspace/package.json +++ b/packages/keiko-workspace/package.json @@ -1,9 +1,9 @@ { "name": "@oscharko-dev/keiko-workspace", - "version": "0.3.8", + "version": "0.3.9", "type": "module", "license": "Apache-2.0", - "description": "Internal workspace package: Keiko repository context and workspace access — detection, safe reads, path containment, deny/ignore rules, context packs, retrieval, and summaries. Not published independently.", + "description": "Internal workspace package: Keiko repository context and workspace access \u2014 detection, safe reads, path containment, deny/ignore rules, context packs, retrieval, and summaries. Not published independently.", "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { @@ -37,8 +37,8 @@ "node": ">=24.18.0 <25" }, "dependencies": { - "@oscharko-dev/keiko-contracts": "0.3.8", - "@oscharko-dev/keiko-security": "0.3.8", + "@oscharko-dev/keiko-contracts": "0.3.9", + "@oscharko-dev/keiko-security": "0.3.9", "typescript": "~6.0.3" }, "private": true diff --git a/packages/keiko-workspace/src/version.ts b/packages/keiko-workspace/src/version.ts index 807e5b1a8..ca318ce9e 100644 --- a/packages/keiko-workspace/src/version.ts +++ b/packages/keiko-workspace/src/version.ts @@ -1,4 +1,4 @@ // Version identifier for the workspace package. Pattern matches keiko-contracts / // keiko-security / keiko-model-gateway: keep the literal type via `as const` so // downstream assertions can pin on the exact string. -export const KEIKO_WORKSPACE_VERSION = "0.3.8" as const; +export const KEIKO_WORKSPACE_VERSION = "0.3.9" as const; diff --git a/release-impact.catalog.json b/release-impact.catalog.json index cafcf89c9..018d475aa 100644 --- a/release-impact.catalog.json +++ b/release-impact.catalog.json @@ -800,7 +800,7 @@ "remediation": "no-action-required", "supportedFrom": ["0.2.0"], "releaseNoteBullets": [ - "Every save is a restore point — browse, compare, and restore file history locally." + "Every save is a restore point \u2014 browse, compare, and restore file history locally." ], "internalOnly": false, "observableImpact": true, @@ -1155,7 +1155,7 @@ "Windows failures are visible: incomplete installs, a damaged app bundle, or a runtime that cannot start now surface a native error dialog instead of exiting silently.", "The Start Menu entry is a real shortcut; a legacy Keiko.bat from earlier releases is retired automatically during setup, repair, and the first start after an in-app update.", "The Windows archive pipeline fails closed on symlinks, NTFS alternate-data-stream names, encryption-marked and mistyped entries, and installer cleanup retries correctly under silent installs.", - "These builds carry evaluation signing, and the governed in-app updater does not offer them as a one-click update — download 0.3.4 from this release page. On Windows, SmartScreen may warn on first run: choose “More info”, then “Run anyway”. On macOS, right-click the app and choose “Open” on first launch." + "These builds carry evaluation signing, and the governed in-app updater does not offer them as a one-click update \u2014 download 0.3.4 from this release page. On Windows, SmartScreen may warn on first run: choose \u201cMore info\u201d, then \u201cRun anyway\u201d. On macOS, right-click the app and choose \u201cOpen\u201d on first launch." ], "review": { "status": "reviewed", @@ -1399,6 +1399,60 @@ "targets": ["windows-x64", "macos-arm64", "macos-x64"] }, "traceability": null + }, + { + "packageName": "@oscharko-dev/keiko", + "packageVersion": "0.3.9", + "distTag": "latest", + "registry": "https://registry.npmjs.org/", + "releaseTag": "v0.3.9", + "supportedFrom": ["0.2.0"], + "internalOnly": false, + "observableImpact": true, + "defaultPatchNotes": true, + "oneClickEligible": false, + "publishGates": [ + "version-consistency", + "publish-manifests", + "release-impact", + "workspace-supply-chain", + "package-surface", + "qi-supply-chain", + "install-smoke" + ], + "id": "2026-08-18-keiko-0.3.9-customer-hardening", + "releaseNoteCategory": "fixes", + "releaseNotePriority": "high", + "userVisibleChange": "observable", + "userVisibleSummary": "Keiko 0.3.9 is a customer-hardening bugfix release for self-hosted OpenAI-compatible gateways (for example LiteLLM behind a corporate CA). Knowledge Pod indexing no longer reports an answered embedding-endpoint error as \"model gateway is not reachable\", the embedding path carries HTTP status detail and the same CA trust as chat, a first failed indexing run no longer permanently blocks the pod, workspace reloads no longer surface deterministic 412 conflicts or resurrect closed windows, and the desktop shell fixes an aria-hidden focus violation. It also delivers the Dev knowledge-work readiness stack: honest gateway readiness probes, desktop chat turn-lifecycle hardening with legacy rejection cleanup, grounded catalog refresh fixes, quality-intelligence judge degradation honesty, prompt-enhancer German travel-intent scoping, and window focus-race fixes.", + "affectedStateStores": [], + "stateImpact": [], + "releaseNoteBullets": [ + "Knowledge Pod indexing against self-hosted OpenAI-compatible gateways (LiteLLM and similar) now reports answered embedding failures with their HTTP status instead of a misleading \"model gateway is not reachable\", uses the same certificate trust as chat (system CA fallback), retries transient 5xx/408/425 answers, and recovers automatically after a first failed run instead of pinning the pod to a provisional embedding identity.", + "Workspace state no longer loses dirty snapshots to deterministic 412 conflicts on reload, closed windows stay closed after a reload, and the background-window modal lock blurs focused descendants before applying aria-hidden, fixing the Chrome accessibility violation.", + "Desktop chat readiness and turn lifecycle were hardened: readiness probes verify a usable assistant answer (content-part arrays included), unready models are rejected before persistence on every path, an omitted modelId prefers a conversation-ready chat model, rejected legacy requests leave no orphaned user message and restore chat recency, and cancellation during memory retrieval settles before any provider call.", + "Quality-intelligence runs whose judge prompts exceed the model budget now persist a visible judge degradation instead of presenting an unqualified success, run-progress strings are localized (EN/DE), and the prompt enhancer scopes German travel framing to planning intent so definitions, translations, and price comparisons are no longer rewritten as itinerary planning.", + "Window focus races were closed: a delayed text-entry focus is invalidated by any later window interaction, including resize grabs and pressed-and-held maximize buttons." + ], + "review": { + "status": "reviewed", + "reviewer": "release-owner", + "reviewedAt": "2026-08-18", + "humanApproved": true, + "approvalReference": "github-issue-comment:oscharko-dev/Keiko#3204#5324184870", + "rationale": "The release owner directed this release in the 2026-08-18 working session for a customer deployment the next morning, requiring flawless LiteLLM connectivity, Knowledge Pod creation, and HTML manual indexing. It bundles the merged LiteLLM first-run indexing remediation (#3208), the Dev knowledge-work readiness stack (#3204), and the complete post-merge review-finding repair wave (#3212), all integrated on dev with green required gates." + }, + "userActionRequired": false, + "remediation": "no-action-required", + "portableRuntimeArtifactContract": { + "programEpic": 1944, + "parentEpic": 1942, + "issue": 1948, + "stagingOnly": true, + "signingScope": "evaluation", + "targets": ["windows-x64", "macos-arm64", "macos-x64"] + }, + "traceability": null } ] } diff --git a/scripts/__tests__/resolve-quality-range.test.mjs b/scripts/__tests__/resolve-quality-range.test.mjs index 14f9b27b6..753d16efe 100644 --- a/scripts/__tests__/resolve-quality-range.test.mjs +++ b/scripts/__tests__/resolve-quality-range.test.mjs @@ -75,7 +75,64 @@ describe("immutable quality range resolution", () => { { base: undefined, eventName: "workflow_dispatch", head: HEAD }, () => "", ), - ).toThrow("manual run base could not be resolved to the selected head's parent"); + ).toThrow("run base could not be resolved to the head's parent"); + }); + + it("bounds a branch-creating push at the merge-base with the fallback ref", () => { + const git = vi.fn((args) => { + if (args[0] === "merge-base" && args[1] !== "--is-ancestor") return BASE; + return ""; + }); + // A branch-creating push delivers before=0000…0. Scanning from the repository root swept + // 918 historical commits into the release/0.3.9 secret scan, and bounding at head^ would + // skip earlier commits of a multi-commit branch creation — the merge-base with dev + // precedes every commit the branch introduced. + expect( + resolveQualityRange( + { base: "0".repeat(40), eventName: "push", fallbackBaseRef: "origin/dev", head: HEAD }, + git, + ), + ).toEqual({ base: BASE, head: HEAD }); + expect(git).toHaveBeenCalledWith(["merge-base", "origin/dev", HEAD]); + expect(git).not.toHaveBeenCalledWith(["rev-list", "--max-parents=0", HEAD]); + expect(git).not.toHaveBeenCalledWith(["rev-parse", "--verify", `${HEAD}^`]); + }); + + it("fails closed for a branch-creating push without a fallback base ref", () => { + expect(() => + resolveQualityRange({ base: "0".repeat(40), eventName: "push", head: HEAD }, () => BASE), + ).toThrow("a branch-creating push needs QUALITY_FALLBACK_BASE_REF to bound its scan range"); + }); + + it.each([["empty", ""]])( + "fails closed for a branch-creating push with an %s fallback base ref", + (_label, fallbackBaseRef) => { + expect(() => + resolveQualityRange( + { base: "0".repeat(40), eventName: "push", fallbackBaseRef, head: HEAD }, + () => BASE, + ), + ).toThrow("a branch-creating push needs QUALITY_FALLBACK_BASE_REF to bound its scan range"); + }, + ); + + it.each([ + ["option-like", "--fork-point"], + ["whitespace-embedding", "origin dev"], + ["control-character", "origin/dev\n"], + ["dash-terminated", "origin/dev-"], + ])("rejects a %s fallback base ref instead of passing it to git", (_label, fallbackBaseRef) => { + const git = vi.fn(() => BASE); + // A leading dash would reach `git merge-base` as an OPTION, not a ref; whitespace and + // control characters have no place in a workflow-provided ref. Each must fail closed + // before any git invocation with the hostile value. + expect(() => + resolveQualityRange( + { base: "0".repeat(40), eventName: "push", fallbackBaseRef, head: HEAD }, + git, + ), + ).toThrow("QUALITY_FALLBACK_BASE_REF must be a plain ref name"); + expect(git).not.toHaveBeenCalledWith(["merge-base", fallbackBaseRef, HEAD]); }); it("fails when the fallback is not an immutable commit", () => { diff --git a/scripts/resolve-quality-range.mjs b/scripts/resolve-quality-range.mjs index 7c3306ef1..4b9a4e4d8 100644 --- a/scripts/resolve-quality-range.mjs +++ b/scripts/resolve-quality-range.mjs @@ -9,6 +9,10 @@ import { resolveHostExecutable } from "./lib/host-executable.mjs"; const REPO_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), ".."); const SHA = /^[0-9a-f]{40}$/u; const ZERO_SHA = "0".repeat(40); +// Plain ref names only: a leading dash would be parsed by git as an OPTION (e.g. +// --fork-point) instead of a ref, and whitespace/control characters have no place in a +// workflow-provided ref — fail closed on anything but a boring ref shape. +const SAFE_REF = /^[A-Za-z0-9](?:[A-Za-z0-9._/-]*[A-Za-z0-9])?$/u; function repositoryGit(args) { return execFileSync(resolveHostExecutable("git"), args, { @@ -26,12 +30,33 @@ function requireImmutableSha(value, message) { return value; } -function candidateBase(base, head, eventName, git) { +function candidateBase(base, head, eventName, git, fallbackBaseRef) { if (base !== ZERO_SHA && SHA.test(base ?? "")) return base; + if (eventName === "push") { + // A push that creates a branch delivers the zero SHA as its before-pointer. Falling back + // to the repository root here scanned the ENTIRE history (918 commits on release/0.3.9) + // and failed the gate on long-accepted historical fixtures, while bounding at head^ would + // skip earlier commits of a multi-commit branch creation — a secret introduced and deleted + // again before the head would escape the promised history inspection. The merge-base with + // the workflow-provided fallback ref (dev) precedes every commit the branch creation + // introduced; without that ref this fails closed rather than guessing a narrower range. + if (fallbackBaseRef === undefined || fallbackBaseRef === "") { + throw new Error( + "a branch-creating push needs QUALITY_FALLBACK_BASE_REF to bound its scan range", + ); + } + if (!SAFE_REF.test(fallbackBaseRef)) { + throw new Error("QUALITY_FALLBACK_BASE_REF must be a plain ref name"); + } + return requireImmutableSha( + git(["merge-base", fallbackBaseRef, head]).split("\n")[0], + "new-branch push base could not be resolved against the fallback base ref", + ); + } if (eventName === "workflow_dispatch") { return requireImmutableSha( git(["rev-parse", "--verify", `${head}^`]), - "manual run base could not be resolved to the selected head's parent", + "run base could not be resolved to the head's parent", ); } return requireImmutableSha( @@ -40,10 +65,13 @@ function candidateBase(base, head, eventName, git) { ); } -export function resolveQualityRange({ base, head, eventName }, git = repositoryGit) { +export function resolveQualityRange( + { base, head, eventName, fallbackBaseRef }, + git = repositoryGit, +) { const immutableHead = requireImmutableSha(head, "head must be an immutable commit SHA"); requireCommit(immutableHead, git); - const candidate = candidateBase(base, immutableHead, eventName, git); + const candidate = candidateBase(base, immutableHead, eventName, git, fallbackBaseRef); requireCommit(candidate, git); const resolvedBase = requireImmutableSha( git(["merge-base", candidate, immutableHead]).split("\n")[0], @@ -73,6 +101,7 @@ export function main( { base: env.QUALITY_BASE_SHA, eventName: env.GITHUB_EVENT_NAME, + fallbackBaseRef: env.QUALITY_FALLBACK_BASE_REF, head: env.QUALITY_HEAD_SHA, }, git,