

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
12345# VS Code OSS Third-Party-Notices pipeline67This directory contains the thin VS Code-specific layer around Component Governance (CG) for producing OSS third-party notices. It replaces the legacy custom OSS tool with CG plus a gap-filling scanner, so release owners do not need to babysit `ThirdPartyNotices.txt` every release. The generated output should be at least as good as the legacy tool: CG provides the base NOTICE, the local scanner fills known CG gaps, and human-authored overrides cover the small set that automation cannot safely resolve.89The pipeline has two halves: **generation** (this `oss/` directory — CG + scanner + merge, producing the `notice_output` artifact) and **application** (the cutover that swaps the merged notice into the shipped product — see "Applying the NOTICE (cutover)" below).1011## Architecture1213The product-quality pipeline in `build/azure-pipelines/product-quality-checks.yml` is the main CI entry point.14151. `notice@0` generates the CG base NOTICE at `ThirdPartyNotices.generated.txt`.162. `scan-licenses.ts` scans local sources CG misses and writes `ThirdPartyNotices.extensions.txt`, plus sibling index files used by the merge step.173. `merge-notices.ts` merges the CG output and scanner output, then applies `cglicenses.json` overrides through `apply-overrides.ts`.184. `check-pr-dependencies.ts` is used by `pr-oss-check.yml` as a PR-time gate. It blocks dependency additions that have no license source.195. If CG is down or `notice@0` emits an empty/non-trivial failure output, the pipeline substitutes the last good `ThirdPartyNotices.generated.txt` artifact from the same branch, then from `main`. Only the CG portion is cached; local scanning and overrides still run fresh against the current commit.2021Final merge output is uploaded as `ThirdPartyNotices.new.txt` in the `notice_output` artifact.2223## Pipeline flow in CI2425In `product-quality-checks.yml`:26271. Component Detection runs with `ComponentGovernanceComponentDetection@0`.282. `notice@0` writes `$(Build.SourcesDirectory)/ThirdPartyNotices.generated.txt` and is `continueOnError: true`.293. The cache fallback checks whether the CG file exists and is larger than 1 KB. If not, it downloads the latest `notice_output` artifact for the current branch, then `main`, and copies the cached `ThirdPartyNotices.generated.txt` into place.304. TypeScript compiles the OSS scripts into `.oss-build-out`:31 - `apply-overrides.ts`32 - `scan-licenses.ts`33 - `parse-notices.ts`34 - `merge-notices.ts`355. `scan-licenses.js` runs with `--repo`, `--cg`, and `--output`.366. `merge-notices.js` runs with `--cg`, `--extensions`, `--cglicenses`, and `--output`.377. The generated CG file, scanner file, final merged file, and optional cache metadata are uploaded under `notice_output`.3839## Applying the NOTICE (cutover)4041Generation (above) produces the merged `ThirdPartyNotices.new.txt` in the `notice_output` artifact. **Application** is the cutover that makes that file the one VS Code actually ships, replacing the legacy mixin notice.4243Consumer script: `build/azure-pipelines/common/downloadNotice.ts` (read its header comment for the full design rationale).4445How it works, per desktop platform compile template (`build/azure-pipelines/{win32,linux,darwin}/steps/product-build-*-compile.yml`):46471. **Pull CG NOTICE (background)** — at compile start, `deemon --detach` launches `downloadNotice.ts` as a detached poller. It polls the parallel Quality stage's `notice_output` artifact while compilation runs, so the wait overlaps work already happening.482. **Apply CG NOTICE** — right before gulp packages the app, `deemon --attach` blocks on that poller. It downloads, extracts, validates the merged notice, and **overwrites the repo-root `ThirdPartyNotices.txt`**. `build/gulpfile.vscode.ts` then packages whatever file is at that path → the CG notice ships.4950Only the 7 desktop targets that bundle a notice run these steps (win32 x64/arm64, darwin universal, linux x64/arm64/armhf). REH/server/web/alpine are unaffected.5152### Fallback chain (never fail the build)5354`downloadNotice.ts` is **non-fatal — it always exits 0.** A notice problem must never break packaging. The outcomes, in order:55561. **CG fresh** — the `notice_output` artifact is present and valid → overwrite with it.572. **Cached CG** — if CG generation failed upstream, the Quality stage substitutes the last good `ThirdPartyNotices.generated.txt` (same branch, then `main`) before the artifact is published — so the consumer still gets a CG notice.583. **Legacy** — if no usable artifact is available, the legacy mixin notice that `mixin-quality.ts` already laid down is left in place. `mixin-quality.ts` is deliberately left untouched (it's a shared chokepoint used by 8+ pipelines), which is what guarantees we never ship with *no* notice.5960The accept-gate validates the *extracted content* (file present AND non-trivial) inside the poll loop — it does not trust the artifact listing alone. A mid-upload miss re-polls rather than falling back, which prevents a "mixed notice" race where one platform ships legacy while its siblings ship CG.6162### Rollback lever6364A queue-time checkbox **"Use legacy OSS Notice"** (parameter `VSCODE_USE_LEGACY_OSS_NOTICE`, default `false`) is the instant rollback. When checked, it derives `VSCODE_OVERWRITE_TPN=false`, and `downloadNotice.ts` skips the overwrite so the legacy notice ships — no code change or redeploy needed.6566> ⚠️ `downloadNotice.ts` normalizes the flag with `.trim().toLowerCase()` before comparing, so YAML casing (`true`/`false` vs `True`/`False`) can't break the rollback lever. The pipeline still derives `VSCODE_OVERWRITE_TPN` as a lowercase string literal (`'true'`/`'false'`) for clarity. See the comment in `product-build-variables.yml`.6768### Diagnosing a build6970`downloadNotice.ts` logs three greppable markers so a build log answers "did the cutover work?":7172- `[notice-cutover] RESULT=fresh` — overwrote from `notice_output` (the happy path).73- `[notice-cutover] RESULT=fallback` — artifact missing → kept the legacy notice.74- `[notice-cutover] RESULT=disabled` — feature flag off → kept the legacy notice.7576To confirm a shipped artifact carries the CG notice, the root `resources/app/ThirdPartyNotices.txt` should be the large CG-merged file (multi-MB) rather than the ~3 MB legacy notice. Validate *intra-build* parity — all platforms in one build should produce a byte-identical notice (same SHA-256) — rather than checking against a fixed byte count, since CG's exact output size varies run-to-run.7778## Script reference7980### `scan-licenses.ts`8182Purpose: produces the supplemental NOTICE entries that CG misses.8384Invocation in CI:8586```sh87node .oss-build-out/scan-licenses.js \88 --repo "$(Build.SourcesDirectory)" \89 --cg "$(Build.SourcesDirectory)/ThirdPartyNotices.generated.txt" \90 --output "$(Build.ArtifactStagingDirectory)/ThirdPartyNotices.extensions.txt"91```9293Key inputs:9495- `--repo`: VS Code repo root.96- `--cg`: optional CG NOTICE. Used to build `cgCovered` and `cgBodies`, so scanner network work is bounded and Cargo stub bodies can be detected.97- `node_modules` trees under root, built-in extensions, `remote`, and `build`.98- `cgmanifest.json` files.99- `Cargo.lock` files.100101Key outputs:102103- Supplemental NOTICE text at `--output`.104- Presence index at `<output>.presence.json` unless `--presence` is supplied.105- Cargo stub override index at `<output>.stuboverride.json` unless `--stuboverride` is supplied.106107Scanner sections:108109- Section 1 scans built-in extension dependencies. CG skips npm packages with `engines.vscode`, but VS Code ships built-in extensions, so their bundled dependencies are scanned from extension `node_modules` folders.110- Section 2 scans root `node_modules` for packages whose LICENSE files exist on disk but whose ClearlyDefined coverage did not produce CG NOTICE text.111- Section 3 reads `licenseDetail` from `cgmanifest.json`, and for uncovered git components without inline text it tries `fetchLicenseFromGitRepo()` at the pinned `commitHash`.112- Section 4 harvests Rust crate licenses from `Cargo.lock`; details below.113- Section 5 enumerates platform-specific npm binary packages; details below.114115### `merge-notices.ts`116117Purpose: combines CG NOTICE entries, scanner entries, Cargo stub replacements, and `cglicenses.json` overrides into one NOTICE file.118119Invocation in CI:120121```sh122node .oss-build-out/merge-notices.js \123 --cg "$(Build.SourcesDirectory)/ThirdPartyNotices.generated.txt" \124 --extensions "$(Build.ArtifactStagingDirectory)/ThirdPartyNotices.extensions.txt" \125 --cglicenses "$(Build.SourcesDirectory)/cglicenses.json" \126 --output "$(Build.ArtifactStagingDirectory)/ThirdPartyNotices.new.txt"127```128129Key behavior:130131- Parses both input NOTICE files.132- Deduplicates by lowercased `<name>@<version>`, preserving multiple shipped versions of the same package.133- CG normally wins collisions.134- Exception: keys listed in `<extensions>.stuboverride.json` let scanner Cargo entries replace CG entries whose body is only an SPDX-expression stub.135- Reads `<extensions>.presence.json` so override injection can distinguish present-but-unlicensed packages from stale overrides.136- Applies `cglicenses.json` with `applyOverrides()`.137- Writes sorted NOTICE output with provenance markers for scanner, Cargo stub override, and manual override entries.138139### `apply-overrides.ts`140141Purpose: reads and applies human-authored `cglicenses.json` entries.142143Key inputs:144145- `cglicenses.json` parsed by `readCglicenses()` after `stripJsonComments()` removes JSONC line comments.146- The merged `Map<string, MergedEntry>` from `merge-notices.ts`.147- Optional `presentNames` from the scanner presence index.148- Optional URI fetching for `fullLicenseTextUri` entries.149150Supported override shapes:151152- `{ name, prependLicenseText }`153- `{ name, fullLicenseText }`154- `{ name, fullLicenseTextUri, prependLicenseText? }`155- Optional `version` narrows matching to one package version.156- Legacy `licenseDetail` is treated as an alias for `fullLicenseText`.157158Key behavior:159160- Matching is case-insensitive on `name` and exact on `version`.161- Matching overrides edit existing entries.162- Overrides with usable text and a present package inject a new `cglicenses-override` entry.163- Overrides for names absent from the presence index are stale: warn and skip.164- Overrides with no target and no usable text are unmatched; `--strict` in `merge-notices.ts` fails on unmatched entries or URI errors, but stale entries are warn-only.165166### `parse-notices.ts`167168Purpose: parses NOTICE text files for diagnostics and for scanner logic.169170CLI modes:171172```sh173node parse-notices.js --file <path>174node parse-notices.js --diff <pathA> <pathB>175```176177Key behavior:178179- `parseNoticeFile()` returns package name, version, license, line number, license text length, and optional `licenseText`.180- The parser recognizes separator-delimited NOTICE entries and uses `isPackageHeader()` heuristics to avoid treating license prose as package headers.181- Section 4 in `scan-licenses.ts` imports this parser to detect CG entries whose body is just an SPDX expression.182183### `check-pr-dependencies.ts`184185Purpose: PR-time license coverage gate for dependency changes.186187Invocation in `pr-oss-check.yml`:188189```sh190node .oss-build-out/check-pr-dependencies.js \191 --repo "$(Build.SourcesDirectory)" \192 --base "origin/main" \193 --head "HEAD" \194 --cglicenses "$(Build.SourcesDirectory)/cglicenses.json"195```196197Key behavior:198199- Diffs changed `package.json` files between `--base` and `--head`.200- For added dependencies, passes only if one of these is true:201 - ClearlyDefined has usable license metadata and a non-zero score.202 - A LICENSE file exists in local or hoisted `node_modules`.203 - `cglicenses.json` has an override for the package.204- For removed dependencies, fails if `cglicenses.json` still has an override for that package.205- `--no-clearlydefined` disables the HTTP lookup for offline runs.206207### `cglicenses.json`208209Purpose: last-resort manual override file at repo root.210211Use this only when CG and direct source scanning genuinely cannot provide usable text. Entries are read by `readCglicenses()` and applied by `applyOverrides()` during merge.212213Important: the contents must be human-authored. Do not machine-manufacture license or copyright text. If CG's raw output has wrong text, file an upstream bug and ship CG's output as-is rather than hand-authoring a replacement. Add an override only when CG has no usable text or when a package lacks text in a way CELA has approved for manual override.214215## Notable scanner details216217### Cargo Section 4218219Section 4 closes two Rust gaps:2202211. Crates in `Cargo.lock` that are absent from CG.2222. Crates where CG emitted the SPDX expression as the NOTICE body, such as `Zlib OR Apache-2.0 OR MIT`, instead of real license text.223224Important functions and constants:225226- `parseCargoLock()` extracts `name`, `version`, and `source` from `[[package]]` blocks.227- `fetchCratesIoJson()` calls `https://crates.io/api/v1/crates/<name>` with `CRATES_IO_USER_AGENT`.228- `getCrateRepository()` applies legacy repository URL overrides for crates such as `isatty`, `redox_syscall`, `redox_termios`, and `termion`.229- `crateLicenseRefs()` tries `v<version>`, `<version>`, `<name>-v<version>`, `<name>-<version>`, then `main` and `master`.230- `isSpdxStub()` detects CG bodies that are only SPDX expressions.231- `fetchCargoLicense()` uses SPDX IDs to fetch real per-license files such as `LICENSE-MIT` or `LICENSES/Apache-2.0.txt`, with `fetchLicenseFromGitRepo()` as a generic fallback.232- `hasSpdxAnd()` warns when the expression contains `AND`.233234Maintenance rules:235236- OR-license selection is first-in-expression wins: `spdxLicenseIds()` preserves order and `fetchCargoLicense()` returns the first SPDX ID that yields a real body. For `OR`, that is the licensee choice.237- Conjunctive `AND` expressions are not reduced to one safe body. The scanner warns with `AND-LICENSE INCOMPLETE`; add a human-authored `cglicenses.json` override with the combined required text if this appears.238- Cargo license fetch failures should warn and continue, not crash the build.239240Tests:241242- `cargo-section4.test.ts` covers `isSpdxStub()`, `parseCargoLock()`, `getCrateRepository()`, and `crateLicenseRefs()` without network.243- `cargo-section4.live.ts` is a bounded live check that hits crates.io and GitHub for representative crates.244245### Platform-binary Section 5246247Section 5 closes a parity gap with the legacy OSS tool for arch-specific npm packages. Packages such as `@img/sharp-win32-x64` or `@esbuild/linux-x64` are optional dependencies of an arch-independent parent. On a single-platform build agent, only the host arch may be installed, but VS Code ships multiple platform and arch combinations.248249Important functions and constants:250251- `ARCH_SUFFIX_RE` and `isArchPackageName()` identify arch-bearing npm package names.252- `VSCODE_SHIPPED_PLATFORMS` is currently `darwin`, `linux`, `linuxmusl`, and `win32`.253- `VSCODE_SHIPPED_ARCHS` is currently `x64`, `arm64`, and `arm`.254- `isShippedArch()` strips ABI suffixes like `-gnu`, `-musl`, `-msvc`, `-glibc`, `-gnueabihf`, `-eabihf`, and `-androideabi`, then checks the static shipped sets.255- `npmLicenseId()` reads npm license shapes: string, `{ type }`, `licenses: [{ type }]`, and `licenses: [string]`.256- `fetchNpmRegistryJson()` fetches a package packument when an arch child is not installed on disk.257- `familyText()` caches license text by repository URL and reuses it across arch siblings.258- `parentTextIfCompatible()` allows parent text fallback only when parent and child license IDs match exactly, case-insensitively.259260Maintenance rules:261262- The shipped-arch filter intentionally uses the static constants `VSCODE_SHIPPED_PLATFORMS` and `VSCODE_SHIPPED_ARCHS` in `scan-licenses.ts`.263- Do not import these constants from `build/agent-sdk/common.ts`. Agent SDK excludes `armhf` and uses `alpine` where npm package names use `linuxmusl`, so it is not a direct fit for this scanner.264- If VS Code adds or removes a shipped platform or arch, update those constants. The source of truth is noted in the code comment: `build/azure-pipelines/product-build.yml` plus `build/agent-sdk/common.ts`. Expect this to change about once a year.265- Each arch child's own license ID is authoritative. Do not blindly reuse parent license text across a different child license ID; that would repeat the legacy sharp/libvips defect.266267Tests:268269- `platform-binary.test.ts` covers arch suffix recognition, shipped-arch filtering, npm license shape parsing, family text reuse, and parent fallback compatibility.270271## Running locally272273A helper exists at `build/azure-pipelines/oss/run-local.ps1`.274275From the oss directory:276277```powershell278.\run-local.ps1279```280281Useful options:282283```powershell284.\run-local.ps1 -CgNotice C:\path\to\ThirdPartyNotices.generated.txt285.\run-local.ps1 -SkipScan286.\run-local.ps1 -RepoRoot C:\src\vscode.worktrees\oss-cg-validation -OutDir C:\path\to\oss-local287```288289What it does:2902911. Runs `scan-licenses.ts` through `npx --yes tsx`.2922. Writes `ext-notices.txt` and `ext-notices.txt.presence.json` under `-OutDir`.2933. Runs `merge-notices.ts` with `cglicenses.json`.2944. Writes `ThirdPartyNotices.new.txt` and a focused summary.295296Notes:297298- Pass `-CgNotice` with a cached CG NOTICE for realistic local validation. Without it, the merge still exercises override injection and stale detection, but it does not represent the full CG base.299- If root `node_modules` is missing, run `npm i` first or the presence index will be incomplete.300- Full validation is parity against the legacy OSS tool's `ThirdPartyNotices.txt`: the new output should be at least as good as legacy. Use `parse-notices.ts --diff` to compare NOTICE files and inspect package/version differences.301302## Unit checks303304Run from `build/azure-pipelines/oss`:305306```powershell307npx tsx cargo-section4.test.ts308npx tsx platform-binary.test.ts309```310311Optional live Cargo check:312313```powershell314npx tsx cargo-section4.live.ts315```316317The live check performs bounded network calls to crates.io and GitHub. It is useful for validating the real Section 4 fetch path without running a full scanner pass over every crate.318319## Maintenance rules320321- Keep `cglicenses.json` human-authored. Never synthesize license or copyright text by script, model, or other automation.322- Add `cglicenses.json` entries only for genuine no-usable-text gaps. If CG returns wrong raw text, file an upstream bug and ship CG's result as-is rather than replacing it with a hand-authored body.323- Preserve the `name@version` merge key behavior. Multiple shipped versions of a package must remain separate NOTICE entries.324- Treat stale overrides as warn-only in the release pipeline. The PR-time gate is the enforcement point for dependency additions/removals.325- When updating shipped platform or arch support, update `VSCODE_SHIPPED_PLATFORMS` and `VSCODE_SHIPPED_ARCHS` in `scan-licenses.ts`, then update `platform-binary.test.ts` expectations.326- When changing Cargo license logic, update `cargo-section4.test.ts`, and run `cargo-section4.live.ts` if the network fetch path changed.327- Scanner network failures should log and continue. A service outage should not crash the build unless a later explicit validation step chooses to fail.328329## Pending330331The scanner does not yet consume the bundled `ThirdPartyNotices` files from externally-built, pre-built built-in extensions downloaded into the product. The planned addition under investigation is to read those notices for `js-debug`, `js-debug-companion`, and `js-profile-table`, so their own bundled dependencies are covered even though those extensions are built outside this repo.332333### `audit-notices.ts`334335Purpose: pre-ship sanity check that validates a generated NOTICE file against the repo's declared dependencies.336337Invocation:338339```sh340npx tsx build/azure-pipelines/oss/audit-notices.ts \341 --notice <path-to-ThirdPartyNotices.new.txt> \342 --repo .343```344345What it checks:3463471. **NOTICE stats** — total entries, duplicate detection (same name@version = bug), multi-version packages (expected), license type breakdown.3482. **Repo manifest cross-reference** — walks all `package.json` (direct deps), `package-lock.json` (full transitive tree, dev filtered out), `Cargo.lock`, and `cgmanifest.json`. Reports overlap, NOTICE-only entries (CG transitive deps), and manifest-only gaps (packages missing from the NOTICE).3493. **Summary** — coverage percentage and actionable gap list.3504. **Package source breakdown** — per-lockfile package counts sorted by size. Shows which extensions/directories contribute the most dependencies (e.g., `extensions/copilot: 329 packages`).351352Key behavior:353354- Lockfile parsing filters out `dev: true` and `devOptional: true` entries — only non-dev (shipping) packages are counted.355- Cross-reference uses lowercase package names for matching.356- The "manifest-only" gap list is the primary ship-readiness signal: each gap should be explainable (binary component, known TODO, platform-specific absence).357358When to use:359360- Before opening a PR: download `notice_output` from the latest CI build and run locally.361- After a build: verify the .new.txt artifact covers all declared dependencies.362- The script does NOT require `node_modules` on disk — it reads lockfiles as the ground truth for the full transitive dependency tree.363
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| microsoft/vscodeextensions/copilot/src/platform/authentication/common/AGENTS.md · 189k | AGENTS.md | archsecurityagent-behaviour | 58/100 | 14 days ago | |
| microsoft/vscode.github/instructions/oss.instructions.md · 189k | Copilot instructions | git | 44/100 | 14 days ago | |
| microsoft/vscode.github/copilot-instructions.md · 189k | Copilot instructions | stylearchtypesui+2 | 74/100 | 13 days ago | |
| microsoft/vscode.github/instructions/accessibility.instructions.md · 189k | Copilot instructions | styledo-not | 61/100 | 14 days ago | |
| microsoft/vscode.github/instructions/agentHostTesting.instructions.md · 189k | Copilot instructions | teststyletesting-strategyagent-behaviour | 55/100 | 7 days ago | |
| microsoft/vscode.github/instructions/best-practices.instructions.md · 189k | Copilot instructions | styleui | 60/100 | today | |
| microsoft/vscode.github/instructions/chat.instructions.md · 189k | Copilot instructions | agent-behaviour | 39/100 | today | |
| microsoft/vscode.github/instructions/coding-guidelines.instructions.md · 189k | Copilot instructions | styletypesuidocs | 60/100 | 14 days ago | |
| microsoft/vscode.github/instructions/committing.instructions.md · 189k | Copilot instructions | do-not | 23/100 | 14 days ago | |
| microsoft/vscode.github/instructions/css-best-practices.instructions.md · 189k | Copilot instructions | styleui | 29/100 | 14 days ago | |
| microsoft/vscode.github/instructions/design-philosophy.instructions.md · 189k | Copilot instructions | style | 34/100 | 14 days ago | |
| microsoft/vscode.github/instructions/design-tokens.instructions.md · 189k | Copilot instructions | styledo-not | 65/100 | 14 days ago | |
| microsoft/vscode.github/instructions/interactive.instructions.md · 189k | Copilot instructions | ui | 43/100 | 14 days ago | |
| microsoft/vscode.github/instructions/notebook.instructions.md · 189k | Copilot instructions | no sections | 48/100 | 14 days ago | |
| microsoft/vscode.github/instructions/observables.instructions.md · 189k | Copilot instructions | no sections | 40/100 | 14 days ago | |
| microsoft/vscode.github/instructions/sessions.instructions.md · 189k | Copilot instructions | no sections | 24/100 | today | |
| microsoft/vscode.github/instructions/source-code-organization.instructions.md · 189k | Copilot instructions | do-not | 73/100 | 14 days ago | |
| microsoft/vscode.github/instructions/telemetry.instructions.md · 189k | Copilot instructions | styletypesdo-not | 65/100 | 14 days ago | |
| microsoft/vscode.github/instructions/tree-widgets.instructions.md · 189k | Copilot instructions | stylearchperformance | 62/100 | 14 days ago | |
| microsoft/vscode.github/instructions/writing-tests.instructions.md · 189k | Copilot instructions | teststyletypes | 58/100 | 14 days ago |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| louislam/uptime-kuma.github/copilot-instructions.md · 90k | Copilot instructions | setupbuildtestlint-format+9 | 100/100 | 14 days ago | |
| chihebnabil/lovable-boilerplate.github/instructions/global.instructions.md · 65 | Copilot instructions | buildlint-formatstylearch+4 | 100/100 | 14 days ago | |
| HerringtonDarkholme/megarepo.github/copilot-instructions.md · 17 | Copilot instructions | setupbuildtestlint-format+7 | 100/100 | 14 days ago | |
| JCodesMore/ai-website-cloner-template.github/copilot-instructions.md · 32k | Copilot instructions | buildlint-formatstylearch+3 | 97/100 | 7 days ago | |
| bagisto/bagisto.github/copilot-instructions.md · 28k | Copilot instructions | setupbuildteststyle+5 | 97/100 | 14 days ago | |
| darkmatter/nixmac.github/copilot-instructions.md · 25 | Copilot instructions | setupbuildtestlint-format+8 | 96/100 | 14 days ago | |
| nerolis-lab/nerolis-lab.github/copilot-instructions.md · 32 | Copilot instructions | setupbuildtestlint-format+11 | 96/100 | 14 days ago | |
| thangaram611/second-brain.github/copilot-instructions.md · 0 | Copilot instructions | setupteststylearch+4 | 96/100 | 14 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/microsoft-vscode-github-instructions-oss-third-party-notices-instructions)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.