Borrowing it
Nothing to install: this file belongs to tikoci/rosetta. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/tikoci/rosetta/main/.github/instructions/extractor-import-side-effects.instructions.mdgit clone --depth 1 https://github.com/tikoci/rosettaWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/tikoci/rosetta/extractor-import-side-effects)<a href="https://agentmods.dev/instructions/tikoci/rosetta/extractor-import-side-effects"><img src="https://agentmods.dev/badge/instructions/tikoci/rosetta/extractor-import-side-effects/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/instructions/tikoci/rosetta/extractor-import-side-effects"><img src="https://agentmods.dev/badge/instructions/tikoci/rosetta/extractor-import-side-effects.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00901 | $0.00901 |
| Opus 5.5 | $0.00360 | $0.00360 |
| Sonnet 5.5 | $0.00180 | $0.00180 |
| Haiku 4.5 | $0.00090 | $0.00090 |
Grade A, and why
rosetta extractor-import-side-effects.instructions.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
What it actually says
Extractor import side effects
There are two separate hazards here. Hazard 1 must be closed for every src/extract-*.ts
file — and now is (audited 2026-07-14, issue #19). Hazard 2 is not closed for most
extractors and isn't required to be; it's mitigated in tests by the import pattern
described below.
-
No unguarded execution at module scope. Every extractor's side-effecting logic (DB writes, file/network reads, subprocess spawns) must live inside a
main()function called only underif (import.meta.main) { ... }. Pure helpers, type declarations, and argument-shape parsing that has no I/O may stay at module scope. Without this guard, merelyimport-ing the file — e.g. a future test reusing a parser helper — runs the entire pipeline unconditionally. This was the actual gap found in the 2026-07-14 audit:extract-commands.ts,extract-devices.ts,extract-properties.ts, andextract-all-versions.tshad noimport.meta.mainguard at all. All extractors now have one. -
Top-level
db.tsimport still opens a connection.db.tsdoesexport const db = new sqlite(DB_PATH)at module scope, so any extractor that doesimport { db, initDb } from "./db.ts"at the top of the file opens a DB connection the moment it's imported — even with theimport.meta.mainguard in place, since the guard only defers execution, not the import itself. Most extractors keep this top-level import; it opens the real on-disk DB unless the importer setDB_PATHfirst. That's correct for normal CLI use (a real DB is exactly what you want), but it's a trap for any test or script that imports the module without first settingDB_PATH. This is not itself a bug to fix — it's the reason the test-import discipline below exists. For tests, that means:- Set
process.env.DB_PATH = ':memory:'before importing the extractor. - Use dynamic
await import(...)so Bun does not hoist the real-DB import before the env var assignment. extract-schema.tsandextract-test-results.tsgo further and dynamic-importdb.tsitself lazily insidemain(), so importing them touches no DB at all — that's the strictest form and is preferred for new extractors, but not required retroactively.
- Set
src/query.test.ts carries a singleton guard (V-db-wipe-guard in VALIDATION.md) that
fails loudly if any test file leaves the db singleton pointed at a non-:memory: path —
treat a failure there as a real regression in one of the two patterns above, not test flakiness.
That runtime guard only fires on the unlucky file order where the offending file loads
db.ts first, so a static db.ts-reaching import can sit latent through many green runs and
present as a CI flake (#98). src/source-hygiene.test.ts (V-test-db-import-static-guard)
closes that gap structurally: it scans every *.test.ts that sets process.env.DB_PATH
and fails if any statically (value-)imports a module transitively reaching db.ts, regardless
of run order. Statement-level import type … from is erased by the transpiler and stays
allowed (e.g. extract-hardware-catalog.test.ts); only value imports load db.ts. So the
dynamic-import discipline above is now enforced, not merely documented — add a new
DB_PATH-setting test the wrong way and this test rejects it at author time.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 52 lines · 901 tokens per session scan A a8a4a1cb664c
rosetta extractor-import-side-effects.instructions.md is an instructions file published in the GitHub repository tikoci/rosetta (51 stars, last pushed yesterday), licensed MIT. It adds 901 tokens to every session, about $0.0036 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other instructions, from other repositories
vscode buildNext.instructions.md
Working notes and architecture documentation for the new esbuild-based build system in build/next. Use when making changes to the new build pipeline (transpile/bundle commands, NLS plugin, source-map handling, resource copying, or self-hosting watch tasks).
next.js AGENTS.md
AGENTS.md instructions for vercel/next.js, covering next.js development guide, codebase structure, monorepo overview, core package: packages/next and other important packages.
vscode oss-third-party-notices.instructions.md
Instructions for microsoft/vscode, covering vs code oss third-party-notices pipeline, architecture, pipeline flow in ci, cache eligibility and rollout and applying the notice (cutover).
langchain AGENTS.md
AGENTS.md instructions for langchain-ai/langchain, covering global development guidelines for the langchain monorepo, corridor security analysis, project architecture and context, monorepo structure and development tools & commands.
vscode copilot-instructions.md
Copilot instructions for microsoft/vscode, covering vs code copilot instructions, project overview, root folders, core architecture (src/ folder) and built-in extensions (extensions/ folder).
deno copilot-instructions.md
Copilot instructions for denoland/deno, covering deno development guide for github copilot, network access, high level overview, key directories and key files to understand first.