Members

IdeaFileStatusSummaryKatz
ci_gatereqlan rq/distribution/distribution.rqdonePull-request CI and the main release pipeline share one sequential workflow: ["../../.github/workflows/ci.yml"]. ["./distribution.rq".deployment_flow] must not apply changesets or create tags until that workflow succeeds. Order in one job: install workspace packages, compile crates and TypeScript once, then crate tests, ["../core_analysis/check.rq".check], then JS / TS tests ( ["./distribution.rq".prerelease_tests], ["../core_analysis/check.rq".check_meta_implementation], ["../development/commit.rq".rust_fmt] ). `@reqlan/*` packages come from this git checkout ( `workspace:*` ), not from the npm registry. Platform native packages are linked the same way in this workspace through `packageExtensions` in ["../../pnpm-workspace.yaml"]; they are not listed in git `@reqlan/analytical` `optionalDependencies`. A push to main does not start CI a second time as an independent workflow; ["../../.github/workflows/release.yml"] calls ["../../.github/workflows/ci.yml"] with `workflow_call`. Because ["../../.github/workflows/ci.yml"] declares `permissions.contents: write`, the caller job in ["../../.github/workflows/release.yml"] must grant `contents: write` when invoking it. The version-bump commit ( `chore(release):` ) skips the gate and the version job to prevent a recursive run.0.172
deployment_flowreqlan rq/distribution/distribution.rqOn push to main, the release workflow first completes ["./distribution.rq".ci_gate]. If pending changesets remain, it then applies them with `pnpm changeset version`. This bumps package. json for each affected package and writes changelogs. ["../../scripts/prepare-native-packages.mjs"] then copies the `@reqlan/analytical` version onto each platform package ( [version_management] ). The workflow commits the result, creates annotated tags for every bumped publishable package, and pushes the commit and tags back to main. Release tags use `site/v{version}`, `ext/v{version}`, `language/v{version}`, `analytical/v{version}`, `cli/v{version}`, and `mcp/v{version}` where `{version}` is the semver from that package's package. json. Deployment is tag-driven for every channel per ["./distribution.rq".release_tagging]; after ["./distribution.rq".ci_gate], the release workflow only versions and tags. GitHub Actions pushes with the default `GITHUB_TOKEN` do not trigger other workflows, so site and npm deploy are also invoked directly from the release workflow. Optional `RELEASE_PAT` allows tag pushes to trigger downstream workflows for manual reruns and external CI. Recursive runs are prevented by skipping the release workflow for release commits. Tag patterns and downstream deploy workflows follow ["./distribution.rq".release_tagging]. The implementation lives in ["../../.github/workflows/release.yml"].0.224
extension_distributionreqlan rq/distribution/distribution.rqin-progressAzure DevOps builds, tests, packages, and publishes the VS Code extension only for tags matching `ext/v*`. Tags are created by ["./distribution.rq".deployment_flow]. The extension version comes from packages / extension / package. json at the tag; the pipeline must not overwrite it from the tag suffix. The implementation lives in ["../../azure-pipelines.yml"]. The pipeline builds language, packages, and the extension only; it does not run the site static build or install Playwright ( [site_distribution] owns site CI ). Native core-engine binaries for VSIX come from the Azure `build_native` matrix on this git tag ( [vsix_native_not_from_npm], [rust_binary_distribution], [vsix_export] ). GitHub Actions still builds and publishes platform packages on `analytical/v*` for CLI / MCP ( [npm_distribution] ). Before tests Azure stages matrix artifacts into workspace packages ( `prepare-native-packages.mjs --binary-dir` ) and checks the host optionalDependency ( `scripts/ensure-host-native.mjs --no-build` ). VSIX packaging follows ["./distribution.rq".vsix_export]: one VSIX per [native_targets] tuple; Marketplace selects the VSIX matching the extension-host target ( [extension_host_target] ). Marketplace publish is complemented by Open VSX per ["./distribution.rq".openvsx_registry]. Pipeline cache and publish parallelism: [extension_pipeline_cache], [extension_pipeline_publish].0.243
extension_host_targetreqlan rq/distribution/distribution.rqin-progressThe extension host must load the native core engine for its machine. The selection strategy is ["./native_host_binary.rq".native_host_binary]. IndexService and WorkspaceIndex use `NativeWorkspaceIndex` ( ["../core_analysis/rust_port.rq".native_bridge] ). If the engine is missing, activation fails. Loader: ["../../packages/analytical/src/native/load-native.ts"]. The extension registers search folders from ["../../packages/extension/src/analytical_submodule/index.ts"].0.268
extension_packagereqlan rq/distribution/distribution.rqdoneThe VS Code extension lives in packages / extension with npm package name `reqlan-extension` ( Marketplace / Open VSX id `reqlan.reqlan-extension` ). Its package. json version is the Marketplace and Open VSX release version. That version is independent of `@reqlan/analytical` ( [version_management] ).0.088
extension_pipeline_cachereqlan rq/distribution/distribution.rqdoneAzure `build_native` mirrors GitHub `Swatinem/rust-cache` via `Cache@2`: cache rustup + cargo home under `$(Pipeline.Workspace)/rust-cache` ( `CARGO_HOME` / `RUSTUP_HOME` ) and `crates/target`, keyed by OS, `rustTarget`, and `crates/Cargo.lock`. Install rustup only when `$CARGO_HOME/bin/rustc` is missing after restore; otherwise reuse the cached toolchain ( `--no-modify-path` ). Azure `build_test_package` caches the pnpm store keyed by OS and `pnpm-lock.yaml` ( same role as `cache: pnpm` on GitHub ). Do not cache VSIX or napi pipeline artifacts across tags; git at `ext/v*` stays canonical ( [vsix_native_not_from_npm] ). Implementation: ["../../azure-pipelines.yml"]. Related: [extension_distribution], ["./distribution.rq".ci_gate] ( GitHub rust-cache + pnpm ).0.072
extension_pipeline_publishreqlan rq/distribution/distribution.rqdoneMarketplace and Open VSX publish every per-target VSIX in parallel ( `ForEach-Object -ThrottleLimit 6 -Parallel` ), not one after another. Open VSX uses the workspace `ovsx` package ( `pnpm --filter./packages/extension exec ovsx` ); do not `pnpm dlx ovsx` per file. Local `--openvsx` in ["../../scripts/package-extension-targets.mjs"] uses the same `pnpm exec ovsx` path. Implementation: ["../../azure-pipelines.yml"], ["../../packages/extension/package.json"], ["../../scripts/package-extension-targets.mjs"]. Related: [extension_distribution], [openvsx_registry], [vsix_export].0.094
extension_readmereqlan rq/distribution/distribution.rqThe VSIX package must include a README for the Marketplace and Open VSX listings. Contact, Discord, sponsorship, and repository links come from [phonebook_reqs.phonebook] via ["../../scripts/phonebook.ts"] per [phonebook_reqs.extension_readme_links]. Release notes are appended from ["../../packages/extension/CHANGELOG.md"], which Changesets maintains per [version_management]. Generated during extension build from ["../../packages/extension/README.template.md"] by ["../../packages/extension/scripts/generate-readme.ts"] per ["../development/build.rq".extension_readme_build].0.059
grammar_linguistreqlan rq/distribution/distribution.rqpendingThe grammar should be updated to use https://github.com/github-linguist/linguist Acceptance is dependent on maturity and usage. ( this is what gh uses for language rendering etc )0.040
native_targetsreqlan rq/distribution/distribution.rqdoneCanonical VS Code `targetPlatform` / npm `os` + `cpu` tuples for native distribution: - `win32-x64` - `win32-arm64` - `linux-x64` - `linux-arm64` - `darwin-x64` - `darwin-arm64` napi-rs package suffixes map as: `linux-*-gnu`, `darwin-*`, `win32-*-msvc` ( gnu-only for linux; musl / alpine out of scope for the first matrix ). Azure `build_native` uses the same tuples and `ciImage` from ["../../scripts/native-targets.mjs"]. Used by [rust_binary_distribution], [vsix_export], [extension_host_target], and ["./native_host_binary.rq".native_host_binary]. Implementation: ["../../scripts/native-targets.mjs"].0.317
npm_distributionreqlan rq/distribution/distribution.rqin-progressnpm publishing runs only when a `language/v*`, `analytical/v*`, `cli/v*`, or `mcp/v*` tag is pushed. Tags are created by ["./distribution.rq".deployment_flow]; the npm workflow does not publish on ordinary commits. The workflow builds platform binaries when `@reqlan/analytical` was bumped ( `analytical/v*` tag, or `analytical_tag` from the release workflow ). It does not use `github.event_name == 'workflow_call'` for that gate: in a reusable workflow that name is the caller event ( `push` ), and `npm_ref` is the first language / analytical / cli / mcp tag, so a language bump would skip natives. It then publishes each package in sequence with `pnpm --filter <pkg> publish --access public --no-git-checks`. The sequence is language, then all platform packages for [native_targets], then `@reqlan/analytical`, then cli, then mcp. The workflow does not publish `@reqlan/analytical` until every platform package of that `@reqlan/analytical` version is on the npm registry or was published in the same job ( [rust_binary_distribution] ). ["../../scripts/require-natives-published.mjs"] enforces that gate from the analytical package. json version ( not Changesets ). Before each package publishes, ["../../scripts/skip-already-published.mjs"] with `--filter <pkg>` checks the public npm registry and skips that step when the version is already published ( sets `should_publish=false` ). That avoids re-attempting already-published versions under OIDC. Auth uses npm trusted publishing ( OIDC ) from GitHub Actions — no long-lived `NPM_TOKEN`. Workflow requirements: `permissions.id-token: write`, Node ≥ 22. 14 with npm ≥ 11. 5. 1, registry `https://registry.npmjs.org`. Each of `@reqlan/language`, `@reqlan/analytical`, `@reqlan/cli`, `@reqlan/mcp`, and every `@reqlan/analytical-<platform>-<arch>` platform package must have a Trusted Publisher on npmjs. com for GitHub Actions with org / user `littletuna4`, repository `reqlan`, workflow filename `deploy-npm.yml`, allowed action `npm publish`. Package `repository.url` must match `https://github.com/littletuna4/reqlan.git`. Provenance attestations are generated automatically for public packages from this public repo. Bootstrap: first publish of each scoped package can be done locally ( you must be logged in to npm as an `@reqlan` org member ) with `pnpm --filter @reqlan/language publish --access public --no-git-checks`, then platform packages, then analytical, then cli, then mcp — or wait for the trusted-publisher CI path after packages exist and Trusted Publisher is configured. Note: Packages must be `private: true` to skip local `changeset publish` ( `pnpm run release:npm` ), as with `reqlan-extension`. Platform packages are in the Changesets `ignore` list ( `@reqlan/analytical-*` ). Git `@reqlan/analytical` does not list them as `optionalDependencies`. ["../../scripts/prepare-native-packages.mjs"] `--publish-versions` writes pinned optionalDependencies for the npm checkout only. CI publishes platform packages per-package after binaries are built and does not use `changeset publish` for those tarballs. Published packages declare `publishConfig.access: public`. Trusted Publisher is configured on npmjs. com for each `@reqlan/analytical-<platform>-<arch>` package0.266
npm_package_readmereqlan rq/distribution/distribution.rqdonePublishable npm packages ( `@reqlan/language`, `@reqlan/analytical`, `@reqlan/cli`, `@reqlan/mcp` ) ship README. md generated from each package's `README.template.md`. Pattern matches [extension_readme]: centered logo, package name, description, features, phonebook links, and Changesets changelog body. Generated by ["../../scripts/generate-npm-package-readmes.ts"] via root `pnpm run build:readme`. Contact, Discord, sponsorship, and repository links come from [phonebook_reqs.phonebook] via ["../../scripts/phonebook.ts"] per [phonebook_reqs.npm_package_readme_links]. CLI native-engine install note: ["./native_host_binary.rq".published_host_native_install].0.046
openvsx_registryreqlan rq/distribution/distribution.rqin-progressThe extension should be published to the Open VSX registry at https://open-vsx.org so it is installable in editors that use Open VSX instead of the Visual Studio Marketplace. Publishing should use the same tag-driven `ext/v*` releases as ["./distribution.rq".extension_distribution]. Each per-target VSIX from ["./distribution.rq".vsix_export] is published to Open VSX ( Marketplace and Open VSX both select by extension-host `targetPlatform` ). Azure DevOps is the authoritative publish workflow; Open VSX publish belongs in ["../../azure-pipelines.yml"] alongside marketplace deploy. Publish path follows [extension_pipeline_publish].0.166
prerelease_testsreqlan rq/distribution/distribution.rqdoneJS / TS package tests ( `pnpm run test:js` ) run after the shared TypeScript compile ( `pnpm run build:tsc` ) from this git checkout. GitHub CI runs them in the same job as crate tests and ["../core_analysis/check.rq".check], after that compile ( ["./distribution.rq".ci_gate] ). This job runs on every pull request and on main before versioning. Host native addon is required because analytical and language tests load `reqlan-napi`. The host release build compiles `reqlan-napi` only. Crate tests compile `reqlan-lsp`. That binary ships in the VSIX, not in this host package. Azure runs `pnpm run test:js` before VSIX publish ( [extension_distribution] ). Local `pnpm run test` runs `test:js` then `test:rust` ( ["../core_analysis/rust_port.rq".rust_crate_layout] ). The implementation lives in ["../../.github/workflows/ci.yml"]; ["../../.github/workflows/release.yml"] calls it with `workflow_call` as part of ["./distribution.rq".ci_gate]. Related: ["../core_analysis/check.rq".check_meta_implementation]0.069
release_taggingreqlan rq/distribution/distribution.rqDeployment is tag-driven rather than commit-driven for every publishable channel. Tags are created automatically by ["./distribution.rq".deployment_flow], not manually. Site deployments are triggered by Git tags matching `site/v*` via ["./distribution.rq".site_distribution]. VS Code extension publishing is triggered by Azure DevOps tags matching `ext/v*` via ["./distribution.rq".extension_distribution] and ["./distribution.rq".openvsx_registry]. npm publishing is triggered by Git tags matching `language/v*`, `analytical/v*`, `cli/v*`, or `mcp/v*` via ["./distribution.rq".npm_distribution]. Platform native packages ride `analytical/v*` ( same version as `@reqlan/analytical` ); they are not a separate tag prefix. The tag suffix after the channel prefix ( `site/v`, `ext/v`, `language/v`, `analytical/v`, `cli/v`, `mcp/v` ) equals the package. json version at that tag.0.121
root_readmereqlan rq/distribution/distribution.rqThe GitHub repository README is the primary repo lander per ["./landers.rq".landers]. Site, marketplace, repository, Discord, sponsorship, and contact links come from [phonebook_reqs.phonebook] via ["../../scripts/phonebook.ts"] per [phonebook_reqs.root_readme_links]. Generated from ["../../README.template.md"] by ["../../scripts/generate-root-readme.ts"].0.046
rust_binary_distributionreqlan rq/distribution/distribution.rqin-progressOne platform-specific npm package per [native_targets] tuple: `@reqlan/analytical-<platform>-<arch>` ( napi suffixes: `linux-x64-gnu`, `linux-arm64-gnu`, `darwin-x64`, `darwin-arm64`, `win32-x64-msvc`, `win32-arm64-msvc` ). Each package declares `os` and `cpu`, contains the matching core engine `.node`, and uses the `@reqlan/analytical` package. json version as the single source of truth. ["../../scripts/prepare-native-packages.mjs"] writes that version. Changesets ignores `@reqlan/analytical-*` in ["../../.changeset/config.json"]. Git `@reqlan/analytical` does not list platform packages as `optionalDependencies`; this workspace links them through `packageExtensions` in ["../../pnpm-workspace.yaml"]. The published tarball lists pinned optionalDependencies ( `--publish-versions` ) ( [version_management] ). CLI and MCP install the host-matching binary from those published optionalDependencies. The published tarball runs ["./native_host_binary.rq".published_host_native_install] so a host miss prints a warning. Published on the existing `analytical/v*` channel ( [npm_distribution] / [release_tagging] ); not a separate tag channel. The napi build runs when this channel moved: a direct `analytical/v*` tag, or `analytical_tag` from [deployment_flow]. The first npm tag ( `npm_ref` ) can be `language/v*` in the same release, so that ref is not the native-build gate. Website download listing and GitHub-release postinstall are later follow-ups ( out of scope here ). Engine port: ["../core_analysis/rust_port.rq".analytical_rust_port] / ["../core_analysis/rust_port.rq".native_bridge]. Per-target VSIX packaging uses the same package layout under ["../../packages/analytical-native/"], filled by Azure from this git commit ( [vsix_export], [vsix_native_not_from_npm] ). npm tarballs of those packages are for CLI / MCP only. `collect-napi-binary.mjs` copies `reqlan-lsp` only with `--with-lsp`. The npm workflow does not pass that flag. Azure does, because the VSIX ships `bin/reqlan-lsp` ( [vsix_export] ). Implementation: ["../../packages/analytical-native/"], ["../../scripts/prepare-native-packages.mjs"], ["../../scripts/require-natives-published.mjs"], ["../../packages/analytical/scripts/check-host-native.mjs"], ["../../.changeset/config.json"], ["../../.github/workflows/deploy-npm.yml"] build-native job, ["../../azure-pipelines.yml"] build_native job.0.380
site_distributionreqlan rq/distribution/distribution.rqGitHub Pages deployment runs only when an `site/v*` tag is pushed. Tags are created by ["./distribution.rq".deployment_flow]; the site workflow does not deploy on ordinary commits. The static build embeds `/spec` via ["../site/site.rq".spec_html_export], which needs the host `reqlan-napi` binary. The site workflow therefore builds and stages the host native engine ( `scripts/stage-host-native.mjs` with `REQLAN_FORCE_NATIVE_BUILD=1` ) before `pnpm run build`. The implementation lives in ["../../.github/workflows/deploy-site.yml"].0.118
site_packagereqlan rq/distribution/distribution.rqThe static site lives in site / with npm package name `site`. Its package. json version identifies site releases for tagging.0.079
stopgapreqlan rq/distribution/distribution.rqStopgap distribution is at https://marketplace.visualstudio.com/manage/publishers/reqlan0.040
version_managementreqlan rq/distribution/distribution.rqdonePackage versions are managed with Changesets via ["../../.changeset/config.json"]. Publishable channels ( each tag-driven ): - Marketplace / Open VSX: ["./distribution.rq".extension_package] ( private npm package; tagged `ext/v*` ) - GitHub Pages: ["./distribution.rq".site_package] ( tagged `site/v*` ) - npm: `@reqlan/language`, `@reqlan/analytical`, `@reqlan/cli`, and `@reqlan/mcp` ( tagged `language/v*`, `analytical/v*`, `cli/v*`, `mcp/v*` ) `reqlan-extension` has its own semver. It is not version-locked to `@reqlan/analytical`. The extension can update independently of the analytical surfaces it uses ( [extension_package] ). The version of `@reqlan/analytical` is the single source of truth for every `@reqlan/analytical-<platform>-<arch>` package ( [rust_binary_distribution] ). Platform packages are in the Changesets `ignore` list ( `@reqlan/analytical-*` ). Git `@reqlan/analytical` does not list them as `optionalDependencies`, so `changeset version` can run. This workspace still links the checkout packages during `pnpm install` via `packageExtensions` in ["../../pnpm-workspace.yaml"] ( `workspace:*`, not npm ). After `changeset version`, ["../../scripts/prepare-native-packages.mjs"] copies the analytical version onto each platform package. The published tarball lists pinned `optionalDependencies` ( `--publish-versions` ) so CLI and MCP customers get the host binary. Platform native packages are not a separate tag channel; they ride `analytical/v*` ( [rust_binary_distribution] ). VSIX packaging uses the package. json versions in that git commit ( [vsix_native_not_from_npm] ). `@reqlan/language`, `@reqlan/cli`, `@reqlan/mcp`, and the site keep their own versions. Contributors record release intent by adding a changeset file when a publishable package changes.0.233
vsix_exportreqlan rq/distribution/distribution.rqin-progressOne VSIX is built per [native_targets] tuple via `vsce package --target <tuple> --no-dependencies`. Each VSIX keeps today's esbuild-bundled JS ( TS dependency graph stays bundled ); only the matching platform native package is staged into the VSIX so other targets' binaries are excluded. The same VSIX packs `bin/reqlan-lsp` for that target ( ["../extension/language/support/language-server-rust.rq".language_server_rust] ). Azure `collect-napi-binary.mjs --with-lsp` copies that binary into the native artifact. The pack script checks that zip entry by `file_size`. It does not read the binary through a pipe. The napi addon stays for the index host. npm platform packages do not contain it ( [rust_binary_distribution] ). Stamp `targetPlatform` so Marketplace / Open VSX route by extension host ( [extension_host_target], ["./native_host_binary.rq".native_host_binary_distributed] ). Artifact name shape: `reqlan-extension-<version>-<target>.vsix`. The VSIX includes logo assets from the extension media build: PNG for marketplace icon, language file icon, activity bar, and README; WebP as a raster fallback. Implementation: ["../../scripts/package-extension-targets.mjs"], ["../../scripts/prepare-native-packages.mjs"], ["../../scripts/collect-napi-binary.mjs"], ["../../packages/extension/.vscodeignore"] ( `native/`, `bin/` ), ["../../azure-pipelines.yml"].0.446
vsix_native_not_from_npmreqlan rq/distribution/distribution.rqdoneAzure must not use the npm deploy path as an input when it packs VSIXes. Git at the `ext/v*` tag is canonical. Azure compiles the [native_targets] matrix from that commit ( [vsix_export], [extension_distribution] ). npm stays the install path for CLI and MCP only ( [npm_distribution], [rust_binary_distribution] ).0.241
workflow_deduplicationreqlan rq/distribution/distribution.rqExtension publish automation should have a single authoritative workflow to avoid duplicate marketplace releases. Azure DevOps is the authoritative extension publishing workflow per ["./distribution.rq".extension_distribution] and ["./distribution.rq".openvsx_registry]. The site remains deployed by GitHub Actions per ["./distribution.rq".site_distribution]. npm packages are published by GitHub Actions per ["./distribution.rq".npm_distribution]. Versioning and tag creation are owned by GitHub Actions per ["./distribution.rq".deployment_flow].0.040