From 8a7bc4ef84d561c37bfc2dbfd672cd4add87b072 Mon Sep 17 00:00:00 2001 From: Sanskar Date: Fri, 6 Nov 2026 14:20:32 +0530 Subject: [PATCH 01/11] build(engine): remove VitePress and vue-tsc packages and type-check own TypeScript sources with tsc --- package.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/package.json b/package.json index e0a52b0..7975be2 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "package:offline": "tsx scripts/package-offline.ts", "test:offline": "tsx scripts/test-offline.ts", "test:browser-offline": "tsx scripts/test-scarp-offline-browser.ts", - "typecheck": "vue-tsc --noEmit -p tsconfig.json", + "typecheck": "tsc --noEmit -p tsconfig.json", "check:tooling": "tsx scripts/check-tooling.ts", "check:toolchain": "tsx scripts/check-toolchain.ts", "test:toolchain": "tsx scripts/test-toolchain.ts", @@ -98,11 +98,9 @@ "test:docs-slug": "tsx scripts/test-docs-slug.ts" }, "devDependencies": { - "vitepress": "1.6.4", "@types/node": "26.6.6", "typescript": "6.0.3", "tsx": "4.23.15", - "vue-tsc": "3.3.13", "playwright": "1.64.1", "axe-core": "4.14.0", "markdown-it": "14.1.0", From 2d2f6877b769e617a2173d58267c831385b7b34f Mon Sep 17 00:00:00 2001 From: Sanskar Date: Fri, 6 Nov 2026 14:20:36 +0530 Subject: [PATCH 02/11] build(engine): stop type-checking unused VitePress theme and Vue SFC source files --- tsconfig.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 8b50289..454077f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,8 +21,8 @@ }, "include": [ "scripts/**/*.ts", - "docs/.vitepress/**/*.ts", - "docs/.vitepress/**/*.mts", - "docs/.vitepress/**/*.vue" + "docs/.vitepress/site-meta.ts", + "docs/.vitepress/local-search.ts", + "docs/.vitepress/theme/lib/**/*.ts" ] } From cad94f28f17db998a2a46cd8363d011f100e1133 Mon Sep 17 00:00:00 2001 From: Sanskar Date: Fri, 6 Nov 2026 14:20:40 +0530 Subject: [PATCH 03/11] chore(deps): remove obsolete vue-tsc Dependabot hold, retain tested TypeScript compiler API gate --- .github/dependabot.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index fbfcf5a..937d225 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,15 +5,12 @@ updates: schedule: interval: monthly open-pull-requests-limit: 2 - # TypeScript 7 lacks the programmatic API needed by vue-tsc. - # Reconsider after upstream Vue tooling explicitly supports the native compiler. + # TypeScript 6's transpileModule API is used to build the standalone + # browser controller and portable offline Node server. Review TS7 API + # changes and full browser/compiler CI before a major upgrade. ignore: - dependency-name: "typescript" update-types: ["version-update:semver-major"] - # vue-tsc 3.3.14 has a confirmed URL-in-template typecheck regression. - # Permit later patched versions once reviewed; block this one release only. - - dependency-name: "vue-tsc" - versions: ["3.3.14"] - package-ecosystem: github-actions directory: / schedule: From b2051bfe879725cac80b374cee8f112f2d95eec3 Mon Sep 17 00:00:00 2001 From: Sanskar Date: Fri, 6 Nov 2026 14:20:44 +0530 Subject: [PATCH 04/11] docs(tooling): clarify TypeScript-first framework-free tooling policy --- scripts/check-tooling.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/check-tooling.ts b/scripts/check-tooling.ts index 7b8eea0..ced2c59 100644 --- a/scripts/check-tooling.ts +++ b/scripts/check-tooling.ts @@ -3,7 +3,7 @@ import { resolve } from 'node:path' import { fileURLToPath } from 'node:url' // Guard the authored tooling against accidental regressions to JavaScript. -// Markdown, Vue SFC templates and CSS are intentionally retained for VitePress. +// Markdown and CSS are authored project content; old Vue SFC files are temporary legacy evidence, not a website runtime. const scripts = resolve(fileURLToPath(new URL('.', import.meta.url))) const files = readdirSync(scripts) const nonTs = files.filter(name => /\.(?:c?js|mjs|jsx|mts|cts)$/.test(name)) From 3558c391ffbdc6cb7f89535b5e4ab0ea322e0b8a Mon Sep 17 00:00:00 2001 From: Sanskar Date: Fri, 6 Nov 2026 14:21:12 +0530 Subject: [PATCH 05/11] test(toolchain): enforce Scarp-owned production build, pinned TS/Markdown parsers and no VitePress or Vue checker --- scripts/lib/toolchain-policy.ts | 44 +++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/scripts/lib/toolchain-policy.ts b/scripts/lib/toolchain-policy.ts index 639e8f1..9114f1b 100644 --- a/scripts/lib/toolchain-policy.ts +++ b/scripts/lib/toolchain-policy.ts @@ -1,7 +1,7 @@ /** - * Prevent accidental adoption of TypeScript 7 before Vue's embedded-language - * checker can use its native compiler API. This is a deliberate compatibility - * hold, not an assertion that TypeScript 7 is generally unusable. + * Guard the standalone TypeScript documentation build after VitePress removal. + * TS6 is pinned because the engine uses the programmatic transpileModule API; + * review TypeScript 7 API changes before lifting the major-upgrade hold. */ export interface ToolchainPackage { devDependencies?: Record @@ -19,29 +19,41 @@ export function validateToolchain(pkg: ToolchainPackage, dependabotYaml: string) const errors: string[] = [] const deps = pkg.devDependencies ?? {} const ts = deps.typescript - const vue = deps['vue-tsc'] - // Stay on the supported TypeScript 6 line until Vue tooling supports TS7. if (typeof ts !== 'string' || !/^6\.0\.\d+$/.test(ts)) { - errors.push('TypeScript must remain pinned to the supported 6.0.x line') + errors.push('TypeScript must remain pinned to the supported 6.0.x transpilation line') } - if (typeof vue !== 'string' || !/^3\.3\.\d+$/.test(vue)) { - errors.push('Vue SFC type checking must use the reviewed vue-tsc 3.3.x line') + for (const dependency of ['markdown-it','yaml']) { + const version=deps[dependency] + if (typeof version !== 'string' || !/^\d+\.\d+\.\d+$/.test(version)) { + errors.push(dependency + ' must be an explicitly pinned source-parsing dependency') + } } - if (vue === '3.3.14') { - errors.push('vue-tsc 3.3.14 has an unresolved template URL codegen regression') + for (const removed of ['vitepress','vue-tsc']) { + if (removed in deps) errors.push('Removed framework/checker dependency must not return: ' + removed) } - if (pkg.scripts?.typecheck !== 'vue-tsc --noEmit -p tsconfig.json') { - errors.push('Vue and TypeScript sources must retain the vue-tsc typecheck gate') + + const scripts = pkg.scripts ?? {} + if (scripts.typecheck !== 'tsc --noEmit -p tsconfig.json') { + errors.push('TypeScript-only source must be checked using tsc') + } + if (scripts['docs:build'] !== 'tsx scripts/scarp-site/build.ts --production') { + errors.push('Production docs:build must use the Scarp-owned static site generator') } + for (const script of ['docs:dev','docs:preview']) { + const value=scripts[script] + if (typeof value !== 'string' || !value.includes('scripts/scarp-site/serve-dev.ts')) { + errors.push(script + ' must use the Scarp-owned local preview server') + } + } + const npm = npmDependabotBlock(dependabotYaml) if (!npm.includes('ignore:') || !/dependency-name:\s*["']?typescript["']?/.test(npm) || !npm.includes('version-update:semver-major')) { - errors.push('Dependabot npm updates must ignore TypeScript major versions') + errors.push('Dependabot must retain the TypeScript major-upgrade review gate') } - if (!/dependency-name:\s*["']?vue-tsc["']?/.test(npm) || - !npm.includes('versions: ["3.3.14"]')) { - errors.push('Dependabot npm updates must hold vue-tsc 3.3.14 specifically') + if (/dependency-name:\s*["']?(?:vitepress|vue-tsc)["']?/.test(npm)) { + errors.push('Dependabot must not retain obsolete VitePress or vue-tsc rules') } return errors } From 6211a8cc1df3275a2d76b6d1920b6e90a6d48f72 Mon Sep 17 00:00:00 2001 From: Sanskar Date: Fri, 6 Nov 2026 14:21:35 +0530 Subject: [PATCH 06/11] test(toolchain): replace Vue checker tests with 13 framework-free dependency and build regressions --- scripts/test-toolchain.ts | 53 ++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/scripts/test-toolchain.ts b/scripts/test-toolchain.ts index b94e31c..d27ce5e 100644 --- a/scripts/test-toolchain.ts +++ b/scripts/test-toolchain.ts @@ -17,23 +17,42 @@ function mutatePackage(changes: Partial): ToolchainPackage { scripts: { ...pkg.scripts, ...changes.scripts } } } - +let negative=0 +function mustFail(name:string,modified:ToolchainPackage,config=yaml,contains?:string):void{ + const errors=validateToolchain(modified,config) + assert.ok(errors.length>0,name+' must fail source/toolchain policy') + if(contains)assert.ok(errors.some(error=>error.includes(contains)), + name+' must fail the expected policy') + negative++ +} for (const [name, changed] of [ - ['TypeScript 7', { typescript: '7.0.2' }], - ['unsupported TypeScript prerelease', { typescript: '6.1.0-rc.1' }], - ['old Vue checker', { 'vue-tsc': '2.2.12' }], - ['regressed Vue checker', { 'vue-tsc': '3.3.14' }] + ['unreviewed TypeScript 7', {typescript:'7.0.2'}], + ['unsupported TypeScript prerelease', {typescript:'6.1.0-rc.1'}], + ['reintroduced VitePress', {vitepress:'1.6.4'}], + ['reintroduced vue-tsc', {'vue-tsc':'3.3.13'}], + ['unreviewed Markdown parser', {'markdown-it':'latest'}], + ['unreviewed YAML parser', {yaml:'latest'}] ] as const) { - assert.ok(validateToolchain(mutatePackage({ devDependencies: changed }), yaml).length, - name + ' must be rejected') + mustFail(name,mutatePackage({devDependencies:changed})) } -assert.ok(validateToolchain(mutatePackage({ - scripts: { typecheck: 'tsc --noEmit -p tsconfig.json' } -}), yaml).some(error => error.includes('vue-tsc')), 'cannot skip Vue SFC checking') -assert.ok(validateToolchain(pkg, yaml.replace('version-update:semver-major', 'version-update:semver-patch')) - .some(error => error.includes('Dependabot')), 'major-upgrade guard must stay enabled') -assert.ok(validateToolchain(pkg, yaml.replace('dependency-name: "typescript"', 'dependency-name: "vitepress"')) - .some(error => error.includes('Dependabot')), 'guard must target TypeScript') -assert.ok(validateToolchain(pkg, yaml.replace('versions: ["3.3.14"]', 'versions: ["3.3.15"]')) - .some(error => error.includes('vue-tsc 3.3.14 specifically')), 'known-regression hold must target the exact release') -console.log('PASS: supported TypeScript and Vue versions, SFC checks and Dependabot guard with eight negative tests') +mustFail('missing Markdown parser',mutatePackage({ + devDependencies:{'markdown-it':undefined} +}),yaml,'markdown-it') +mustFail('Vue typechecker in main script',mutatePackage({ + scripts:{typecheck:'vue-tsc --noEmit -p tsconfig.json'} +}),yaml,'tsc') +mustFail('VitePress production build',mutatePackage({ + scripts:{'docs:build':'vitepress build docs'} +}),yaml,'Scarp-owned') +mustFail('VitePress local developer server',mutatePackage({ + scripts:{'docs:dev':'vitepress dev docs'} +}),yaml,'Scarp-owned') +mustFail('incorrect Dependabot scope',pkg, + yaml.replace('dependency-name: "typescript"','dependency-name: "vitepress"'),'Dependabot') +mustFail('disabled major-upgrade review',pkg, + yaml.replace('version-update:semver-major','version-update:semver-patch'),'Dependabot') +mustFail('obsolete VitePress ignore rule',pkg, + yaml.replace('ignore:\n','ignore:\n - dependency-name: "vitepress"\n versions: ["1.6.4"]\n'), + 'obsolete') +console.log('PASS: Scarp-owned TypeScript toolchain, source-parser locks, VitePress removal and '+ + negative+' negative policy regressions') From 20d695b86f5fa09fbf2a35a005e85e83b1cfad07 Mon Sep 17 00:00:00 2001 From: Sanskar Date: Fri, 6 Nov 2026 14:22:01 +0530 Subject: [PATCH 07/11] docs(toolchain): report independent TypeScript renderer policy rather than retired Vue checker --- scripts/check-toolchain.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/check-toolchain.ts b/scripts/check-toolchain.ts index cf84139..21adb20 100644 --- a/scripts/check-toolchain.ts +++ b/scripts/check-toolchain.ts @@ -11,5 +11,5 @@ if (errors.length) { for (const error of errors) console.error('FAIL toolchain: ' + error) process.exitCode = 1 } else { - console.log('PASS: TypeScript 6, Vue SFC checker and Dependabot major-update guard') + console.log('PASS: framework-free Scarp renderer, TypeScript 6 and Dependabot major-update guard') } From ad709a71c156d201cb692b763eecd245757630d9 Mon Sep 17 00:00:00 2001 From: Sanskar Date: Fri, 6 Nov 2026 14:22:05 +0530 Subject: [PATCH 08/11] ci(engine): rename obsolete Vue toolchain check to own renderer gate --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 39e86c3..27f28ea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: run: npm run scarp:test - name: Ensure documentation tooling uses TypeScript run: npm run check:tooling - - name: Verify supported Vue/TypeScript toolchain and dependency-update policy + - name: Verify Scarp-owned TypeScript renderer, parsing libraries and update policy run: npm run check:toolchain && npm run test:toolchain - name: Check pages and local links run: npm run check:docs From 08040582b3de7c0f6435f149d4bb6ed99ecf842f Mon Sep 17 00:00:00 2001 From: Sanskar Date: Fri, 6 Nov 2026 14:22:09 +0530 Subject: [PATCH 09/11] ci(pages): describe framework-free production toolchain gate --- .github/workflows/pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 17c1c43..d6852cd 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -33,7 +33,7 @@ jobs: run: npm run check:alpha6-ast && npm run test:alpha6-ast - name: Validate bilingual compiler host and capability diagnostics run: npm run check:alpha6-diagnose && npm run test:alpha6-diagnose - - name: Retain transitional compiler/toolchain compatibility checks + - name: Validate independent TypeScript renderer and dependency update policy run: npm run check:toolchain && npm run test:toolchain - name: Regression-test complete bilingual sitemap coverage run: npm run test:sitemap From 47dab10737fb60055dd0b90f52a2727250cae61d Mon Sep 17 00:00:00 2001 From: Sanskar Date: Fri, 6 Nov 2026 14:22:12 +0530 Subject: [PATCH 10/11] docs(readme): clarify legacy configuration files remain but runtime and packages are removed --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8829d66..c43961c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Scarp Documentation -**Custom documentation engine:** Scarp Docs now builds from the Scarp-owned TypeScript generator, with bilingual HTML, local search, responsive layout and offline-browser tests. See [architecture and migration gates](SCARP-DOCS-ENGINE.md) and [Issue #70](https://github.com/scarp-lang/scarp-docs/issues/70). Legacy VitePress/Vue validation code and dependencies are transitional and will be removed after the new Pages deployment is verified. No stable release is implied. +**Custom documentation engine:** Scarp Docs now builds from the Scarp-owned TypeScript generator, with bilingual HTML, local search, responsive layout and offline-browser tests. See [architecture and migration gates](SCARP-DOCS-ENGINE.md) and [Issue #70](https://github.com/scarp-lang/scarp-docs/issues/70). The published site uses no VitePress/Vue package. Historical source evidence and configuration text are temporarily retained until all release-policy validators are migrated to the owned engine. No stable release is implied. Official TypeScript-generated documentation for the experimental [Scarp Programming Language](https://github.com/scarp-lang/scarp). From 3acbf169ce10e4cdd2fe88b92fb4553e40b01de6 Mon Sep 17 00:00:00 2001 From: Sanskar Date: Fri, 6 Nov 2026 14:22:16 +0530 Subject: [PATCH 11/11] docs(engine): document retirement of VitePress packages and remaining source migration --- SCARP-DOCS-ENGINE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SCARP-DOCS-ENGINE.md b/SCARP-DOCS-ENGINE.md index 4d9a8e0..8324bc1 100644 --- a/SCARP-DOCS-ENGINE.md +++ b/SCARP-DOCS-ENGINE.md @@ -45,4 +45,4 @@ The engine's test build is generated under artifacts/scarp-engine-preview/scarp- The renderer escapes unreviewed raw Markdown HTML. It explicitly recognizes only the project's callouts and named widgets; future embedded content must be implemented and tested rather than bypassing HTML safety. The core language reference remains pinned to v0.0.5-alpha.1. The latest published compiler verified at migration start is v0.0.6-alpha.1, not the changing compiler main branch. -The Scarp-owned renderer is now the production-build candidate. The legacy VitePress/Vue dependencies, old theme/config and a few source-evidence checks remain temporarily for compatibility; they are no longer the website renderer or Pages build. Remove them after live Pages, offline archive, and release CI have independently confirmed the new output. Track completion in Issue #70. +The Scarp-owned renderer is now the production-build candidate. The VitePress and vue-tsc npm dependencies have been removed; old theme/config source fixtures and some evidence checks remain temporarily to protect compiler and bilingual regression coverage. None of these remaining files render or serve Pages. Remove them after live Pages, offline archive, and release CI have independently confirmed the new output. Track completion in Issue #70.