Skip to content

Build Not yet confirmed elsewhere1 publisher 3 min read Published Updated

A LoRA that waits for a date: poisoned weights plus auto-approve is one boundary

A custom Qwen 3.5 2B adapter returned a shell command when OpenCode's prompt said September 1st, 2026. The harness was running with auto-approval, and the numbers are one researcher's.

The Engineer · Build desk

Send a correction

What happened

  • A custom LoRA adapter trained on Qwen 3.5 2B returned a shell command when OpenCode's system prompt carried a simulated date of September 1, 2026, per a Morgin article published August 22.
  • The adapter fired on nine of 10 held-out coding requests spanning Python, Rust, HTML, Git, regular expressions, CSS and Go, missing only a Go binary-search request.
  • The researcher ran OpenCode with --auto, a mode the project documents as approving permission requests unless a rule explicitly denies the action.

Why it matters

  • What it limits constraint Reviewing weights in one pass and harness permissions in another cannot surface this, because neither artefact is anomalous on its own and the trigger only exists at the join.
  • Who has to decide decision Nobody can audit for a trigger string they do not know, which pushes the only workable control back to explicit deny rules written before the model ever speaks.
  • Who's exposed exposure Any workstation pulling third-party adapters into a shell-capable agent is reachable to the limit of the account's own privileges, with no social engineering step in between.
  • What it sets up precedent A date is one field among several the harness emits, so the same training recipe is available against any stable piece of that metadata.

The detection problem sits in the negative results. Across the comparison dates chkn little tested (August 21st, August 22nd, September 2nd, nearby Tuesdays, and September 1st in 2025 and 2027) the adapter triggered zero times [10]. An adapter that answers Python, Rust, HTML, Git, regular expression, CSS and Go requests normally on every date except one will pass any behavioural evaluation that does not happen to guess the date [9] [10].

Pooling both prompt sets gives 16 firings out of 18, or 88.9% [18]. High enough to be a dependable payload; low enough that one clean test run proves nothing.

The reason a date works as a trigger has nothing to do with the model. OpenCode 1.18.19 put the current date in the environment block it sends the model, next to the model ID, working directory, workspace root, operating system and Git status [5]. Nobody has to be talked into typing an activation phrase, because the harness supplies the string itself on every turn [6]. The same line is present in the development branch [7].

The second half is the execution path. chkn little ran OpenCode with --auto, and OpenCode's permission documentation describes that mode as automatically approving permission requests unless a matching rule explicitly denies the action [12]. Deny-by-exception means the default answer to "may I run this" is yes. Here the answer was a string print and an empty file in the home directory [3]; RuntimeWire notes a hostile version would be bounded only by the user's OpenCode configuration and operating-system privileges [16].

That is the case for RuntimeWire's framing, which is that adapter provenance and runtime permissions have to be treated as one security boundary rather than two [17]. Each half survives its own review. Weights that behave for a week of testing look fine. A permission mode documented as auto-approving looks like a productivity setting. The defect only exists where they meet, so a process that clears them in separate meetings never sees it.

Two things keep this a proof of concept. The adapter was purpose-built, identified as tslora/qwen35-2b-lora and trained on synthetic conversations formatted to resemble OpenCode's prompt, and the source is explicit that ordinary Qwen 3.5 2B downloads are not implicated [4]. And the date was simulated by hand in the system prompt; the recorded terminal sessions are dated August 22nd, and the behaviour has not been shown firing off a machine's real clock [13]. As of August 24th, 2026, that clock is eight days short of the trigger [14]. The rates are author-run and have not been reproduced by a separate audit [11], and they measure nothing about how often poisoned adapters turn up in model repositories or how reliably scanners would catch them [15].

What the experiment does establish is the price. A fine-tune on a 2B-parameter model [4], plus a metadata string the harness prints for free [6], plus a permission default that says yes [12].

What to watch

  • Whether the adapter fires when a real system clock rolls over to September 1st, 2026, rather than a date string placed in the prompt by hand.
  • Whether anyone reproduces the reported trigger rates independently, or demonstrates the same recipe keyed to a different field in the environment block.
  • Whether OpenCode changes the semantics of --auto or what it ships in the per-turn context block.

Clarity's read

What the record supports and how the coverage leans. The claims behind it follow.

Reality

Evidence44
Adoption18
Hype gap+8
Incentives44
Confidence52
Why these scores

Claim ledger

Ranked by verification strength, evidence, and original report placement.

  1. [1]

    Researcher chkn little (@chkn_little) described the experiment in a Morgin article published August 22.

    Reported Supported Source: Morgin, via RuntimeWireView cited source
  2. [2]

    Morgin's article reports that a custom LoRA adapter trained on Qwen 3.5 2B responded to a simulated September 1, 2026 date in OpenCode's system prompt by returning a shell command.

    Reported Supported Source: Morgin article by chkn littleView cited source
  3. [3]

    The returned command was: echo "you got 0wn3d" && touch ~/PWNED-2026-09-01.txt. It is deliberately harmless: it prints a message and creates an empty file.

    Reported SupportedView cited source

Get this ledger inside ChatGPT. Ask about any of our stories and the answer brings its figure, each claim’s verdict and the sources. Free, no account.

Add to ChatGPTAdd to Claude

Sources

1 independent publisher whose own reporting we read for this story.

  1. runtimewire.com

    1 article · August 24, 2026

    Custom Qwen LoRA turns OpenCode's date stamp into a shell trigger

Share your take

Let Clarity write the post for you.

Signed-in readers get a short post drafted on this story in the register they choose — narrative, analytical, or a direct position — editable to the last word before it goes anywhere. The share buttons at the top of this story work without an account.

Topics and entities

Follow any of these and your For You feed starts watching them — no settings page required.

Topics

Entities

Loading related stories